ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΕΦΑΡΜΟΣΜΕΝΩΝ ΜΑΘΗΜΑΤΙΚΩΝ ΚΑΙ ΦΥΣΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΜΑΘΗΜΑ: ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ ΚΑΙ ΕΡΓΑΣΤΗΡΙΟ Ι Ιστοσελίδα : http://www.math.tua.gr/~fargyriou Εργαστήριο 3 Απαντήσεις Επίλυση Μη Γραμμικών Εξισώσεων και Συστημάτων Το πρόβλημα που μας απασχολεί είναι η εύρεση των ριζών της εξίσωσης f( x = 0. Η επαναληπτική μέθοδος Newto Raphso για τη λύση του παραπάνω προβλήματος, f ( x ορίζεται από τον επαναληπτικό τύπο: x+ 1. Η μέθοδος υλοποιείται στο f '( x MATLAB από την ακόλουθη συνάρτηση: fuctio [x,xlist,iter]=r(f,df,x0,tol,maxit % Root of f(x=0 by Newto Raphso's method if argi < 3, error ('Isufficiet iput\'; ; if argi < 4, tol=eps; ; if argi < 5, maxit=50; ; x=x0; iter=0; xdiff=if; xlist=x; iter=iter+1; x=x feval(f,x/feval(df,x; if iter>=maxit, error ('Not coverged after maxit iteratios.'; Η παραπάνω συνάρτηση καλεί δύο άλλες συναρτήσεις, μία για τον υπολογισμό της συνάρτησης f και μία για τον υπολογισμό της παραγώγου της df. 1
Θέμα Εργασίας: Newto Raphso 1. Χρησιμοποιώντας τη Newto Raphso, να λύσετε το πρόβλημα με αρχική τιμή x 0 = 0.5 και παράμετρο ανοχής TOL >> [x,xlist,iter]=r('f','df',0.5,1e 3 >> [x,xlist,iter]=r('f','df',0.5,1e 6,100 3 10 και 6 10. 2. Εμφανίστε την ακολουθία των τιμών της επαναληπτικής διαδικασίας, την τιμή της f σε καθένα από αυτά τα σημεία, καθώς και το απόλυτο σφάλμα. Σχολιάστε τα αποτελέσματα. Δίνονται οι συναρτήσεις f.m και df.m που χρειάζονται για την κλήση της r.m. Δώστε προσοχή στον τελεστή.^ στην f.m. fuctio [x,xlist,xdiff1,iter]=r_1(f,df,x0,tol,maxit % Root of f(x=0 by Newto Raphso's method if argi < 3, error ('Isufficiet iput\'; ; if argi < 4, tol=eps; ; if argi < 5, maxit=50; ; x=x0; iter=0; xdiff=if; xlist=x; xdiff1=if; iter=iter+1; x=x feval(f,x/feval(df,x; xdiff1=[xdiff1;xdiff]; if iter>=maxit, error ('Not coverged after maxit iteratios.'; 2
f.m fuctio y=f(x y=4*x.^2 3; df.m fuctio y=df(x y=8*x; >>[xs,xlist]=r( f, df,0.5,1e 3 >> [x,xlist,xdiff,iter]=r_1('f','df',0.5,1e 3 >> [x,xlist,xdiff,iter]=r_1('f','df',0.5,1e 6 e 1 3. Μία μέθοδος έχει τάξη σύγκλισης q αν ισχύει: lim + = K, όπου e q r το e σφάλμα. Για το πρόβλημα του ερωτήματος 2, πιστοποιείστε ότι για τη Newto Raphso, η σύγκλιση είναι τετραγωνική ( q = 2, αν f '( r 0. Script: errors.m err1=xlist sqrt(3/2; err1(2:legth(err1./err1(1:legth(err1 1.^2 K=8./(2*df(xlist >>errors Για την αποφυγή του υπολογισμού της παραγώγου μπορούμε να χρησιμοποιήσουμε τη διακριτή μέθοδο Newto Raphso που ορίζεται από τον επαναληπτικό τύπο: f ( x x+ 1, όπου η παράγωγος της f προσεγγίζεται από τη διακριτή παράγωγο δ ( x h f ( x+ h f( x της σε ένα σημείο x, η οποία ορίζεται ως δh f( x: =, για δεδομένο μικρό h 3 h > 0 (της τάξης του 10. Η προσέγγιση αυτή της παραγώγου έχει σφάλμα της τάξης (δηλαδή είναι μικρότερο του Kh. 3
4. Μετατρέψτε τη συνάρτηση r.m ώστε να υλοποιεί τη διακριτή μέθοδο Newto Raphso, και αποθηκεύστε τη στο φάκελο εργασίας με το όνομα dr.m. Επαναλάβετε το Ερώτημα 5 για τη μέθοδο αυτή και συγκρίνετε τα αποτελέσματα. dr.m fuctio [x,xlist,iter]=dr(f,x0,h,tol,maxit % Root of f(x=0 by Newto Raphso's method if argi < 3 error ('Isufficiet iput\'; ; if argi < 4 tol=eps; ; if argi < 5 maxit=50; ; x=x0; iter=0; xdiff=if; xlist=x; iter=iter+1; x=x feval(f,x/((feval(f,x+h feval(f,x/h; if iter>=maxit error ('Not coverged after maxit iteratios.'; >> [x,xlist,iter]=dr('f',0.5,1e 3,1e 3 >> [x,xlist,iter]=dr('f',0.5,1e 3,1e 6 4
Μία άλλη μέθοδος που δεν απαιτεί τον υπολογισμό της παραγώγου είναι η μέθοδος της τέμνουσας (secat βιβλίο σελ. 261, με επαναληπτικό τύπο: f ( x( x x 1 x+ 1, που υλοποιείται με την ακόλουθη συνάρτηση: f( x f( x 1 secat.m fuctio [x,xlist,iter]=secat(f,x0,x1,tol,maxit % Root of f(x=0 by the secat method if argi < 3 error ('Isufficiet iput\'; ; if argi < 4 tol=eps; ; if argi < 5 maxit=50; ; f0=feval(f,x0; f1=feval(f,x1; iter=0; xdiff=if; xlist=[x0;x1]; x=x1; x=x f1*(x1 x0/(f1 f0; iter=iter+1; if iter>=maxit, error ('Not coverged after maxit iteratios.'; x0=x1; f0=f1; x1=x; f1=feval(f,x; 5. Χρησιμοποιείστε τη secat, με αρχικές τιμές 7 και 8, για να λύσετε το πρόβλημα: 3 2 f( x = x sihx+ 4x + 6x+ 9= 0(παρ. 6.8, σελ.260. f.m fuctio y=f(x y=x.^3 sih(x+4*x.^2+6*x+9; >> [x,xlist,iter]=secat('f',7,8,1e 3 5
Αν μία ρίζα έχει πολλαπλότητα m, τότε η Newto Raphso χάνει την τετραγωνική σύγκλισή της. Για να διατηρήσουμε την τετραγωνική σύγκλιση, χρησιμοποιούμε τη f ( x μέθοδο Schroder (βιβλίο, σελ 264 με επαναληπτικό τύπο: x = 1 x + m f '( x. 6. Υλοποιείστε τη μέθοδο Schroder σε μία συνάρτηση με όνομα schroder.m. 4 3 2 Πιστοποιείστε τα όσα αναφέραμε για τη λύση της x 13x + 33x 31x+ 10 = 0 4 ξεκινώντας από το 0, για την προσέγγιση της τριπλής ρίζας 1 με TOL 10. Για να βγάλετε τα συμπεράσματά σας, λύστε το πρόβλημα αρχικά με τη Newto Raphso και έπειτα με τη Schroder και συγκρίνετε τα αποτελέσματα. schroder.m fuctio [x,xlist,iter]=schroder(f,df,x0,m,tol,maxit % Root of f(x=0 by Schroder's method if argi < 4 error ('Isufficiet iput\'; ; if argi < 5 tol=eps; ; if argi < 6 maxit=50; ; x=x0; iter=0; xdiff=if; xlist=x; iter=iter+1; x=x m*feval(f,x/feval(df,x; if iter>=maxit error ('Not coverged after maxit iteratios.'; 6
f.m fuctio y=f(x y=y=x.^4 13*x.^3+33*x.^2 31*x+10; df.m fuctio y=df(x y=4*x.^3 39*x.^2+66*x 31; >> [x,xlist,iter]=schroder('f','df',0,3,1e 4 7