ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΜΕΘΟΔΟΙ, 008-009, Ο ΕΞΑΜΗΝΟ ΕΡΓΑΣΙΑ #: ΣΥΝΗΘΕΙΣ ΔΙΑΦΟΡΙΚΕΣ ΕΞΙΣΩΣΕΙΣ ΠΡΟΒΛΗΜΑΤΑ ΟΡΙΑΚΩΝ ΤΙΜΩΝ ΗΜΕΡΟΜΗΝΙΑ ΠΑΡΑΔΟΣΗΣ:..008 ΔΙΔΑΣΚΩΝ: Δ. Βαλουγεώργης Επιμέλεια απαντήσεων: Ιωάννης Λυχναρόπουλος ΑΣΚΗΣΗ Με βάση τη σειρά Taylor βρείτε την κεντρώα έκφραση πεπερασμένων διαφορών ης τάξης για τη παράγωγο f xx και την ανάδρομη έκφραση πεπερασμένων διαφορών ης τάξης για τη παράγωγο f xxx. Στη συνέχεια βρείτε τις ίδιες εκφράσεις εφαρμόζοντας πολυωνυμική παρεμβολή. Τέλος, βρείτε μία κεντρώα έκφραση πεπερασμένων διαφορών ης προσεγγίζει την παράγωγο xx τάξης που να f στον κόμβο ενός πλέγματος ( =,,,N ), όταν η απόσταση ανάμεσα σε διαδοχικούς κόμβους δεν παραμένει σταθερή αλλά μεταβάλλεται (δηλαδή όταν x x = h). Λύση α) Κεντρώα έκφραση πεπερασμένων διαφορών ης τάξης για την παράγωγο f xx με Taylor: Ξεκινώντας με ανάπτυγμα Taylor της συνάρτησης f στους κόμβους + και γύρω από τον κόμβο παίρνουμε τις σχέσεις f h f h f f+ = f + h + + + O ( h ) () x x 6 x και f h f h f f = f h + + O ( h ) () x x 6 x Προσθέτοντας τις () και () κατά μέλη έχουμε διαδοχικά: h f f f + f = f + + O ( h ) h = f f + f + O( h ) + x x + f f f + f = + O h + x h β) Κεντρώα έκφραση πεπερασμένων διαφορών ης τάξης για την παράγωγο f xx πολυωνυμική παρεμβολή σε ισαπέχοντα σημεία Έστω ένα πολυώνυμο δευτέρου βαθμού () με
dp d P P ( x) = ax + bx + c = ax + b = a dx dx Θέτοντας την αρχή των αξόνων στο σημείο x και θεωρώντας ισαπέχοντα σημεία (βήμα h ), εφαρμόζουμε το πολυώνυμο P στα σημεία x = h, x 0 = και x = + h P( x = h) = a( h) + b( h) + c = ah bh + c = f f = ah bh+ f P ( x = 0) = a(0) + b(0) + c= c= f f+ = ah + bh+ f P( x+ = h) = ah + bh+ c= f+ d f f+ f + f f+ f f = ah a = = dx h Καταλήγουμε, έτσι, ξανά στην σχέση (). γ) Κεντρώα έκφραση πεπερασμένων διαφορών ης τάξης για την παράγωγο f xx πολυωνυμική παρεμβολή σε μη ισαπέχοντα σημεία Ξεκινούμε και πάλι με το πολυώνυμο P και θέτουμε την αρχή των αξόνων στο σημείο x. Θεωρούμε ότι το σημείο x βρίσκεται σε απόσταση h από το σημείο x, και ότι το σημείο x + βρίσκεται σε απόσταση kh από το σημείο x. Εφαρμόζουμε το πολυώνυμο P στα σημεία x = h, x 0 = και x = + kh και παίρνουμε διαδοχικά: P( x = h) = ah bh+ c= f f = ah bh+ f P ( x = 0) = c= f f + = ak h + bkh+ f P( x+ = kh) = a ( kh) + b( kh) + c = f+ kf kf + f f = akh + ak h + d f a = = dx f ( + k) f + + kf k( + k) h () δ) Ανάδρομη έκφραση πεπερασμένων διαφορών ης τάξης για την παράγωγο fxxx Ξεκινώντας με ανάπτυγμα Taylor της συνάρτησης f στους κόμβους,, και γύρω από τον κόμβο παίρνουμε τις σχέσεις με με Taylor: f h f h f h f x x 6 x x f = f h + + + O h ( h) ( h) ( h) f f f f f = f h + + + O h x x 6 x x ( h) ( h) ( h) f f f f f = f h + + + O h x x 6 x x ( h) ( h) ( h) x x 6 x x f f f f f = f h + + + O h () (6) (7) (8)
Πολλαπλασιάζοντας την () με 8, την (6) με -, την (7) με, την (8) με - και προσθέτοντας κατά μέλη τις παραγόμενες εξισώσεις καταλήγουμε στη σχέση: f 8 f f + f f = f h + O ( h ) x f f 8f + f f + f = x h + O h (9) ε) Ανάδρομη έκφραση πεπερασμένων διαφορών ης τάξης για την παράγωγο f xxx με πολυωνυμική παρεμβολή σε ισαπέχοντα σημεία Έστω ένα πολυώνυμο τρίτου βαθμού: P ( x) = ax + bx + cx + d dp = 6a dx Θέτοντας την αρχή των αξόνων στο σημείο x και θεωρώντας ισαπέχοντα σημεία (βήμα h ), εφαρμόζουμε το πολυώνυμο P στα σημεία x = 0, x = h, x = h, x = h και x = h P ( x = 0) = d = f P( x = h) = a( h) + b( h) + c( h) + d = f P ( x = h) = a( h) + b( h) + c( h) + d = f P ( x = h) = a( h) + b( h) + c( h) + d = f P ( x = h) = a( h) + b( h) + c( h) + d = f 8 P( x ) P( x ) + P( x ) P( x ) = 8 f f + f f d h a 8f f f f = + f 8f + f f + f 6a = = dx h d f Επομένως καταλήξαμε και πάλι στη σχέση (9)
ΑΣΚΗΣΗ Η ροπή M ανά μονάδα μήκους που απαιτείται για την περιστροφή ενός κυλινδρικού R άξονα, ακτίνας R, κατά γωνία θ δίδεται από το ολοκλήρωμα θπ ψ M = G r r dr, 0 r R, όπου ψ ( r) η λύση της εξίσωσης r ψ = με οριακές συνθήκες r r r ψ ( R) = 0. Πρώτα υπολογίστε αριθμητικά πρώτα τη συνάρτηση ψ ( r) και συγκρίνετε τα αποτελέσματά σας με την αναλυτική λύση του προβλήματος. Στη συνέχεια επιλέγοντας τιμές για τη ροπή M και τη παράμετρο αντίστοιχη γωνία θ Λύση: Βλέπε απαντήσεις Εργασίας του 00, άσκηση ομάδας Α G 0 βρείτε την ΑΣΚΗΣΗ Δίδεται το πρόβλημα ιδιοτιμών dw 0 kw dx + =, w( 0) w = =0 () Να υπολογισθούν αριθμητικά οι δέκα πρώτες ιδιοτιμές (ιδιοσυχνότητες). Οι πρώτες δύο να συγκριθούν με τις αντίστοιχες αναλυτικές. Λύση Έχουμε ένα πρόβλημα εύρεσης ιδιοτιμών λ = k. Μας ενδιαφέρουν οι διάφορες τιμές του λ για τις οποίες η λύση της () δεν είναι εκ ταυτότητος μηδέν. Η γενική λύση της εξ. () έχει τη μορφή: wx = Acos( kx) + Bsn( kx) () όπου Α και Β αυθαίρετες σταθερές. Εφαρμόζοντας τις οριακές συνθήκες στην () παίρνουμε: w(0) = 0 A= 0 και wl = 0 Bsn( kl) = 0 Επειδή επιθυμούμε η λύση της () να μην είναι εκ ταυτότητος μηδέν, θα πρέπει αναγκαστικά να είναι B 0 και επομένως
nπ sn( kl) = 0 kl = nπ k =, n =,,... L n π λ = k =, n=,,... () L Η σχέση () δίνει την αναλυτική έκφραση των ιδιοτιμών του προβλήματος (). Για την αριθμητική επίλυση του προβλήματος () εφαρμόζουμε μία έκφραση dw κεντρώων πεπερασμένων διαφορών για την προσέγγιση της παραγώγου dx. Επιλέγουμε επίσης 0 εσωτερικούς κόμβους (σύνολο κόμβοι και επομένως βήμα L h = ) και L = : w w + w+ + kw 0 = w k w + w + = 0, =,..., h h h h Ειδικά για τους κόμβους = και = θα είναι: k w + w = 0 h h και w 0 k w = 0 h h Το σύστημα σε μορφή πινάκων θα έχει την μορφή: M w= 0, όπου w w. w =.. w και M θα είναι ο ακόλουθος τριδιαγώνιος πίνακας 0x0. h + k h 0 0 0 0 0 0 0 0 y h. h + k h 0 0 0 0 0 0 0 0 h. h + k h 0 0 0 0 0 0 0 0 h. h + k h 0 0 0 0 0 0 0 0 h. h + k h 0 0 0 0 0 0 0 0 h. h + k h 0 0 0 0 0 0 0 0 h. h + k h 0 0 0 0 0 0 0 0 h. h + k h 0 0 0 0 0 0 0 0 h. h + k h j 0 0 0 0 0 0 0 0 k h. h + k z { Θέτουμε την ορίζουσα ίση με το μηδέν ή εναλλακτικά ξαναγράφουμε το σύστημα στη μορφή ( A k Ι ) w= 0, όπου ο πίνακας A θα έχει την ακόλουθη μορφή:
j k. h. 0 0 0 0 0 0 0 0 h. h 0. h. h. 0 0 0 0 0 0 0 h 0 0. h 0 0 0. h. h. 0 0 0 0 0 0 h 0 0 0 0. h 0 0 0 0 0. h. h. 0 0 0 0 0 h. h. 0 0 0 0 h 0 0 0 0 0 0. h. h. 0 0 0 h. h. 0 0 h 0 0 0 0 0 0 0. h. h. 0 h 0 0 0 0 0 0 0 0. h. h. h και βρίσκουμε τις ιδιοτιμές του πίνακα Α. Με τη βοήθεια του Mathematca παίρνουμε: L=;n=0; h=l/(n+) t= Tab le[0,{n},{n}]; DoAt@@, +DD = NA êh E, 8,, n <E DoAt@@, DD = NAêh E, 8, n<e DoAt@@, DD = NA êh E, 8,, n<e sol=sort[egenvalues[t]] {9.807,8.66,8.7,.7,07.6,76.,.,00. 76,.8,7.97} p@ n_ D := NA n P L E real=table[p[],{,,n}] {9.8696,9.78,88.86,7.9,6.7,.06,8.6,6.6,799.8,986.96} error = 00 Hreal soll real {0.677879,.689,.96977,0.,.879,.96,9.7, 6.989,.69,.98} Επομένως, πινακοποιώντας τα αποτελέσματα έχουμε: Αριθμός Ιδιοτιμής Αριθμητική Τιμή Αναλυτική Τιμή. h y z { Σχετικό Σφάλμα % 9.807 9.8696 0.67788 8.66 9.78.6890 8.7 88.86.96977.700 7.90 0. 07.600 6.700.879 6 76.00.060.96 6
7.00 8.60 9.7 8 00.760 6.60 6.989 9.80 799.80.69 0 7.970 986.9600.98 Παρατηρώντας το σφάλμα βλέπουμε ότι η αριθμητική μέθοδος επίλυσης του προβλήματος ιδιοτιμών δίνει καλά αποτελέσματα για τις πρώτες ιδιοτιμές και στη συνέχεια τα αποτελέσματα αποκλίνουν σημαντικά από τις αντίστοιχες αναλυτικές ιδιοτιμές. ΑΣΚΗΣΗ Να επιλυθεί αριθμητικά το πρόβλημα Hartmann: du db + = dy dy db du + = 0 dy dy Οριακές συνθήκες u ( ± ) = 0 και b ( ± ) = 0. Εφαρμόζοντας εκφράσεις κεντρώων πεπερασμένων διαφορών για την προσέγγιση du db των παραγώγων και παίρνουμε τις σχέσεις: dy dy u u + u+ b+ b + =, =,..., n h h και b b + b+ u+ u + = 0, =,..., n h h Έστω για παράδειγμα ότι έχουμε ένα πλέγμα με n = κόμβους τότε το προς επίλυση σύστημα μπορεί να γραφεί στη μορφή: u u u u u A = () b 0 b 0 b 0 b 0 b 0 όπου ο πίνακας Α είναι o ακόλουθος n x n = 0x0 πίνακας 7
h h 0 h 0 0 0 0 0 0 0 h h h 0 0 h 0 0 0 h h h 0 0 h 0 0 h j 0 k 0 0 h 0 0 h h h h 0 0 h 0 h 0 0 h 0 0 0 h h 0 0 0 0 h 0 0 0 0 0 0 0 h h h h 0 h 0 h 0 h 0 0 h 0 h h 0 0 h h 0 0 h 0 0 h h 0 h 0 0 0 0 h h h y z { Με τη χρήση του Mathematca δημιουργούμε τον πίνακα A και επιλύουμε το γραμμικό σύστημα () με την εντολή LnearSolve. Επίσης, απεικονίζουμε γραφικά τα αποτελέσματα για να πάρουμε μία καλύτερη εικόνα των λύσεων. n=0 (* arthmos eswterkwn kombwn *) h= n+ a=table[0,{n},{n}]; DoAa@@, DD =, 8,, n<e h DoAa@@, +DD =, 8,, n <E h DoAa@@, DD =, 8,, n<e h DoAa@@, +n+ DD =, 8,, n <E h DoAa@@, +n DD =, 8,, n<e h Do@a@@+ n, jdd = a@@, j+ ndd, 8,, n<, 8j,, n<d Do@a@@+ n, j + ndd = a@@, jdd, 8,, n<, 8j,, n<d c=table[0,{n}]; Do[c[[]]=-,{,,n}] sol=lnearsolve[a,c]//n; u=table[sol[[]],{,,n}] {0.089887,0.6789,0.8,0.900,0.99,0.80,0.677,0. 869,0.7,0.69,0.69,0.7,0.869,0.677,0.80,0.99,0.900,0.8,0.6789,0.089887} b=table[sol[[]],{,n+,n}] {0.099,0.000,0.0,0.0807,0.070,0.0697,0.07,0.066,0.0098,0.00709,-0.00709,-0.0098,-0.066,- 0.07,-0.0697,-0.070,-0.0807,-0.0,-0.000,- 0.099} uu=table[0,{n+},{}]; bb=table[0,{n+},{}]; Do[uu[[,]]=u[[-]],{,,n+}] Do[uu[[+,]]=-+ h,{,0,n+}] Do[bb[[,]]=b[[-]],{,,n+}] 8
Do[bb[[+,]]=-+ h,{,0,n+}] LstPlot[uu,PlotJoned->True] 0. 0. 0. 0. - -0. 0. LstPlot[bb,PlotJoned->True] 0.06 0.0 0.0 - -0. 0. -0.0-0.0-0.06 Πινακοποιώντας τα αποτελέσματα παίρνουμε για n= (0 εσωτερικούς κόμβους): n y u b - 0 0-0.9076 0.089887 0.099-0.809 0.6789 0.000-0.786 0.8 0.0-0.6908 0.900 0.0807 6-0.8 0.99 0.070 7-0.87 0.80 0.0697 8-0. 0.677 0.07 9-0.809 0.869 0.066 0-0.87 0.7 0.0098-0.0769 0.69 0.00709 0.0769 0.69-0.00709 0.87 0.7-0.0098 0.809 0.869-0.066 0. 0.677-0.07 6 0.87 0.80-0.0697 7 0.8 0.99-0.070 8 0.6908 0.900-0.0807 9 0.786 0.8-0.0 0 0.809 0.6789-0.000 0.9076 0.089887-0.099 0 0 Αν επιθυμούμε να επιλύσουμε το σύστημα () με τη χρήση της Fortran θα πρέπει να επιλέξουμε κάποια επαναληπτική μέθοδο επίλυσης συστημάτων. Για παράδειγμα με τη μέθοδο Gauss-Sedel το σύστημα θα γραφεί στη μορφή: 9
u = u + u + h b h b + ( k+ ) ( k k+ k k+ b = b+ + b + h u+ h u ) + ( + + h ) ( k+ ) ( k) ( k+ ) ( k) ( k ) όπου με (k) δηλώνεται ο δείκτης επανάληψης Το πρόγραμμα σε Fortran που επιλύει το () με τη μέθοδο Gauss-Sedel είναι το ακόλουθο: Program Hartmann mplct none doubleprecson,allocatable::u(:),b(:),uold(:),bold(:) nteger::n,,j,k,kk,max,done,l doubleprecson::s,rel,err,err,max doubleprecson::hh,w n=!arthmos synolkwn kombwn allocate(u(n),b(n),uold(n),bold(n)) max=0000 rel=0.0000000 hh=./(n-) u(:)=0. b(:)=0. k= done=0 do whle (k<=max.and. done==0) uold(:)=u(:) bold(:)=b(:) do =,n- u()= (*u(+)+*u(-)+b(+)*hh-b(-)*hh+*hh**)/. b()= (*b(+)+*b(-)+u(+)*hh-u(-)*hh)/. end do! elenxos ga termatsmo max=- do =,n- err = abs((u() - uold())/u()) err= abs((b() - bold())/b()) f (err>max) max=err f (err>max) max=err end do f (max<rel) then done= end f k=k+ end do do =,n wrte(*,*),u(),b() end do 0