11.07.2015 Views

Calcolo del fattore di convergenza - Esercizi e Dispense

Calcolo del fattore di convergenza - Esercizi e Dispense

Calcolo del fattore di convergenza - Esercizi e Dispense

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Calcolo</strong> <strong>del</strong> <strong>fattore</strong> <strong>di</strong> <strong>convergenza</strong>Dato uno schema iterativo si ha:limk→∞|x k+1 − ξ||x k − ξ| p = Mp è l’or<strong>di</strong>ne <strong>di</strong> <strong>convergenza</strong> <strong>del</strong> metodo iterativoM è la costante asintotica <strong>del</strong>l’errore o <strong>fattore</strong> <strong>di</strong> <strong>convergenza</strong>.1


Metodo <strong>del</strong> Punto FissoIl metodo <strong>del</strong> punto fisso è un metodo iterativo lineare:⇓p = 1 e M = |g ′ (ξ)|dove g è la funzione <strong>di</strong> cui si vuole cercare il punto fisso ξ.2


Come calcolare M nel metodo <strong>del</strong> Punto FissoIn generale, non si conosce il punto ξ e quin<strong>di</strong> non possiamoapplicare la formula precedente (il limite per k → ∞) percalcolare M.Con l’esecuzione <strong>del</strong> co<strong>di</strong>ce FORTRAN sul metodo <strong>del</strong> punto fisso,siamo in grado <strong>di</strong> calcolare |x k+1 − x k | ma non |x k+1 − ξ|.Valutiamo lo scarto ma non l’errore che commettiamo.Lo scarto può essere preso come una buona approssimazione<strong>del</strong>l’errore, quando ci si avvicina a <strong>convergenza</strong>:|x k+1 − x k | ≈ |x k+1 − ξ|.Allora,|x k+1 − x k ||x k − x k−1 | ≈ M3


Mo<strong>di</strong>fiche da fare al co<strong>di</strong>ce FORTRANSostituiamo la variabile scarto con scartokp1 =|x k+1 − x k | (ilsignificato <strong>del</strong>le due variabili è lo stesso). Aggiungiamo lavariabile scartok = |x k − x k−1 |. Ad ogni passo <strong>del</strong> metodoiterativo possiamo calcolare un’approssimazione <strong>di</strong> M me<strong>di</strong>antescartokp1/scartok.Inoltre, dalla teoria, sappiamo che, per il metodo <strong>del</strong> punto fisso,M = |g ′ (ξ)|: possiamo approssimare M andando a calcolare g ′ (x k )ad ogni iterazione. (Quin<strong>di</strong> dobbiamo conoscere la funzione g ′ ).Ci aspettiamo che, quando arriviamo a <strong>convergenza</strong> le dueapprossimazioni ottenute per M siano molto vicine tra loro.4


Implementazione in FORTRANAlla stessa maniera con cui usiamo xk e xkp1, avremo scartok escartokp1, gli scarti alla iterata precedente e alla nuova iterata,rispettivamente.Introduciamo altre due nuove variabili che rappresentanoun’approssimazione <strong>di</strong> M, che chiamiamo asint1 e asint2.asint1 = scartokp1/scartok = rapporto tra due scartisuccessiviasint2 = abs(dfun(xkp1)) = valore assoluto <strong>del</strong>la derivataprima <strong>del</strong>la funzione fun in xkp1 - nel programma bisognaaggiungere una function che calcola il valore <strong>del</strong>la derivataprima <strong>di</strong> fun, che chiamiamo dfun .Il ciclo do while <strong>di</strong>venta:5


do while ((scartokp1.ge.toll).and.(iter.le.itmax))iter = iter +1xkp1=fun(xk)scartokp1=abs(xkp1- xk)asint1= scartokp1/scartokasint2=abs(dfun(xkp1))write(*,*) iter,xk,xkp1,scartokp1,asint1, asint2xk=xkp1scartok=scartokp1end do6


OsservazioneDai risultati che avremo, osserveremo <strong>del</strong>le ”<strong>di</strong>fferenzenumeriche” tra asint1 e asint2.Proviamo a cambiare il tipo <strong>di</strong> <strong>di</strong>chiarazione <strong>del</strong>le variabili reali:non più in semplice precisione real ma in doppia precisionereal*8. Queste ”<strong>di</strong>fferenze” non ci saranno più proprio perchèabbiamo una maggiore precisione nella rappresentazione deinumeri reali (e quin<strong>di</strong> <strong>di</strong> xk, xkp1, scartok, ...)7


Esempio (con cosh x/2, x 0 = 0, toll=1.e-6)Variabili reali <strong>di</strong> tipo realiter xk xkp1 scarto asint1 asint29 1.17872989 1.17876124 3.13520432E-05 0.311981022 0.31205016410 1.17876124 1.17877102 9.77516174E-06 0.311787069 0.31205305511 1.17877102 1.17877412 3.09944153E-06 0.317073166 0.31205397812 1.17877412 1.17877507 9.53674316E-07 0.307692319 0.312054247Variabili reali <strong>di</strong> tipo real*8iter xk xkp1 scarto asint1 asint29 1.17872992 1.1787613 3.13751481E-05 0.312026124 0.31205018610 1.1787613 1.17877109 9.79047574E-06 0.312045563 0.31205307111 1.17877109 1.17877414 3.05513389E-06 0.312051628 0.31205397112 1.17877414 1.17877509 9.53365289E-07 0.312053521 0.3120542528


AlgoritmoData un’approssimazione iniziale x 0 , si ha:x k+1 = x k − f(x k)f ′ (x k )Si va avanti nel calcolo <strong>del</strong>le approssimazioni x k+1 fino a che loscarto |x k+1 − x k | <strong>di</strong>venta minore <strong>di</strong> una certa tolleranza toll (sisegue lo stesso ragionamento fatto per il metodo <strong>del</strong> punto fisso).10


Or<strong>di</strong>ne <strong>del</strong> metodoDalla teoria, sappiamo che generalmente il metodo <strong>di</strong>Newton-Raphson è <strong>del</strong> secondo or<strong>di</strong>ne:⇓p = 2 e M = |f ′′ (ξ)||2f ′ (ξ)|11


Stima <strong>del</strong> <strong>fattore</strong> <strong>di</strong> <strong>convergenza</strong>Utilizzando gli scarti scartokp1 e scartok, possiamo stimareun’approssimazione <strong>di</strong> M, me<strong>di</strong>ante la formulaNel co<strong>di</strong>ce|x k+1 − x k ||x k − x k−1 | 2 ≈ Masint = scartokp1/scartok**2(La procedura è <strong>del</strong> tutto equivalente a quanto fatto nel metodo<strong>del</strong> punto fisso).Volendo si può calcolare un’approssimazione <strong>di</strong> M ancheapplicando <strong>di</strong>rettamente la formula con le derivate <strong>del</strong>la funzione(facoltativo).12


Funzioni da applicare al co<strong>di</strong>cePer testare il co<strong>di</strong>ce FORTRAN, possiamo considerare le funzionig(x) <strong>di</strong> cui abbiamo cercato il punto fisso nel programma <strong>del</strong>metodo <strong>del</strong> punto fisso e considerare le nuove funzionif(x) = g(x) − x.Uno zero <strong>del</strong>la f è un punto fisso <strong>del</strong>la g e viceversa.Difatti, se ξ è punto fisso <strong>del</strong>la funzione g, allorag(ξ) = ξ ⇐⇒ g(ξ) − ξ = 0 ⇐⇒ f(ξ) = 013


Esempi <strong>di</strong> funzionig(x)f(x)cos (x) cos (x) − x√ √e−x 2e−x 2 − xe −x/4cosh (x/2)e −x/4 − xcosh (x/2) − xx 2 − 5x + 9 (x − 3) 21 + atan(x) 1 + atan(x) − x14

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!