Παράδειγµα # ΠΡΟΒΛΗΜΑΤΑ ΑΡΧΙΚΩΝ ΤΙΜΩΝ Σ Ε ΕΠΙΜΕΛΕΙΑ: Ν. Βασιλειάδης Άσκηση ίδεται η διαφορική εξίσωση: dy dx y 0 = 0 x = y + e, Να επιλυθεί το πρόβληµα αρχικών τιµών µε τις µεθόδους Euler και Runge-Kutta 4ης τάξης. Να σχολιασθούν τα αποτελέσµατα και να γίνει σύγκριση µε τα αντίστοιχα αναλυτικά. Στη συνέχεια να αποδειχθεί το κριτήριο ευστάθειας των δύο µεθόδων για το συγκεκριµένη διαφορική εξίσωση και να υπολογισθεί το µέγιστο επιτρεπτό βήµα x. Τέλος να ελεγχθεί αν τα αναλυτικά ευρήµατα σχετικά µε την ευστάθεια επαληθεύονται αριθµητικά. Απάντηση: Το παραπάνω πρόβληµα αρχικών τιµών µπορεί να επιλυθεί µε Matematca ως: DSolve[{y'[x] == -y[x] + Exp[-x], y[0] == 0}, y[x], x] x Η αναλυτική του λύση προκύπτει να είναι: y( x) = e ( 0 + x) Ο κώδικας σε Fortran που επιλύει το παραπάνω πρόβληµα µε τις µεθόδους Euler και Runge-Kutta 4 ης τάξης δίνεται παρακάτω: program EulerRK4 mplct none nteger::,n real*8::,tstart,tend real*8,allocatable::x(:),y(:)!fnd program start tme call cpu_tme(tstart) n=0!number of steps Allocate(x(n+),y(n+))!Memory allocaton =0.0!step x()=0.!intal x y()=0.!intal y!open output fle open(00,fle="eulerrk4_results.dat")!solve te ntal value problem wt te Euler metod call euler(x,y,,n)!wrte Euler results to fle wrte(00,*) "---------------------------- Euler ------------------------- ---" do =,n+ wrte(00,"(i4,0es5.5)"),x(),sol(x()),y(),abs(sol(x())-y()) - -
!Solve te ntal value problem wt te 4t order Runge-Kutta metod call RK4(x,y,,n)!Wrte 4t order Runge-Kutta results to fle wrte(00,*) "----------------------------- RK4 -------------------------- ---" do =,n+ wrte(00,"(i4,0es5.5)"),x(),sol(x()),y(),abs(sol(x())-y())!fnd program end tme call cpu_tme(tend) wrte(*,"(a,es4.4,x,a)") "Program as used", tend-tstart,"seconds of CPU tme." wrte(*,"(a)") "Open fle EulerRK4_results.dat for te soluton..." wrte(00,"(a)") "----------------------------------" wrte(00,"(a,es4.4,x,a)") "Program as used", tend-tstart,"seconds of CPU tme."!close output fle close(00) contans real*8 functon f(x,y) real*8,ntent(in)::x,y f=-y+exp(-x) end functon f real*8 functon sol(x) real*8,ntent(in)::x sol=exp(-x)*(0.+x) end functon sol subroutne Euler(x,y,,n) nteger,ntent(in)::n nteger:: real*8::,x(:),y(:) do =,n y(+)=y()+*f(x(),y()) x(+)=x()+ end subroutne Euler subroutne RK4(x,y,,n) nteger::,n real*8::k,k,k3,k4,,x(:),y(:) do =,n k=f(x(),y()) k=f(x()+0.5*,y()+0.5**k) k3=f(x()+0.5*,y()+0.5**k) k4=f(x()+,y()+*k3) - -
y(+)=y()+(/6.)*(k+.*k+.*k3+k4) x(+)=x()+ end subroutne RK4 end program Εκτελώντας τον παραπάνω κώδικα για 0 επαναλήψεις και τρία διαφορετικά βήµατα = 0.0, = 0., = 0.5 προκύπτουν τα παρακάτω πινακοποιηµένα αποτελέσµατα: Βήµα = 0.0: Euler n x Αναλυτική Αριθµητική Απόλυτο Σφάλµα 0.000 0.00000 0.00000 0.00E+00 0.00 9.9040 9.9000 3.99E-04 3 0.00 9.859 9.8080 7.90E-04 4 0.030 9.73357 9.7339.7E-03 5 0.040 9.64633 9.64477.55E-03 6 0.050 9.55986 9.55794.9E-03 7 0.060 9.4745 9.4787.8E-03 8 0.070 9.389 9.38657.64E-03 9 0.080 9.3050 9.3003.99E-03 0 0.090 9.57 9.84 3.33E-03 0.00 9.3886 9.359 3.66E-03 Runge-Kutta 4 ης τάξης n x Αναλυτική Αριθµητική Απόλυτο Σφάλµα 0.000 0.00000 0.00000 0.00E+00 0.00 9.9040 9.9040 6.76E- 3 0.00 9.859 9.859.34E- 4 0.030 9.73357 9.73357.99E- 5 0.040 9.64633 9.64633.63E- 6 0.050 9.55986 9.55986 3.6E- 7 0.060 9.4745 9.4745 3.87E- 8 0.070 9.389 9.389 4.47E- 9 0.080 9.3050 9.3050 5.07E- 0 0.090 9.57 9.57 5.64E- 0.00 9.3886 9.3886 6.E- - 3 -
Βήµα = 0.: Euler n x Αναλυτική Αριθµητική Απόλυτο Σφάλµα 0.000 0.00000 0.00000 0.00E+00 0.00 9.3886 9.0000 3.89E-0 3 0.00 8.3505 8.8048 7.06E-0 4 0.300 7.63043 7.5343 9.6E-0 5 0.400 6.9733 6.85496.6E-0 6 0.500 6.36857 6.3650.3E-0 7 0.600 5.8740 5.67350.44E-0 8 0.700 5.3346 5.603.5E-0 9 0.800 4.8575 4.69459.58E-0 0 0.900 4.436 4.7006.6E-0.000 4.04667 3.8837.63E-0 Runge-Kutta 4 ης τάξης n x Αναλυτική Αριθµητική Απόλυτο Σφάλµα 0.000 0.00000 0.00000 0.00E+00 0.00 9.3886 9.3886 6.67E-07 3 0.00 8.3505 8.3505.E-06 4 0.300 7.63043 7.63043.66E-06 5 0.400 6.9733 6.9733.0E-06 6 0.500 6.36857 6.36857.9E-06 7 0.600 5.8740 5.874.50E-06 8 0.700 5.3346 5.3347.66E-06 9 0.800 4.8575 4.8576.77E-06 0 0.900 4.436 4.436.83E-06.000 4.04667 4.04668.86E-06 Βήµα = 0.5 : Euler n x Αναλυτική Αριθµητική Απόλυτο Σφάλµα 0.000 0.00000 0.00000 0.00E+00 0.500 6.36857 5.50000 8.69E-0 3.000 4.04667 3.0537 9.93E-0 4.500.56600.7057 8.55E-0 5.000.640 0.96685 6.57E-0 6.500.0606 0.5509 4.75E-0 7 3.000 0.6473 0.3659 3.3E-0 8 3.500 0.40767 0.839.4E-0 9 4.000 0.564 0.0669.50E-0 0 4.500 0.608 0.0650 9.86E-0 5.000 0.007 0.0368 6.43E-0-4 -
Runge-Kutta 4 ης τάξης n x Αναλυτική Αριθµητική Απόλυτο Σφάλµα 0.000 0.00000 0.00000 0.00E+00 0.500 6.36857 6.37054.97E-03 3.000 4.04667 4.0494.47E-03 4.500.56600.5683.3E-03 5.000.640.6595.9E-03 6.500.0606.0756.50E-03 7 3.000 0.6473 0.64835.E-03 8 3.500 0.40767 0.40848 8.4E-04 9 4.000 0.564 0.5700 5.79E-04 0 4.500 0.608 0.649 4.05E-04 5.000 0.007 0.035.80E-04 Παρατηρείται πως σε όλες τις περιπτώσεις η µέθοδος Runge-Kutta 4 ης τάξης δίνει καλύτερα αποτελέσµατα από την µέθοδο Euler. Επίσης, όπως ήταν αναµενόµενο, η ακρίβεια αυξάνει και στις δύο µεθόδους καθώς το βήµα µικραίνει. Βέβαια η µέθοδος Euler ακόµη και για το σχετικά µικρό βήµα = 0. δεν δίνει ικανοποιητικά αποτελέσµατα. Ανάλυση ευστάθειας µεθόδου Euler Η µέθοδος Euler γράφεται ως: y = (, ) ( x y + f x y = y + y + e + ) Εισάγοντας το σφάλµα ε = yˆ y στην παραπάνω σχέση προκύπτει: (, ) yˆ + ε = yˆ + ε + f x yˆ + ε + + x x ( ) ε yˆ + ε = yˆ + ε + f yˆ + ε + e + + yˆ + ε = yˆ + yˆ + e + + + ε ε = ( ) ε + + ε = ε+ Για να είναι ευσταθής η µέθοδος θα πρέπει: < < < < < ε Από τα γραφήµατα που παρουσιάζονται παρακάτω παρατηρείται ότι το κριτήριο ευστάθειας που υπολογίστηκε αναλυτικά επαληθεύεται αριθµητικά. Για =.0 φαίνεται ότι η λύση είναι ασταθής και συγκεκριµένα ταλαντώνεται µεταξύ δύο τιµών. Τέλος παρατηρείται ότι για = 0.5 και = αν και η λύση της µεθόδου Euler είναι ευσταθής δεν είναι ακριβής. - 5 -
= 0.0 = 0.5 = = Ανάλυση ευστάθειας µεθόδου Runge-Kutta 4 ης τάξης Η µέθοδος Runge-Kutta 4ης τάξης γράφεται ως: k = f x y = y + e x,, k = f x + y + k = y + k + e 3, k = f x + y + k = y + k + e x k = f x +, y + k = y + k + e + 4 3 3 y + = y + k + k + k + k 6 ( ) 3 4 x + x + ( ) - 6 -
Εισάγοντας το σφάλµα ε ˆ = y y στις παραπάνω σχέσεις και συµβολίζοντας µε k ˆ την k x, y ˆ προκύπτει: ποσότητα ) ) k f x y y e k =, x = ε + = + x + x ( ˆ ) ( ˆ ) ( ˆ ε ε ε ) k = y + + k + e = y + + k + e = x + ˆ ˆ = yˆ + k + e ε + ε = k ε x + ˆ ˆ 3 ε x + ( ˆ ) x ( ˆ ) ˆ + k 3 = y + ε + k + e = y + ε + k ε + e = = yˆ + k + e ε ε = k + ε 4 x + 4 (( ˆ ) 3 ) ( ˆ ) ˆ x + k = y + ε + k + e = y + ε + k3 + ε + e = 4 ( ˆ ( x + ) ) 3 ˆ ˆ = y + k3 + e ε + + ε = k4 + + ε 4 4 Εισάγοντας το σφάλµα σχέση για το y + προκύπτει: ε = yˆ y και αντικαθιστώντας τις παραπάνω εκφράσεις στην y = y + + ( k k k3 k4 ) 6 + + + yˆ ˆ + + ε+ = y + ε + ( k + k + k3 + k4 ) 6 yˆ + ε = yˆ + ε + + ˆ ˆ ˆ ˆ + k + ε + k ε + k3 + ε + k4 + ε 6 4 4 ε + = ε + ε ε + ε + ε 6 4 4 3 4 3 4 ε+ ε+ = ε + + = + + 6 4 ε 6 4-7 -
Για να είναι η µέθοδος ευσταθής θα πρέπει: 3 4 + + < 6 4 Η παραπάνω ανισότητα µπορεί να επιλυθεί µε την βοήθεια της Matematca ως: Reduce[Abs[ - + ^/ - ^3/6 + ^4/4] <,, Reals] // N Το αναλυτικό κριτήριο ευστάθειας της µεθόδου Runge-Kutta 4 ης τάξης είναι: 0 < <.785 = 0.5 = = =.8 Παρατηρείται ότι το κριτήριο ευστάθειας που υπολογίστηκε αναλυτικά επαληθεύεται αριθµητικά για την µέθοδο Runge-Kutta 4 ης τάξης. Για =.8 φαίνεται ότι η λύση είναι ασταθής και συγκεκριµένα τείνει να απειριστεί καθώς αυξάνει το x. Τέλος παρατηρείται ότι ακόµα και για σχετικά µεγάλα βήµατα = 0.5 και = η αριθµητική λύση παραµένει ικανοποιητική ακρίβεια. - 8 -
Άσκηση Να εξεταστεί πότε οι αλγόριθµοι ολοκλήρωσης συνήθων διαφορικών εξισώσεων Runge- Kutta ανάγονται στους κανόνες ολοκλήρωσης Newton Cotes. Απάντηση: Οι αλγόριθµοι ολοκλήρωσης συνήθων διαφορικών εξισώσεων Runge-Kutta ανάγονται στους dy κανόνες ολοκλήρωσης Newton Cotes όταν η Σ Ε είναι της µορφής : f ( x) dx = Σε αυτή την περίπτωση η αριθµητική λύση δίνεται από τον τύπο: y = y + + f ( x) dx Τότε η µέθοδος Runge-Kutta ης τάξης γίνεται: =, k = f ( x + ), y y ( k k ) y ( f x f x ) k f ( x ) x + = + + + = + + + η οποία αντιστοιχεί στη µέθοδο ολοκλήρωσης του τραπεζίου: x x + x f ( x) dx = f ( x ) + f ( x + ) Η µέθοδος Runge-Kutta 3 ης τάξης γίνεται: =, k = f ( x + ), k = f ( x + ) k f ( x ) / 3 y+ = y + ( k + 4 k + k3 ) = y + f ( x ) + 4 f ( x + ) + f ( x + ) 6 6 Η παραπάνω σχέση αντιστοιχεί στον κανόνα /3 του Smpson: x + ' ' f ( x) dx = ( f ( x ) + 4 f ( x + ') + f ( x + ') ), ' = 3 x Η µέθοδος Runge-Kutta 4 ης τάξης γίνεται: =, k = f ( x + ), k = f ( x + ), k = f ( x + ) k f ( x ) / 3 / 4 y+ = y + ( k + k + k3 + k4) = y + f ( x ) + 4 f ( x + ) + f ( x + ) 6 6 Η παραπάνω σχέση ταυτίζεται µε την έκφραση για την µέθοδο Runge-Kutta 3 ης και αντιστοιχεί στον κανόνα /3 του Smpson. - 9 -
Άσκηση 3 Έστω το πρόβληµα αρχικών τιµών: d x t dx t dx x ( t) t x dt dt + t dt t= 0 0 t 5 + + = sn, 0 = 0., = 0. Να περιγραφεί ένα φυσικό πρόβληµα που θα µπορούσε να µοντελοποιείται µε το παραπάνω πρόβληµα αρχικών τιµών. Στην συνέχεια εφαρµόζοντας τη µέθοδο αριθµητικής x t και dx / dt. Τα ολοκλήρωσης Runge-Kutta 4 ης τάξης, να υπολογιστούν τις τιµές των αποτελέσµατα να συγκριθούν µε την αναλυτική λύση της Σ Ε. Απάντηση: Η παραπάνω Σ Ε είναι ένα τυπικό πρόβληµα αρχικών τιµών και περιγράφει x t περιγράφει την εξαναγκασµένη ταλάντωση µε τριβή, όπου η εξαρτηµένη µεταβλητή αποµάκρυνση από τη θέση ισορροπίας την χρονική στιγµή t, ενώ οι αρχικές συνθήκες αντιστοιχούν στην αρχική αποµάκρυνση από την θέση ισορροπίας και στην αρχική ταχύτητα κίνησης. Η ταλάντωση είναι εξαναγκασµένη λόγω του όρου στο δεξί τµήµα της εξίσωσης που περιγράφει την εξωτερική διέγερση και έχει τριβή (ή απόσβεση) λόγω του όρου της πρώτης παραγώγου. Παρατηρείται ότι καθώς αυξάνει ο χρόνος η εξωτερική δύναµη µειώνεται και τελικά για µεγάλες τιµές του χρόνου µηδενίζεται. Εποµένως, αφού για µεγάλους χρόνους η εξωτερική δύναµη µηδενίζεται και υπάρχει τριβή στο σύστηµα αναµένεται πως η αρχική ταλαντωτική συµπεριφορά θα αποσβένει και τελικά σε ικανοποιητικά µεγάλους χρόνους το σύστηµα θα επανέρθει στη θέση ισορροπίας. Για την χρήση της µεθόδου Runge-Kutta 4 ης τάξης είναι αναγκαίος ο µετασχηµατισµός της Σ Ε ης τάξης σε ένα σύστηµα δύο Σ Ε ης τάξης θέτοντας: g Το προκύπτον σύστηµα γράφεται ως: dx dg = x, g = = dt dt dg dt dg dt = g + g + g = sn t t + dg dt dg dt (,, ) = g = f t g g = g g + sn t = f t, g, g t + Με οριακές συνθήκες g ( 0 ) = 0. και g 0 = 0.. - 0 -
Ο κώδικας σε Fortran: program OscllatonRK4 mplct none nteger::,n real*8::dt,tstart,tend,k,k,k3,k4,k,k,k3,k4 real*8,allocatable::t(:),g(:),g(:)!fnd program start tme call cpu_tme(tstart) n=00!number of tme steps Allocate(t(n+),g(n+),g(n+))!Memory allocaton dt=0.!tme step t()=0.!intal t g()=0.!intal g g()=0.!intal g!open output fle open(00,fle="oscllatonrk4_results.dat")!implementaon of 4torder Runge-Kutta metod do =,n t(+)=t()+dt do =,n k=f(t(),g(),g()) k=f(t(),g(),g()) k=f(t()+0.5*dt,g()+0.5*dt*k,g()+0.5*dt*k) k=f(t()+0.5*dt,g()+0.5*dt*k,g()+0.5*dt*k) k3=f(t()+0.5*dt,g()+0.5*dt*k,g()+0.5*dt*k) k3=f(t()+0.5*dt,g()+0.5*dt*k,g()+0.5*dt*k) k4=f(t()+dt,g()+dt*k3,g()+dt*k3) k4=f(t()+dt,g()+dt*k3,g()+dt*k3) g(+)=g()+(dt/6.)*(k+.*k+.*k3+k4) g(+)=g()+(dt/6.)*(k+.*k+.*k3+k4) do =,n+ wrte(00,"(i4,es5.5,es6.6)"),t(),g(),g()!fnd program end tme call cpu_tme(tend) wrte(*,"(a,es4.4,x,a)") "Program as used", tend-tstart,"seconds of CPU tme." wrte(*,"(a)") "Open fle OscllatonRK4_results.dat for te soluton..." wrte(00,"(a)") "----------------------------------" wrte(00,"(a,es4.4,x,a)") "Program as used", tend-tstart,"seconds of CPU tme." - -
!Close output fle close(00) contans real*8 functon f(t,g,g) real*8,ntent(in)::t,g,g f=g end functon f real*8 functon f(t,g,g) real*8,ntent(in)::t,g,g f=-g-g+sn(t)/(.+t) end functon f end program Η λύση της παραπάνω Σ Ε η οποία είναι αρκετά περίπλοκη δεν µπορεί να γραφτεί σε κλειστή µορφή. Πρόκειται για ήµι-αναλυτική λύση, όπου απαιτείται ο αριθµητικός υπολογισµός ενός ολοκληρώµατος. Οι τιµές της ηµι-αναλυτικής λύσης µπορούν να υπολογιστούν µέσω Matematca ως: a=dsolve[{x''[t]+x'[t]+x[t]==sn[t]/(+t),x[0]==0.,x'[0]==0.},x[t],t]; g[t_]=x[t]/.a[[]]; n=0; =0.0; sol=table[g[t],{t,0,n*,}]//cop; Dsol=Table[g'[t],{t,0,n*,}]//Cop; NumberForm[MatrxForm[Transpose[{sol,Dsol}]],6] Στην συνέχεια παρουσιάζονται πινακοποιηµένα και γραφικά τα αριθµητικά αποτελέσµατα της Fortran, τα ηµι-αναλητικά αποτελέσµατα της Matematca καθώς και η µεταξύ τους σύγκριση για δύο χρονικά βήµατα: n t Αριθµητική x t Αναλυτική x t = 0.0 Απόλυτο σφάλµα Αριθµητική dx / dt Αναλυτική dx / dt Απόλυτο σφάλµα 0.00 0.0000 0.0000.49E-09 0.0000 0.0000.98E-09 0.0 0.099 0.099.48E-09 0.9705 0.9705 3.00E-09 3 0.0 0.0394 0.0394.46E-09 0.94 0.94 3.0E-09 4 0.03 0.0587 0.0587.45E-09 0.948 0.948 3.0E-09 5 0.04 0.0777 0.0777.44E-09 0.8885 0.8885 3.03E-09 6 0.05 0.0965 0.0965.43E-09 0.863 0.863 3.03E-09 7 0.06 0.50 0.50.4E-09 0.8388 0.8388 3.03E-09 8 0.07 0.333 0.333.40E-09 0.854 0.854 3.0E-09 9 0.08 0.53 0.53.39E-09 0.799 0.799 3.0E-09 0 0.09 0.69 0.69.38E-09 0.773 0.773 3.00E-09 0.0 0.867 0.867.37E-09 0.7506 0.7506.99E-09 - -
n t Αριθµητική x t Χρονικό βήµα t=0.0: Αναλυτική x t = 0.5 Απόλυτο σφάλµα Αριθµητική dx / dt Αναλυτική dx / dt Απόλυτο σφάλµα 0.00 0.0000 0.0000.49E-09 0.0000 0.0000.98E-09 0.50 0.7954 0.7949 5.09E-05 0.400 0.40.95E-04 3.00 0.584 0.586.4E-05 0.538 0.55.4E-04 4.50 0.3795 0.3800 5.49E-05 0.408 0.4083.85E-05 5.00 0.3855 0.38555.95E-05 0.085 0.0844 7.59E-05 6.50 0.40307 0.4030 4.43E-05-0.058-0.059 9.79E-05 7 3.00 0.36788 0.36775.4E-04-0.444-0.449 4.86E-05 8 3.50 0.88 0.865.68E-04-0.470-0.466 4.E-05 9 4.00 0.608 0.600.55E-04-0.638-0.6369.30E-04 0 4.50 0.067 0.0663 8.5E-05-0.634-0.65.83E-04 5.00-0.0998-0.0996.96E-05-0.05-0.0997.8E-04 Χρονικό βήµα t=0.5: - 3 -
Άσκηση 4 ίδεται το πρόβληµα αρχικών τιµών d x dx dx x t t x dt dt dt t= 0 + + = sn, (0) = 0, = 5 Να περιγραφεί ένα φυσικό πρόβληµα που θα µπορούσε να µοντελοποιείται µε το παραπάνω πρόβληµα αρχικών τιµών. Να επιλυθεί αριθµητικά µε την µε τον παρακάτω αλγόριθµο 4ης τάξης και να συγκριθούν µε τα αντίστοιχα αναλυτικά: y+ = y + k + k k3 k4 6 + + + k = f ( x, y ) k = f x +, y + k k3 = f x +, y + k k + + k4 = f x +, y k + + k3 Απάντηση: Η παραπάνω Σ Ε είναι ένα τυπικό πρόβληµα αρχικών τιµών και περιγράφει x t περιγράφει την εξαναγκασµένη ταλάντωση µε τριβή, όπου η εξαρτηµένη µεταβλητή αποµάκρυνση από τη θέση ισορροπίας την χρονική στιγµή t, ενώ οι αρχικές συνθήκες αντιστοιχούν στην αρχική αποµάκρυνση από την θέση ισορροπίας και στην αρχική ταχύτητα κίνησης. Η ταλάντωση είναι εξαναγκασµένη λόγω του όρου στο δεξί τµήµα της εξίσωσης που περιγράφει την εξωτερική διέγερση και έχει τριβή (ή απόσβεση) λόγω του όρου της πρώτης παραγώγου. Καθώς η δύναµη που παρέχεται στο σύστηµα έχει ηµιτονοειδή µορφή, παρατηρείται ότι το σύστηµα θα ταλαντώνεται επ άπειρον γύρω από µια θέση ισορροπίας µε σταθερό πλάτος και περίοδο. Για την χρήση της µεθόδου Runge-Kutta 4 ης τάξης είναι αναγκαίος ο µετασχηµατισµός της Σ Ε ης τάξης σε ένα σύστηµα δύο Σ Ε ης τάξης θέτοντας: g dx dg = x, g = = dt dt - 4 -
Το προκύπτον σύστηµα γράφεται ως: dg dt dg dt = g + g + g = sn t dg dt dg dt (,, ) = g = f t g g = g g + sn t = f t, g, g Με οριακές συνθήκες g ( 0 ) = 0 και g 0 = 5. Η αναλυτική λύση της παραπάνω Σ Ε µπορεί να βρεθεί µέσω Matematca ως: DSolve[{x''[t] + x'[t] + x[t] == Sn[t], x[0]==0., x'[0]==0.}, x[t], t] Προκύπτει ότι η αναλυτική λύση είναι: t 3t 3t x t e t 3 / = 3cos + 3 sn cos Στην συνέχεια δίνεται η γραφική παράσταση της αναλυτικής λύσης όπου παρατηρείται η συµπεριφορά που περιγράφθηκε παραπάνω: Το αρχικό πρόβληµα θα επιλυθεί κάνοντας χρήση της κλασσικής µεθόδου Runge Kutta 4 ης τάξης, καθώς και της τροποποιηµένης που προτείνεται στην εκφώνηση, έτσι ώστε να συγκριθεί η ακρίβεια των δύο µεθόδων. - 5 -
Ο κώδικας σε Fortran: program OscllatonModfedRK4 mplct none nteger::,n real*8::dt,tstart,tend,k,k,k3,k4,k,k,k3,k4 real*8,allocatable::t(:),g(:),g(:)!fnd program start tme call cpu_tme(tstart) n=0!number of tme steps Allocate(t(n+),g(n+),g(n+))!Memory allocaton dt=0.!tme step t()=0.!intal t g()=0.!intal g g()=5.!intal g!open output fle open(00,fle="oscllatonmodfedrk4_results.dat")!tme do =,n t(+)=t()+dt!implementaon of 4t order Runge-Kutta metod call RK4(t,g,g,n) wrte(00,*) " ----------------------------- RK4 ------------------------- ---" do =,n+ wrte(00,"(i4,0es5.5)"),t(),g(),sol(t()),abs(sol(t())-g())!implementaon of modfed 4t order Runge-Kutta metod call modfedrk4(t,g,g,n) wrte(00,*) "------------------------ RK4 modfed ---------------------- ---" do =,n+ wrte(00,"(i4,0es5.5)"),t(),g(),sol(t()),abs(sol(t())-g())!fnd program end tme call cpu_tme(tend) wrte(*,"(a,es4.4,x,a)") "Program as used", tend-tstart,"seconds of CPU tme." wrte(*,"(a)") "Open fle OscllatonModfedRK4_results.dat for te soluton..." wrte(00,"(a)") "----------------------------------" wrte(00,"(a,es4.4,x,a)") "Program as used", tend-tstart,"seconds of CPU tme."!close output fle close(00) contans - 6 -
subroutne RK4(t,g,g,n) nteger::,n real*8::t(:),g(:),g(:) do =,n k=f(t(),g(),g()) k=f(t(),g(),g()) k=f(t()+0.5*dt,g()+0.5*dt*k,g()+0.5*dt*k) k=f(t()+0.5*dt,g()+0.5*dt*k,g()+0.5*dt*k) k3=f(t()+0.5*dt,g()+0.5*dt*k,g()+0.5*dt*k) k3=f(t()+0.5*dt,g()+0.5*dt*k,g()+0.5*dt*k) k4=f(t()+dt,g()+dt*k3,g()+dt*k3) k4=f(t()+dt,g()+dt*k3,g()+dt*k3) g(+)=g()+(dt/6.)*(k+.*k+.*k3+k4) g(+)=g()+(dt/6.)*(k+.*k+.*k3+k4) end subroutne RK4 subroutne modfedrk4(t,g,g,n) nteger::,n real*8::t(:),g(:),g(:) do =,n k=f(t(),g(),g()) k=f(t(),g(),g()) k=f(t()+0.5*dt,g()+0.5*dt*k,g()+0.5*dt*k) k=f(t()+0.5*dt,g()+0.5*dt*k,g()+0.5*dt*k) k3=f(t()+0.5*dt,g()+(-0.5+./sqrt(.))*dt*k+(.-./sqrt(.))*dt*k, & g()+(-0.5+./sqrt(.))*dt*k+(.-./sqrt(.))*dt*k) k3=f(t()+0.5*dt,g()+(-0.5+./sqrt(.))*dt*k+(.-./sqrt(.))*dt*k, & g()+(-0.5+./sqrt(.))*dt*k+(.-./sqrt(.))*dt*k) k4=f(t()+dt,g()-./sqrt(.)*dt*k+(.+./sqrt(.))*dt*k3, & g()-./sqrt(.)*dt*k+(.+./sqrt(.))*dt*k3) k4=f(t()+dt,g()-./sqrt(.)*dt*k+(.+./sqrt(.))*dt*k3, & g()-./sqrt(.)*dt*k+(.+./sqrt(.))*dt*k3) g(+)=g()+(dt/6.)*(k+.*(.-./sqrt(.))*k+.*(.+./sqrt(.))*k3+k4) g(+)=g()+(dt/6.)*(k+.*(.-./sqrt(.))*k+.*(.+./sqrt(.))*k3+k4) end subroutne modfedrk4-7 -
real*8 functon f(t,g,g) real*8,ntent(in)::t,g,g f=g end functon f real*8 functon f(t,g,g) real*8,ntent(in)::t,g,g f=-g-g+sn(t) end functon f real*8 functon sol(t) real*8,ntent(in)::t sol=exp(- 0.5*t)*(3.*Cos(Sqrt(3.)*t/.)+.*Sqrt(3.)*Sn(Sqrt(3.)*t/.))/3.-Cos(t) end functon sol end program RK4 ( = 0.0 ) n x(t) Αριθµητική Αναλυτική Απόλυτο Σφάλµα 0.00 0.00000 0.00000 0.00E+00 0.0 0.04975 0.04975 9.40E-0 3 0.0 0.09900 0.09900.87E-09 4 0.03 0.4776 0.4776.78E-09 5 0.04 0.960 0.960 3.69E-09 6 0.05 0.4377 0.4377 4.58E-09 7 0.06 0.904 0.904 5.46E-09 8 0.07 0.3378 0.3378 6.3E-09 9 0.08 0.38409 0.38409 7.7E-09 0 0.09 0.4988 0.4988 8.0E-09 0.0 0.4758 0.4758 8.84E-09 Τροποποιηµένη RK4 ( = 0.0 ) n x(t) Αριθµητική Αναλυτική Απόλυτο Σφάλµα 0.00 0.00000 0.00000 0.00E+00 0.0 0.04975 0.04975.9E-09 3 0.0 0.09900 0.09900 3.8E-09 4 0.03 0.4776 0.4776 5.67E-09 5 0.04 0.960 0.960 7.50E-09 6 0.05 0.4377 0.4377 9.30E-09 7 0.06 0.904 0.904.E-08 8 0.07 0.3378 0.3378.8E-08 9 0.08 0.38409 0.38409.45E-08 0 0.09 0.4988 0.4988.6E-08 0.0 0.4758 0.4758.78E-08-8 -
RK4 ( = 0. 5) n x(t) Αριθµητική Αναλυτική Απόλυτο Σφάλµα 0.00 0.00000 0.00000 0.00E+00 0.50.90606.90474.3E-03 3.00.78907.78693.3E-03 4.50.94807.94589.7E-03 5.00.66473.663.6E-03 6.50.49.4833 7.7E-04 7 3.00.538.5385 3.7E-05 8 3.50 0.8848 0.88545 6.3E-04 9 4.00 0.590 0.587 9.68E-04 0 4.50-0.3599-0.3490.0E-03 5.00-0.79907-0.79797.E-03 Τροποποιηµένη RK4 ( = 0. 5) n x(t) Αριθµητική Αναλυτική Απόλυτο Σφάλµα 0.00 0.00000 0.00000 0.00E+00 0.50.90606.90474.3E-03 3.00.78907.78693.3E-03 4.50.94807.94589.7E-03 5.00.66473.663.6E-03 6.50.49.4833 7.7E-04 7 3.00.538.5385 3.7E-05 8 3.50 0.8848 0.88545 6.3E-04 9 4.00 0.590 0.587 9.68E-04 0 4.50-0.3599-0.3490.0E-03 5.00-0.79907-0.79797.E-03 Παρατηρείται πως η κλασσική Runge-Kutta 4 ης τάξης δίνει ελάχιστα καλύτερα αποτελέσµατα για µικρά χρονικά βήµατα ενώ καθώς το χρονικό βήµα αυξάνει οι δύο µέθοδοι ταυτίζονται. Άσκηση 5 Να προσδιοριστεί το κριτήριο ευστάθειας για την αριθµητική λύση του παρακάτω προβλήµατος αρχικών τιµών µε τη µέθοδο Euler. dy 3y y dt = dy = y y dt - 9 -
Απάντηση dy = 3y () () () () y y () () () y ( 3y y ) dt + = + y+ = ( 3) y y () () () () () () () dy ( ) y y y y y y+ y y y + = + = = + dt () () y 3 + y () = () y + y 44443 G Θα πρέπει η φασµατική ακτίνα του πίνακα G να είναι <. Υπολογίζονται οι ιδιοτιµές λ του πίνακα G ως: 3 λ λ ( λ )( λ ) = 0 3 = 0 λ + (5 ) λ + 5 + 5 = 0 5 5 λ = + =.38 5 5 λ = = 3.68 Θα πρέπει οι απόλυτες τιµές και των δύο ιδιοτιµών <: λ <.38 < <.38 < <.38 < 0 0 <.38 < < <.447.38 λ < 3.68 < < < 0.553 3.68 Εποµένως, διατηρώντας το αυστηρότερο κριτήριο προκύπτει: 0 < < 0.553. - 0 -