ΑΡΙΘΜΗΤΙΚΕΣ ΜΕΘΟΔΟΙ, 0 05, 5 Ο ΕΞΑΜΗΝΟ ΕΡΓΑΣΙΑ #: ΑΡΙΘΜΗΤΙΚΗ ΠΑΡΑΓΩΓΙΣΗ και ΟΛΟΚΛΗΡΩΣΗ Ημερομηνία ανάρτησης εργασίας στην ιστοσελίδα του μαθήματος: 0 Ημερομηνία παράδοσης εργασίας: 9 0 Επιμέλεια απαντήσεων: Ι. Λυχναρόπουλος Άσκηση Έστω μία συνάρτηση δύο ανεξάρτητων μεταβλητών f f x, y βρείτε αριθμητικά τις μερικές παραγώγους: f x, f x y, f y. Με βάση τη σειρά Taylor α) f ( xy, ) x και f ( xy, ) y Ξεκινάμε από το ανάπτυγμα Taylor στην x κατεύθυνση για απόσταση x x x x f f x f f f f f O x!! 5!. Υπολογίζουμε το άθροισμα: x από το κεντρικό σημείο : 5 6,, x xx xxx xxxx xxxxx () Όλες οι παράγωγοι υπολογίζονται στο σημείο, x 6 f, f, f, x fxx fxxxx O x () Στη συνέχεια γράφουμε το ανάπτυγμα Taylor στην x κατεύθυνση για απόσταση x x x x x : 5 6,, x xx xxx xxxx xxxxx () f f x f f f f f O x!! 5! Υπολογίζουμε το άθροισμα: f 6, f, f, x fxx x fxxxx O x () Πολλαπλασιάζουμε την () με και προσθέτουμε στην (): f f f f 6f x f Ox 6,,,,, xxxx (6) Λύνουμε ως προς u xxxx και παίρνουμε: f f 6f f f f xxxx O, x x,,,,, Με ακριβώς αντίστοιχο τρόπο καταλήγουμε στον τύπο f f 6f f f f yyyy O y, y,,,,, (7) (8) Οι (7) και (8) έχουν ακρίβεια δεύτερης τάξης.
f ( xy, ) β) x y Για να βοηθηθούμε στους υπολογισμούς, δημιουργούμε τις ακόλουθες συναρτήσεις στο Μathematca: t[a_] := Apply[Plus, CoeffcetRules[a, {Q, R}] /. ({k_, l_} -> m_) -> m fxy[k, l]] = 6; Taylor[k_, l_] = f + Apply[Plus, Table[t[(k dx Q + l dy R)^p]/p!, {p,, }]] H πρώτη συνάρτηση είναι βοηθητική, ενώ η δεύτερη συνάρτηση εκφράζει το ανάπτυγμα Taylor της f ( xkx,y l y) γύρω από το σημείο, διατηρώντας παραγώγους μέχρι τάξης : fk, l( xy, ) f, ( xy, ) kx ly f( xy, ) kx ly f( xy, ) x, y! x,, y, kx ly f( x, y)...! x, y, Aν κρατήσουμε παραγώγους μέχρι ης τάξης με k= l= γράφουμε f (x, y) f ( xy, ) f( xy, ) f( xy, ),, x, y!, x, y, f( xy, ) f( xy, ) f( xy, ) f( xy, ) f( xy, ) f, ( x, y) x y x, y x xy y,,,, που αναπαρίσταται από το Taylor[, ], το οποίο δίνει f + dx fxy[, 0] - dy fxy[0, ] + / (dx^ fxy[, 0] dx dy fxy[, ] + dy^ fxy[0, ]) Οι συμβολισμοί που χρησιμοποιούνται είναι οι ακόλουθοι: dx => x dy => y f => f, ( xy, ) fxy[m, ] => m f ( xy, ) m x y, Επειδή θέλουμε να υπολογίσουμε τον τύπο που προσεγγίζει την παράγωγο ης τάξης διατηρούμε στις πράξεις μας παραγώγους επιπλέον τάξεων, δηλαδή μέχρι και 6 ης τάξης, έτσι ώστε να μπορούμε να αποφανθούμε αν ο τύπος μας έχει ακρίβεια πρώτης ή δεύτερης τάξης. Για το λόγο αυτό στη Mathematca θέτουμε =6; Ξεκινούμε με το ανάπτυγμα Taylor με kl, 0, παίρνοντας όλους τους δυνατούς συνδυασμούς μεταξύ των k και l. Σκοπός μας είναι να διαχειριστούμε με τέτοιον τρόπο τους τύπους ώστε στο δεξί μέλος να παραμείνει η μικτή παράγωγος ης τάξης που μας ενδιαφέρει καθώς και παράγωγοι ανώτερης τάξης, ενώ όλες οι άλλες παράγωγοι ίδιας ή μικρότερης τάξης να απαλειφθούν. Η τάξη του σχήματος καθορίζεται ως εξής: Αν διατηρηθούν μόνον παράγωγοι 6 ης τότε το σχήμα έχει ακρίβεια δεύτερης τάξης, ενώ αν διατηρηθούν και παράγωγοι 5 ης τάξης τότε το σχήμα έχει ακρίβεια πρώτης τάξης. Στα επόμενα δεν εμφανίζονται οι ανεξάρτητες μεταβλητές (x,y) για απλούστευση των συμβολισμών.
Έπειτα από δοκιμές καταλήγουμε στην ακόλουθη σχέση: f f f f f f f f,,,,,,,, f f f f 6 6,,,, Οι υπολογισμοί έγιναν με το Mathematca σταδιακά ως εξής: AA = Taylor[, ] + Taylor[-, -] // Expad BB = Taylor[-, ] + Taylor[, -] // Expad CC = AA + BB // Expad DD = Taylor[, 0] + Taylor[-, 0] // Expad EE = Taylor[0, ] + Taylor[0, -] // Expad FF = CC - DD - EE // Expad Τελικά παίρνουμε: - f + dx^ dy^ fxy[, ] + / dx^ dy^ fxy[, ] + / dx^ dy^ fxy[, ] Επομένως, η μικτή παράγωγος υπολογίζεται από τον ακόλουθο τύπο 9 σημείων: f f, f, f, f, f, f, f, f, f,, O, που έχει ακρίβεια ης τάξης, αφού οι παράγωγοι 5 ης τάξης απαλείφθηκαν. Άσκηση Να υπολογισθεί το ολοκλήρωμα xy dydxμε Κανόνα Τραπεζίου, ο Κανόνα Smpso και 0 με Gauss Legedre (H αναλυτική του λύση είναι 0). Κανόνας Τραπεζίου: f ( xy, ) xy Υποθέτουμε ένα πλέγμα από Ν+ κόμβους σε κάθε κατεύθυνση. H απόσταση μεταξύ των ( ) κόμβων στην x κατεύθυνση είναι h x, ενώ η απόσταση μεταξύ των κόμβων στην N h 0 / N. y κατεύθυνση είναι y Εφαρμόζουμε τον κανόνα του Τραπεζίου πρώτα στην κατεύθυνση y και έπειτα στην κατεύθυνση x. Παίρνουμε διαδοχικά: I f:, f:, f:,... f:,n f:,n dx h h x y f, f, f,... f,n f,n f, f, f,... f,n f,n... fn, fn, fn,... fn,n fn,n fn, fn, fn,... fn,n fn,n
I f, f, f,... f,n f,n f, f, f,... f,n f,n... f f f... f f f f f... f f N, N, N, N,N N,N N, N, N, N,N N,N Τελικά το ολοκλήρωμα υπολογίζεται ως ένα διπλό άθροισμα NN I w f ή πιο απλά: I,,, όπου τα βάρη w δίνονται από τον πίνακα NN ww f, με w,,...,, x w y............ To πρόγραμμα σε Fortra που υπολογίζει το ολοκλήρωμα I είναι το ακόλουθο: Program trapezou_double mplct oe real ax,bx,ay,by,x,y,s,hx,,aalytkh teger,, aalytkh=0.0 do =,00 ax=-; bx= ay=0;by= hx=(bx-ax)/ =(by-ay)/ s=0 do =,+ do =,+ x=ax+(-)*hx y=ay+(-)* s=s+w()w()*f(x,y) s=hx**s/ f (<=0.or. mod(,0)==0) the prt '(,f5.,f5.6,e5.)',,hx,s,abs(s-aalytkh) ed f cotas real fucto f(x,y) real,tet()::x,y f= x*y** ed fucto real fucto w()
teger,tet():: f (==.or. ==+) the w= else w= ed f ed fucto ed program oς Κανόνας Smpso Υποθέτουμε ότι το N (αριθμός διαστημάτων) είναι άρτιος αριθμός. Εφαρμόζουμε τον o κανόνα Smpso πρώτα στην κατεύθυνση y και έπειτα στην κατεύθυνση x : I f:, f:, f:, f:,... f:,n f:,n f:,n dx h h f, f, f, f,... f,n f,n f,n f, f, f, f,... f,n f,n f,n f, f, f, f,... f,n f,n f,n... fn, fn, fn, fn,... fn,n fn,n fn,n fn, fn, fn, fn,... fn,n fn,n fn,n I f, f, f, f,... f,n f,n f,n 9 f, 6 f, 8 f, 6 f,... 8 f,n 6 f,n f,n f, 8 f, f, 8 f,... f,n 8 f,n f,n... f 6 f 8 f 6 f... 8 f 6 f f N, N, N, N, N,N N,N N,N f f f f... f f f N, N, N, N, N,N N,N N,N Τελικά το ολοκλήρωμα υπολογίζεται ως ένα διπλό άθροισμα... 6 8... 8 6 8... 8 NN I w, f,, όπου τα βάρη w δίνονται από τον πίνακα: w 9 8... 8 6 8... 8 6... ή πιο απλά: I NN ww f, με w,,...,,, 9
To πρόγραμμα σε Fortra που υπολογίζει το ολοκλήρωμα I με τον πρώτο κανόνα Smpso είναι το ακόλουθο: Program smpso_rule_double mplct oe real ax,bx,ay,by,x,y,s,hx,,aalytkh teger,, aalytkh=0.0 s=0 do =,00, ax=-; bx= ay=0;by= hx=(bx-ax)/ =(by-ay)/ s=0 do =,+ do =,+ x=ax+(-)*hx y=ay+(-)* s=s+w()*w()*f(x,y) s=hx**s/9 prt '(,f5.,f5.6,e5.)',,hx,s,abs(s- aalytkh) cotas real fucto f(x,y) real,tet()::x,y f=x*y** ed fucto real fucto w() teger,tet():: f (==.or. ==+) the w= elsef (mod(,)==0) the w= else w= ed f ed fucto ed program
Gauss-Legedre Για να υπολογισθεί το ολοκλήρωμα I με την μέθοδο ολοκλήρωσης Gauss Legedre, θα πρέπει πρώτα να μετασχηματισθεί κατάλληλα ώστε τα άκρα ολοκλήρωσης ως προς x και ως προς y να είναι μεταξύ του και του. Αρχικά εφαρμόζουμε τον μετασχηματισμό y(0) y ( z) z y, dy dz 0 για να αλλάξουμε τα όρια ολοκλήρωσης ως προς y ( z) ( z) 8 I x ( ) dz x dz x z dz 6 Στη συνέχεια εφαρμόζουμε τον μετασχηματισμό x ( ( )) x s x, s dxds ( ) για να αλλάξουμε τα όρια ολοκλήρωσης ως προς x 8 8 I ( s z ) dzds s( z ) dzds 6 Ονομάζοντας gsz (, ) sz ( ) και ακολουθώντας αντίστοιχη διαδικασία όπως αυτή που ακολουθήσαμε στις άλλες μεθόδους, καταλήγουμε στην ακόλουθη σχέση: N N 8 I ww g(r, r ), όπου rk, k,..., N να είναι οι ρίζες του πολυωνύμου Legedre βαθμού Ν και wk, k,..., N τα αντίστοιχα βάρη τους. Για παράδειγμα αν Ν= τότε: r 0.86, w 0.785; r 0.998, w 0.65; r 0.998, w 0.65; r 0.86, w 0.785 Ο κώδικας σε Mathematca που υπολογίζει το I με τη μέθοδο Gauss Legedre είναι o ακόλουθος: Σφάλμα ου κανόνα Smpso Στη γενική περίπτωση το ανάπτυγμα της f ( x ) γράφεται στη μορφή: aa ( ) aa ( )( ) f ( x) f( x0 ah) ( ) f( x0) f( x0) af( x0) f( x0) f( x0)... R ( x0 ah)!! όπου f ( x ) f( x ah) f( x ), f( x ) f( x h) f( x ) και 0 0 0 0 0 0 f R x ah h a a a a ( ) ( 0 ) ( )( )...( ) ( )! Επομένως το σφάλμα είναι
( ) h f ada ( )! 0 0 Ειδικά για τον ο Κανόνα Smpso θα είναι : 5 5 h h h 9 f ada f a( a)( a)( a) da f ( ) h f ( )!!! 0 80 ( ) () () 5 () 0 0 0 Άσκηση Nα υπολογισθεί αριθμητικά το ολοκλήρωμα 0 x I x e dx εφαρμόζοντας έναν αλγόριθμο Newto Cotes και έναν αλγόριθμο Gauss. Σχολιάστε την ακρίβεια των αποτελεσμάτων. Με το Mathematca παίρνουμε την τιμή του ολοκληρώματος: I.9 Επίσης η γραφική παράσταση της υπό ολοκλήρωσης συνάρτησης είναι: Plot[x Exp[-x ],{x,0,6}] 00 80 60 0 0 5 6 Ολοκλήρωση Gauss Laguerre Ξαναγράφουμε το ολοκλήρωμα στην ισοδύναμη μορφή: x x x x I x e e e dx f( x) e dx 0 0 x x Επομένως μπορούμε να εφαρμόσουμε την αριθμητική ολοκλήρωση Gauss Laguerre με f ( x) x e N I wf ( x) όπου x οι ρίζες των πολυωνύμων Laguerre βαθμού N και Το πολυώνυμο Laguerre βαθμού N δίνεται από τη σχέση: k ( ) L ( x) x k 0 k k! w τα αντίστοιχα βάρη τους. Tα βάρη Laguerre που αντιστοιχούν στις ρίζες x του πολυωνύμου L ( x ) δίνονται από τον τύπο (http://mathworld.wolfram.com/laguerre GaussQuadrature.html): k
x w,,... N ( ) L ( x ) Για Ν=5 έχουμε: x w 0.656 0.575. 0.98667.596 0.0759 7.0858 0.00676.608 0.00007 Πρόγραμμα σε Mathematca: = 50; f[x_] := x^ Exp[x - x^] s = NSolve[LaguerreL[, a] == 0, a]; x = a /. s w = Table[x[[]]/(( + )^ LaguerreL[+,x[[]]]^), {,,}] II f x w Εκτελώντας τον κώδικα για διάφορες τιμές του N παίρνουμε: N I 5 5.79 0 0.08 5 7.989 0 6. 0.505 0.97 50.9 Κανόνας Τραπεζίου Παρατηρούμε ότι μετά το x 5 η τιμή της συνάρτησης είναι κοντά στο 0. Υπολογίσουμε με τον κανόνα τραπεζίου το ολοκλήρωμα 5 x I x e dx = 50; h = 5/; x = Table[( - ) h, {,, + }] // N; h II g 0 g5 g x Εκτελώντας τον κώδικα για διάφορες τιμές του N παίρνουμε: N I 5.86 0.9 0.9 Άσκηση : Βλέπε Παράδειγμα 0 Άσκηση Άσκηση 5: Βλέπε Παράδειγμα Άσκηση 7 0