ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΜΕΘΟΔΟΙ, 008-009, 5 Ο ΕΞΑΜΗΝΟ ΕΡΓΑΣΙΑ #: ΣΥΝΗΘΕΙΣ ΔΙΑΦΟΡΙΚΕΣ ΕΞΙΣΩΣΕΙΣ ΚΑΙ ΣΥΣΤΗΜΑΤΑ ΠΡΟΒΛΗΜΑΤΑ ΑΡΧΙΚΩΝ ΤΙΜΩΝ ΗΜΕΡΟΜΗΝΙΑ ΠΑΡΑΔΟΣΗΣ: 3.0.008 ΔΙΔΑΣΚΩΝ: Δ. Βαλουγεώργης Άσκηση Επιμέλεια απαντήσεων: Ιωάννης Λυχναρόπουλος Έστω το πρόβλημα αρχικών τιμών: dv() t dv() t LC + RC + V () t = 0, 0 t 0 dt dt dv V ( 0) = V 0, = 0 dt t= 0 Εφαρμόζοντας τη μέθοδο αριθμητικής ολοκλήρωσης Runge-Kutta 4 ης τάξης, να V t και dv / dt. Οι τιμές των παραμέτρων είναι υπολογιστούν τις τιμές των ( ) 6 V 0 = 00, C = 0, L = 0.5, R = 00. Τα αποτελέσματα να συγκριθούν με τις αναλυτικές λύσεις. Λύση Θέτοντας dv g = παίρνουμε το σύστημα: dt η dv εξίσωση: = g, V(0) = 00 dt η dg 6 εξίσωση: 0 V 00 g, g(0) 0 dt = = Με τη βοήθεια του Matematca υπολογίζουμε την αναλυτική λύση της αρχικής εξίσωσης με την ακόλουθη εντολή: DSolveA90 6 @td + 00 0 6 @td + @td 0, @0D 00, @0D 0=, @td,te ::@td 00 33 00 t I33 CosA300 è!!!!! te + è!!!!! SnA300 è!!!!! tem>> Απομονώνουμε τη λύση με την εντολή: g[t_] = [t]/.%[[]] H γραφική παράσταση της αναλυτικής λύσης στο διάστημα [0, 0.06] δίνεται με την εντολή: Plot[g[t],{t,0,0.06},PlotRange All]
00 75 50 5 0.0 0.0 0.03 0.04 0.05 0.06-5 -50-75 Είναι φανερό ότι πρόκειται για μία ταλάντωση με ισχυρή απόσβεση. Στη συνέχεια μετατρέπουμε την αναλυτική λύση σε μορφή Fortran με την εντολή: g[t]//fortranform (00*(33*Cos(300*Sqrt()*t)+Sqrt()*Sn(300*Sqrt()*t)))/(33.*E**(00*t)) H μετατροπή που προτείνει το Matematca δεν είναι ωστόσο τέλεια! Για να γίνει δεκτή η ανωτέρω έκφραση στην Fortran πρέπει τα ορίσματα της συνάρτησης sqrt να γίνουν πραγματικά και η έκφραση E**(00*t) να γίνει Exp(00*t) Έτσι τελικά η αναλυτική λύση σε μορφή Fortran θα είναι η ακόλουθη: (00*(33*Cos(300*Sqrt(.)*t)+Sqrt(.)*Sn(300*Sqrt(.)*t)))/(33.*Exp(00*t)) Ακολουθούμε αντίστοιχη διαδικασία για την εύρεση της παραγώγου της αναλυτικής λύσης. Αρχικά υπολογίζουμε την παράγωγο με την εντολή: DA 00 33 00 t I33 CosA300 è!!!!! te + è!!!!! SnA300 è!!!!! tem,teêêsmplf 000000 00t SnA300 è!!!!! te 3 è!!!!! Σε μορφή Fortran θα είναι: %//FortranForm (-000000*Sn(300*Sqrt()*t))/(3.*Sqrt()*E**(00*t)) Τελικά με τις διορθώσεις που αναφέραμε προηγουμένως έχουμε: (-000000*Sn(300*Sqrt(.)*t))/(3.*Sqrt(.)*Exp(00*t))
Αριθμητική επίλυση με κώδικα Fortran: program ntal_value_problems_sstem! Solve: 0^-6*''+00*0^-6*'+=0, [0]=00, '[0]=0 As8ens aposbes mplct none real:: real,allocatable,dmenson(:)::,,x nteger::,metod,n=0! number of teratons allocate(x(n),(n),(n)) x()=0!startng pont ()=00!ntal value ()=0!ntal value =0.00 call rk4(x,,,,n) open(,fle='results.csv',recl=50) do =,n prnt*,,x(),(),f(x()),abs(f(x())- ()),(),df(x()),abs(df(x())-()) wrte(,'(i,",",f7.6,",",f5.7,",",f5.7,",",e5.7,",",f5.7,",",f5.7,",",e5.7)'),x(),(),f(x()),abs(f(x())- ()),(),df(x()),abs(df(x())-()) end do close() contans subroutne rk4(x,,,,n) real::x(:),(:),(:),,k,k,k3,k4,k,k,k3,k4 nteger::,n do =,n- k=f(x(),(),()) k=g(x(),(),()) k=f(x()+0.5*,()+0.5**k,()+0.5**k) k=g(x()+0.5*,()+0.5**k,()+0.5**k) k3=f(x()+0.5*,()+0.5**k,()+0.5**k) k3=g(x()+0.5*,()+0.5**k,()+0.5**k) k4=f(x()+,()+*k3,()+*k3) k4=g(x()+,()+*k3,()+*k3) x(+)=x()+ (+)=()+(/6)*(k+*k+*k3+k4) (+)=()+(/6)*(k+*k+*k3+k4) enddo end subroutne rk4 real functon f(x,x,x3) result() real,ntent(n)::x,x,x3 =x3 end functon f real functon g(x,x,x3) result() real,ntent(n)::x,x,x3 =-0**6*x-00*x3 end functon g real functon f(t) result()!analtc soluton 3
real,ntent(n)::t =(00*(33*Cos(300*Sqrt(.)*t) + Sqrt(.)*Sn(300*Sqrt(.)*t)))/(33.*Exp(00*t)) end functon f real functon df( t) result()!analtc dervatve of soluton real,ntent(n)::t =(-000000*Sn(300*Sqrt(.)*t))/(3.*Sqrt(.)*Exp(00*t)) end functon df end program ntal_value_problems_sstem Παρατηρήσεις: Οι συναρτήσεις f και g στον κώδικα προέρχονται από τις σχέσεις: dv dg 6 = g και = 0 V 00g αντίστοιχα dt dt Οι συναρτήσεις f και df προέρχονται από τις σχέσεις που υπολογίσαμε προηγουμένως με τη βοήθεια του Matematca για την αναλυτική λύση και την παράγωγό της. Τα αποτελέσματα τα εμφανίζουμε στην οθόνη, αλλά τα εξάγουμε επίσης και σε αρχείο τιμών χωρισμένων με κόμμα (csv) για εύκολη εισαγωγή στο excel και ακολούθως στο word. Στο αρχείο αυτό ορίζουμε κατάλληλα το πλάτος των γραμμών του, ώστε να αποφύγουμε την αναδίπλωση του κειμένου. Γι αυτό θέτουμε την παράμετρο recl=50 στην εντολή open. Κάθε φορά που εκτελούμε τον κώδικα πρέπει να αλλάζουμε μόνο το βήμα ή (και) το πλήθος n των επαναλήψεων. Εκτελώντας τον κώδικα για διάφορες τιμές βήματος και για n=0 επαναλήψεις παίρνουμε τα ακόλουθα αποτελέσματα: Βήμα =0-6 Αριθμός Βημάτων t V(t) Αρ. V(t) Aναλ. V (t) Αρ. V (t) Αναλ. 0 00 00 0.00E+00 0 0 0.00E+00 0.00000 99.9999466 99.9999466 0.00E+00-99.989986-99.989990 7.63E-06 3 0.00000 99.999794 99.999806 7.63E-06-99.9598694-99.9598694 0.00E+00 4 0.000003 99.99954 99.9995499 7.63E-06-99.9095459-99.9095764 3.05E-05 5 0.000004 99.99993 99.999065.53E-05-399.8389587-399.8389893 3.05E-05 6 0.000005 99.99874 99.9987488 7.63E-06-499.7479858-499.7479858 0.00E+00 7 0.000006 99.99898 99.998995 7.63E-06-599.6365356-599.6365356 0.00E+00 8 0.000007 99.9975433 99.99755 7.63E-06-699.504566-699.5044556 6.0E-05 9 0.000008 99.9967957 99.9968033 7.63E-06-799.358066-799.358066 0.00E+00 0 0.000009 99.9959488 99.9959488 0.00E+00-899.783447-899.784058 6.0E-05 0.00000 99.995007 99.995004 7.63E-06-998.9840088-998.984309.E-04 0.0000 99.9939575 99.9939575 0.00E+00-098.768677-098.768799.E-04 3 0.0000 99.998055 99.998055 0.00E+00-98.53349-98.53593.44E-04 4 0.00003 99.995543 99.99569 7.63E-06-98.7490-98.7504.E-04 5 0.00004 99.990039 99.9905 7.63E-06-397.9966-397.996338.E-04 6 0.00005 99.9887543 99.988769 7.63E-06-497.69667-497.69689.E-04 7 0.00006 99.987055 99.9873 7.63E-06-597.374634-597.374878.44E-04 8 0.00007 99.9855576 99.985565 7.63E-06-697.0366-697.0366 0.00E+00 9 0.00008 99.983804 99.98388 7.63E-06-796.66699-796.66699 0.00E+00 0 0.00009 99.98964 99.98977 7.63E-06-896.8064-896.8076.E-04 4
Βήμα =0-5 Αριθμός Βημάτων t V(t) Αρ. V(t) Aναλ. Βήμα =0-4 V (t) Αρ. V (t) Αναλ. 0 00 00 0.00E+00 0 0 0.00E+00 0.0000 99.995007 99.995004 7.63E-06-998.9840088-998.9840088 0.00E+00 3 0.0000 99.98006 99.9800339 7.63E-06-995.879-995.8735.E-04 4 0.00003 99.9550934 99.9550934 0.00E+00-990.569336-990.56909.44E-04 5 0.00004 99.907 99.907 0.00E+00-398.9805-398.9805 0.00E+00 6 0.00005 99.875445 99.875445 0.00E+00-4973.0054-4973.0054 0.00E+00 7 0.00006 99.807703 99.807703 0.00E+00-5960.56543-5960.56598 4.88E-04 8 0.00007 99.756408 99.75633 7.63E-06-6945.5546-6945.55758 4.88E-04 9 0.00008 99.688695 99.688695 0.00E+00-797.876953-797.87744 4.88E-04 0 0.00009 99.5976868 99.5976868 0.00E+00-8907.44766-8907.44766 0.00E+00 0.0000 99.50373 99.5037308 7.63E-06-9884.699-9884.7875.95E-03 0.000 99.400009 99.400068 7.63E-06-0857.954-0857.95508 9.77E-04 3 0.000 99.865753 99.86589 7.63E-06-88.7080-88.70898 9.77E-04 4 0.0003 99.634445 99.6345 7.63E-06-796.3408-796.3477.95E-03 5 0.0004 99.0306549 99.030670.53E-05-3760.767-3760.76465.93E-03 6 0.0005 98.88837 98.88853.53E-05-47.88086-47.88379.93E-03 7 0.0006 98.73689 98.736366 7.63E-06-5679.60938-5679.63.93E-03 8 0.0007 98.574663 98.574663 0.00E+00-6633.8574-6633.8633 3.9E-03 9 0.0008 98.4035645 98.40357 7.63E-06-7584.537-7584.540 3.9E-03 0 0.0009 98.9843 98.9843 0.00E+00-853.56055-853.5664 5.86E-03 Αριθμός Βημάτων t V(t) Αρ. V(t) Aναλ. V (t) Αρ. V (t) Αναλ. 0 00 00 0.00E+00 0 0 0.00E+00 0.000 99.5037308 99.5037308 0.00E+00-9884.63086-9884.70898 7.8E-03 3 0.000 98.03959 98.03959 0.00E+00-9474.883-9474.848.37E-0 4 0.0003 95.6586 95.6534.53E-05-868.93359-868.9533.95E-0 5 0.0004 9.390 9.39049.53E-05-3744.96484-3744.9888.34E-0 6 0.0005 88.54663 88.54640.9E-05-4563.66797-4563.694.34E-0 7 0.0006 83.076645 83.07663 3.8E-05-5308.699-5308.7656.73E-0 8 0.0007 77.5354996 77.5354538 4.58E-05-607.7578-607.0703 3.3E-0 9 0.0008 7.086334 7.0858 5.34E-05-6694.565-6694.7969.34E-0 0 0.0009 64.30676 64.305665 6.0E-05-7693.0563-7693.035.56E-0 0.000 56.897588 56.89790 6.87E-05-7675.75-7675.76563.56E-0 0.00 49.075676 49.0756035 7.5E-05-8003.953-8003.033 7.8E-03 3 0.00 40.93496 40.934 7.63E-05-8885.0938-8885.056 7.8E-03 4 0.003 3.579083 3.5788 8.0E-05-84880.656-84880.094.56E-0 5 0.004 3.9767838 3.9766998 8.39E-05-85996.6406-85996.4063.34E-0 6 0.005 5.3577938 5.357708 8.30E-05-8639.9688-8639.578 3.9E-0 7 0.006 6.7575455 6.757463 8.5E-05-8564.5-8564.46094 3.9E-0 8 0.007 -.739553 -.7393363 8.09E-05-8474.8556-8474.79688 5.47E-0 9 0.008-0.0506039-0.05068 7.7E-05-89.094-89.4063 7.03E-0 0 0.009-8.097959-8.098044 7.5E-05-7890.79688-7890.7656 7.03E-0 5
Βήμα =0-3 Αριθμός Βημάτων t V(t) Αρ. V(t) Aναλ. V (t) Αρ. V (t) Αναλ. Παρατηρούμε ότι για βήμα =0-3 τα αριθμητικά αποτελέσματα ξεφεύγουν αρκετά από τα αναλυτικά, ενώ για μικρά < 0-3 έχουμε καλή προσέγγιση. 0 00 00 0.00E+00 0 0 0.00E+00 0.00 57.33338 56.89785 4.36E-0-75633.33594-7675.77344 6.4E+0 3 0.00-4.339067-5.80704.47E+00-7585.4406-756.53906.4E+0 4 0.003-70.89733-7.03569.E+00-337.6788-64.783.76E+03 5 0.004-50.758099-49.83544 9.5E-0 47974.0497 5009.4533.E+03 6 0.005 7.830997 9.855035.67E+00 58638.3438 58869.66406.3E+0 7 0.006 48.4683609 50.505705.04E+00 936.4578 6997.46094.3E+03 8 0.007 4.39889 4.704039 6.94E-0-8505.499-3449.444.94E+03 9 0.008.748690-0.59796 3.0E+00-44098.34766-44906.7969 8.08E+0 0 0.009-3.777358-34.400305.6E+00-069.3679-850.73633.9E+03 0.00-33.868466-33.68550.83E-0 5300.9766 8534.6074 3.3E+03 0.0-7.8458-5.08480.8E+00 3073.87695 334.78906.34E+03 3 0.0 9.76058.64045.86E+00 9470.96094 7748.85547.7E+03 4 0.03 6.0559368 6.40586 3.55E-0-677.5449-9865.680664 3.4E+03 5 0.04 9.8504696 7.50733.35E+00-546.4477-453.09375.7E+03 6 0.05 -.405074-4.30975.83E+00-6966.348-58.46875.4E+03 7 0.06-9.37098-0.64974 7.94E-0 465.07605 466.39037.80E+03 8 0.07-9.9980059-8.9079.78E+00 569.363 757.6056.89E+03 9 0.08 5.865383 8.4067.59E+00 4006.5367 343.9375 5.93E+0 0 0.09 3.984086 5.07093.09E+00 5.44086-89.47058.34E+03 6
Άσκηση Να λυθεί με τις μεθόδους Runge Kutta το πρόβλημα αρχικών τιμών d k, dx = d ( 0) = a, = b dx x = 0 Μετά την επιλογή των παραμέτρων που είναι ελεύθερη να περιγράψτε ένα φυσικό πρόβλημα με μοντελοποιείται με το συγκεκριμένο πρόβλημα αρχικών τιμών. Σε κάθε αλγόριθμο να προσδιορισθεί το κριτήριο σύγκλισης. Λύση Θέτοντας d g =, g = dx παίρνουμε το σύστημα: dg g f( x, g, g), g(0) dx = = =a dg k g f( x, g, g), g(0) b dx = = = Επιλέγουμε για παραμέτρους τις τιμές: k=, α=5, b=0 Η αναλυτική λύση της αρχικής εξίσωσης είναι η (t)=5 (Cos[ t]+sn[ t]) και η γραφική παράσταση είναι ως εξής: 6 4-4 6 8 0-4 -6 O κώδικας Fortran που επιλύει το πρόβλημα είναι ο ακόλουθος: program ntal_value_problems_sstem! Solve: ''+4=0, [0]=5, '[0]=0 Eleter Armonk Talantws mplct none real:: real,allocatable,dmenson(:)::,,x nteger::,metod,n=0! number of teratons 7
allocate(x(n),(n),(n)) do metod=,4!=euler, =rk, 3=rk3, 4=rk4 x()=0!startng pont ()=5!ntal value ()=0!ntal value =0. select case (metod) case () call euler(x,,,,n) case () call rk(x,,,,n) case (3) call rk3(x,,,,n) case (4) call rk4(x,,,,n) end select prnt*, '--------------------',metod,'----------------------' do =,n enddo end do contans prnt*,,x(),(),f(x()),abs(f(x())-()) subroutne euler(x,,,,n) real::x(:),(:),(:), nteger::,n do =,n- (+)=()+*f(x(),(),()) (+)=()+*g(x(),(),()) x(+)=x()+ enddo end subroutne euler subroutne rk(x,,,,n) real::x(:),(:),(:),,k,k,k,k nteger::,n do =,n- k=f(x(),(),()) k=g(x(),(),()) k=f(x()+,()+*k,()+*k) k=g(x()+,()+*k,()+*k) x(+)=x()+ (+)=()+(/)*(k+k) (+)=()+(/)*(k+k) enddo end subroutne rk subroutne rk3(x,,,,n) real::x(:),(:),(:),,k,k,k3,k,k,k3 nteger::,n do =,n- k=f(x(),(),()) k=g(x(),(),()) 8
k=f(x()+0.5*,()+0.5**k,()+0.5**k) k=g(x()+0.5*,()+0.5**k,()+0.5**k) k3=f(x()+,()+*k,()+*k) k3=g(x()+,()+*k,()+*k) x(+)=x()+ (+)=()+(/6)*(k+4*k+k3) (+)=()+(/6)*(k+4*k+k3) enddo end subroutne rk3 subroutne rk4(x,,,,n) real::x(:),(:),(:),,k,k,k3,k4,k,k,k3,k4 nteger::,n do =,n- k=f(x(),(),()) k=g(x(),(),()) k=f(x()+0.5*,()+0.5**k,()+0.5**k) k=g(x()+0.5*,()+0.5**k,()+0.5**k) k3=f(x()+0.5*,()+0.5**k,()+0.5**k) k3=g(x()+0.5*,()+0.5**k,()+0.5**k) k4=f(x()+,()+*k3,()+*k3) k4=g(x()+,()+*k3,()+*k3) x(+)=x()+ (+)=()+(/6)*(k+*k+*k3+k4) (+)=()+(/6)*(k+*k+*k3+k4) enddo end subroutne rk4 real functon f(x,x,x3) result() real,ntent(n)::x,x,x3 =x3 end functon f real functon g(x,x,x3) result() real,ntent(n)::x,x,x3! =-(*x3+.5*x)/5 =-4*x end functon g real functon f(t) result()!analtc soluton real,ntent(n)::t =5*(Cos(*t)+Sn(*t)) end functon f end program ntal_value_problems_sstem Στο πίνακα της επόμενης σελίδας παρουσιάζονται ενδεικτικά τα αριθμητικά αποτελέσματα όλων των μεθόδων για τρεις διαφορετικές τιμές του βήματος και για 0 επαναλήψεις. Για κάθε μέθοδο παρουσιάζονται τρεις στήλες αποτελεσμάτων: η τιμή του x, η αριθμητική λύση της εξίσωσης και το αντίστοιχο απόλυτο σφάλμα. 9
Euler RK- RK-3 RK-4 =0.0 =0. =0.5 0. 5. 0.. 0 5..00663 0 3. 0 5.98.058 0 3 3. 0 5.9396 3.377 0 3 4. 0 5.38784 4.588 0 3 5. 0 5.4796 5.46 0 3 6. 0 5.569 6.60788 0 3 7. 0 5.65663 7.8378 0 3 8. 0 5.748 9.08944 0 3 k 9. 0 5.8474.03765 0 { 0. 5. 0.. 0 7. 4.47603 0 4. 0 8..969 6. 0 8.8.8080 8. 0 7.048.963. 4.49.0545. 8.067 0.637.4 3.59635 5.608 0.6 k.8 8.85.8455.085 0 5.38884 0. 5. 0. 5. 0. 0 3.093.. 0 7.5345.5 0. 4.4436.. 0.9478 0.5 4. 0 3.6637 0 3. 4. 0 4.34038 0 3.5 0. 7.05444 4. 8. 0 7.57807 0 k k 4.5.6 0.6495 0 { { 0. 5. 0.. 0 5.099 6.633 0 6. 0 5.9596.9958 0 5 3. 0 5.9084.90799 0 5 4. 0 5.3836.4878 0 5 5. 0 5.474 3.0387 0 5 6. 0 5.5664 3.5587 0 5 7. 0 5.64884 4.04839 0 5 8. 0 5.7377 4.50668 0 5 k 9. 0 5.844 4.939 0 5 { 0. 5. 0.. 0 6.6 4.76033 0 4. 0 7. 4.686 0 6. 0 6.44384.844 0 8. 0 4.6995.57 0..635 3.044 0. 7.5333 0 4.468 0.4 3.55948 5.3308 0.6 5.799 5.08949 0 k.8 7.07556 3.7966 0 { 0. 5. 0. 5. 0 7.5 5.934 0..5.575.5 8.5 3.88064. 9.6875.6357.5 4.6875 0 3.84506 3..578 0 9.7435 3.5.99 0 4.93774 4. 3.73047 7.94976 k 4.5.8707 0.656 0 { 0. 5. 0.. 0 5.099 3.9987 0 6. 0 5.9595 6.46376 0 6 3. 0 5.9083 9.4878 0 6 4. 0 5.38359.368 0 5 5. 0 5.474.504 0 5 6. 0 5.566.76837 0 5 7. 0 5.6488.08 0 5 8. 0 5.7375.384 0 5 k 9. 0 5.8439.449 0 5 { 0. 5. 0.. 0 6.57333.09367 0 4. 0 7.084.3804 0 6. 0 6.4475.47386 0 8. 0 4.76349 8.83773 0..30364.609 0. 5.35085 0.5433 0.4 3.938.570 0.6 5.53.39867 0 k.8 6.864.6604 0 { 0. 5. 0. 5. 0 7.08333.74467 0..6394 8.33809 0.5 6.09086.84649. 7.8703 8.7899 0.5.94.469 3. 7.35 3.94745 3.5 8.696.6377 4. 6.7674 0 3.5455 k 4.5 8.79954 6.30448 { 0. 5. 0.. 0 5.09899.3887 0 0. 0 5.9595.6037 0 0 3. 0 5.908 3.894 0 0 4. 0 5.38358 4.98507 0 0 5. 0 5.4749 6.0886 0 0 6. 0 5.566 7.3 0 0 7. 0 5.6488 8.4 0 0 8. 0 5.7373 9.03358 0 0 k 9. 0 5.8437 9.88895 0 0 { 0. 5. 0.. 0 6.55 3.9668 0 4 4. 0 7.06994 3.77646 0 4 6. 0 6.473.46504 0 4 8. 0 4.8599.5 0 3..46808.3355 0 3. 3.0689 0 3.4637 0 3.4 3.0398 4.96 0 3.6 5.794 4.0544 0 3 k.8 6.69307 3.3685 0 3 { 0. 5. 0. 5. 0 6.875 3.38665 0..50868 4.976 0.5 4.0737.7065 0. 6.8938.60849 0.5 3.4446 6.5474 0 3. 3.07939 3.4388 0 3.5 6.73564 3.8808 0 4. 4.5498 3.5685 0 k 4.5.044 4.50837 0 { { 0
Ανάλυση Ευστάθειας μεθόδου Euler ( ) ( ) g = g + + f x, g, g = g + g () () () () () () g g f x, g, g g k g () () () () () () + = + = () () g + g () = () g k + g G Με το Matematca υπολογίζουμε τις ιδιοτιμές του πίνακα G: g = k k ; { Egenvalues[g]//Smplf {+ k,- k} Επομένως οι δύο ιδιοτιμές του G είναι οι: λ, = ± k Για να έχουμε ευσταθές σχήμα θα πρέπει, < + k <, το οποίο δεν λ μπορεί να ισχύει αφού k > 0. Άρα από την ανάλυση ευστάθειας προκύπτει ότι η μέθοδος Euler είναι ασταθής για οποιαδήποτε επιλογή του βήματος. Παράλληλα βλέπουμε ότι τα αριθμητικά αποτελέσματα είναι αποδεκτά, τουλάχιστον για το μικρό αριθμό βημάτων που έχουμε κάνει τους υπολογισμούς, όταν το είναι πολύ μικρό. Βεβαίως δεν γνωρίζουμε πως θα εξελιχθεί η αριθμητική λύση στα επόμενα χρονικά βήματα.. Θα επαληθευθεί η θεωρητική ανάλυση ή όχι? Αντίστοιχη συμπεριφορά παρατηρείται και με τις άλλες μεθόδους Runge Kutta.
Άσκηση 3 Να αποδειχθεί ο πεπλεγμένος αλγόριθμος n+ = n + f ( xn, n ) + 4 f ( xn, n) + f ( xn+, n+ 3 ) που εφαρμόζεται στην αριθμητική ολοκλήρωση συνήθων διαφορικών εξισώσεων της ' = f x, x. ( ) μορφής ( ) Να βρεθεί το κριτήριο ευστάθειας του αλγορίθμου + = + + + + 4 όπου ( ) ( 4 ' ' 3 ' ) ( ) = f x n. ', n n,, Λύση d f x d f xdx dx = = Α. (, ) (, ) Ολοκληρώνοντας μεταξύ των σημείων xn και x n + παίρνουμε: n+ xn+ xn+ = (, ) = (, ) ( ) d f x dx f x dx n+ = n + f x, dx () n+ n n xn xn Εφαρμόζοντας τον ο κανόνα του Smpson έχουμε: xn+ f ( x, ) dx f ( xn, n ) 4 f ( xn, n) f ( xn n 3 + + +, + ) () xn Από () και () παίρνουμε το ζητούμενο. + = + + + + = 4 = ( + ) + 4 f ( x+, + ) f ( x, ) + 3 f ( x, ) 4 B. ( ) ( 4 ' ' 3 ' ) ( ) xn+ xn Θέτοντας = ( x ) + ε, παίρνουμε ε+ + x ( + ) = ( ε + x ( ) + ε + x ( ) ) + + 4 f ( x+, ε+ + ( x+ ) ) f ( x, ε + ( x) ) + 3 f ( x, ε + ( x ) 4 ) ()
f + = + ε Χρησιμοποιώντας ανάπτυγμα Talor έχουμε: f ( x, ( x ) ε ) f ( x, ( x )) Έτσι η () δίνει ε+ + x ( + ) = ( ε + x ( ) + ε + x ( ) ) + f f + 4 f ( x+, ( x+ ) ) + ε+ f ( x, ( x) ) + ε + 4 = ( x+ ) = ( x) f + 3 f ( x, ( x ) ) + ε = ( x ) f f f ε+ + x ( + ) = ( ε + ε ) + 4ε+ ε + 3ε + 4 = ( x+ ) = ( x) = ( x ) + ( ( x) + ( x ) ) + 4 f ( x+, ( x+ ) ) f ( x, ( x) ) + 3 f ( x, ( x ) ) 4 ( x+ ) f f f ε+ = ( ε + ε ) + 4ε+ ε + 3ε 4 = ( x+ ) = ( x) = ( x ) () = ( x ) Για απλοποίηση της σχέσης () θεωρούμε ότι f f f f = = ( x ) = ( x) = ( x+ ) Επομένως η () γίνεται: f ε+ = ( ε + ε ) + [ 4ε+ ε + 3ε ] 4 f f 3 f ε+ + + ε + ε = 0 (3) 4 4 a b c ε ε aε+ + bε + cε = a + b+ c = ε ε + 0 0 ε+ ε Υποθέτουμε ότι = ξ και η (3) δίνει: ε ε aξ + b+ c = 0 αξ + bξ + c= 0 (4) ξ Ζητάμε από τις ρίζες της (4) να ικανοποιείται η ακόλουθη ανισότητα ξ, b± b 4ac = < a Για να συνεχίσουμε θα πρέπει να γνωρίζουμε την συνάρτηση f ( x, ) 3
Άσκηση 4 Προσδιορίστε το κριτήριο ευστάθειας για την αριθμητική λύση του προβλήματος αρχικών τιμών d 3 dt = d dt = με τη μέθοδο Euler. Λύση d = 3 () () () () () () () ( 3 ) dt + = + + = ( 3) () () () () () () () d ( ) ( ) + = + + = + = dt () () 3 + () = () + 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 4