Calcolo Numerico
Laboratorio 5
Metodo di Punto Fisso – metodo di Aitken – Steffensen
Laurea Triennale Ing. Aerospaziale
A.A. 2019–2020
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 1 / 20
Metodo di Punto Fisso
Per risolvere g(x) = x, fissato un punto iniziale x0
x1 = g(x0 )
x2 = g(x1 )
x3 = g(x2 )
..
.
xk+1 = g(xk )
Il criterio di arresto del ciclo iterativo è basato sullo scarto assoluto (differenza tra
due iterate succesive):
|xk+1 − xk | < tol
dove tol è una quantità prefissata, piccola, ma di qualche ordine di grandezza
superiore alla precisione di macchina.
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 2 / 20
Metodo di punto fisso per calcolare uno zero di f (x)
Il metodo iterativo di punto fisso è un metodo per calcolare uno zero di una
funzione f (x) in quanto basta porre
g(x) = x + f (x)
per avere
g(x) = x ⇐⇒ f (x) = 0.
Questo non è l’unico modo di determinare un metodo di punto fisso per risolvere
f (x) = 0. Infatti a partire dall’equazione f (x) = 0 si possono trovare diverse
funzioni di iterazione non tutte necessariamente convergenti alla radice ξ .
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 3 / 20
Ordine di convergenza e costante asintotica dell’errore
Dato uno schema iterativo si ha:
|xk+1 − ξ |
lim p
=M
k→∞ |xk − ξ |
p (≥ 1)è l’ordine di convergenza del metodo iterativo
M (> 0) è la costante asintotica dell’errore o fattore di convergenza.
Si ha
|xk+1 − ξ | ' M |xk − ξ | p
L’errore decresce più rapidamente quanto più grande è p.
La convergenza del metodo iterativo del punto fisso è lineare (p = 1) se
M = |g0 (ξ )| < 1 e M 6= 0
dove g è la funzione della quale si cerca il punto fisso ξ .
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 4 / 20
Implementazione Matlab del metodo di punto fisso
function pfisso.m
Si scriva una function Matlab che prenda come parametri di input:
la funzione di iterazione g,
il punto iniziale x0 ,
la tolleranza toll,
il massimo numero di iterazioni, maxit.
In uscita (parametri di output) la function restituisce:
x vettore con le approssimazioni calcolate del punto fisso ξ
iter il numero di iterazioni a convergenza,
scarti vettore degli scarti
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 5 / 20
Stima della costante asintotica M
Lo script chiamante deve fornire la stima della costante asintotica M, ottenuta
come rapporto tra scarti consecutivi:
a s i n t 1= a b s ( s c a r t i ( 2 : i t e r ) . / s c a r t i ( 1 : i t e r −1) ) ;
È inoltre possibile ottenere un’approssimazione della costante asintotica usando la
formula M = |g0 (ξ )|, ovvero come valore assoluto della derivata prima della
funzione di punto fisso nelle approssimazioni del punto fisso:
a s i n t 2= a b s ( f e v a l ( dg , x ) ) ;
dove dg è la derivata prima della funzione di punto fisso, g.
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 6 / 20
Rappresentazione grafica della funzione di punto fisso
Si consideri l’equazione x − cos(x) = 0.
Usando le istruzioni Matlab seguenti
g=@( x ) c o s ( x ) ;
b i s=@( x ) x ;
f p l o t ( g , [ 0 . 5 , 1 ] , ’m− ’ ) ; h o l d on ;
f p l o t ( b i s , [ 0 . 5 , 1 ] , ’ k− ’ ) ; h o l d o f f ;
t i t l e ( ’ cos ( x ) versus x ’ ) ;
otteniamo il grafico mostrato dove si vede che effettivamente l’intersezione tra x
ed cos(x) si trova nell’intervallo [0.5, 1.0] e che il punto fisso è unico.
cos(x) versus x
1
0.95
0.9
0.85
0.8
0.75
0.7
0.65
0.6
0.55
0.5
0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 7 / 20
Esecuzione della function pfisso
Anche se possiamo eseguire la function dalla command window di Matlab :
>> [ x , i t e r , s c a r t i , a s i n t 1 ]= p f i s s o ( g , 0 . 1 , 1 e − 1 2 , 1 0 0 )
è meglio creare uno script con le opportune istruzioni per la definizione della
funzione di iterazione g, l’inizializzazione dei parametri di input, e la chiamata alla
function pfisso.
x0 = 0 . 1 ; t o l l =1. e −12; i t m a x =100;
[ x , i t e r , s c a r t i , a s i n t 1 ]= p f i s s o ( g , x0 , t o l l , i t m a x )
Per questi valori dei parametri di input il programma restituisce:
x ( i t e r ) =0.739085133214780
i t e r =70
a b s ( s c a r t o ( i t e r ) ) =9.4613 e −13
a s i n t 1 ( end )= 0 . 6 7 3 5
E dopo aver definito la derivata prima della funzione di punto fisso, ed stimato la
costante asintotica con la formula, si ha anche:
a s i n t 2 ( end )= 0 . 6 7 3 6
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 8 / 20
Esercizio
Esercizio
Si scriva uno script Matlab che chiamando le due function newton.m e pfisso.m
risolva con i due metodi l’equazione
x = cos(x)
partendo da un opportuno punto iniziale x0 e con itmax = 100 e tol = 10−10 .
Creare un (UNICO) grafico semilogaritmico con il profilo di convergenza dei due
metodi.
Il grafico può essere salvato tramite il comando print nel file [Link]
con l’istruzione:
p r i n t −d p d f c o n f r o n t o . p d f
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 9 / 20
Esercizio proposto 1
Esercizio
Si risolva l’equazione f (x) = 1 − x + arctan(x) mediante il metodo iterativo di
punto fisso.
1 Si determini graficamente l’intervallo contenente la soluzione ξ .
2 Si approssimi ξ usando la function pfisso con una tolleranza tol = 1e − 12,
a partire da un opportuno punto iniziale x0 .
3 Si scrivano ordinatamente i risultati ottenuti e si riporti in un grafico
semilogaritmico il profilo di convergenza del metodo.
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 10 / 20
Esercizio proposto 2
Esercizio
Sia data la funzione f (x) = exp(x) − x3 + 2.
1 Si verifichi graficamente che ha una radice ξ in [2, 2.5].
2 Si determini un metodo di iterazione di punto fisso convergente linearmente
alla radice ξ .
3 Si approssimi ξ usando il metodo di punto fisso determinato al punto (2) a
partire dal punto iniziale x0 = 2 con una tolleranza tol = 1e − 12.
4 Si scrivano ordinatamente i risultati ottenuti e si riporti in un grafico
semilogaritmico il profilo di convergenza del metodo.
P.S. Si scrivano a video, oltre all’indice di iterazione, l’approssimazione del punto fisso e
il valore dello scarto, anche le stime della costante asintotica ottenute nei due modi
possibili. Si veda esempio di file di output nel lucido seguente.
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 11 / 20
Esercizio proposto 2
Esempio di file di output
iter xk scarto asint1 asint2
1 2.10963494795898 1 . 0 9 6 3 e −01 0.00000 0.58264
2 2.17190378468558 6 . 2 2 6 9 e −02 0.56797 0.59958
3 2.20871022177731 3 . 6 8 0 6 e −02 0.59109 0.60971
4 2.23096479527489 2 . 2 2 5 5 e −02 0.60464 0.61588
5 2.24460222984788 1 . 3 6 3 7 e −02 0.61279 0.61968
6 2.25302711485188 8 . 4 2 4 9 e −03 0.61778 0.62203
7 2.25825771011088 5 . 2 3 0 6 e −03 0.62085 0.62349
8 2.26151510277707 3 . 2 5 7 4 e −03 0.62276 0.62440
....
....
48 2.26693722617105 2 . 3 4 3 9 e −11 0.62591 0.62592
49 2.26693722618572 1 . 4 6 7 0 e −11 0.62591 0.62592
50 2.26693722619490 9 . 1 8 2 9 e −12 0.62594 0.62592
51 2.26693722620065 5 . 7 4 7 4 e −12 0.62588 0.62592
52 2.26693722620425 3 . 5 9 7 6 e −12 0.62595 0.62592
53 2.26693722620650 2 . 2 5 2 0 e −12 0.62597 0.62592
54 2.26693722620791 1 . 4 0 9 5 e −12 0.62591 0.62592
55 2.26693722620879 8 . 8 1 9 6 e −13 0.62571 0.62592
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 12 / 20
Scrittura su file dei dati di output di un programma
Esempio per la function pfisso.m
Una volta eseguita la function pfisso.m
[ x , i t e r , s c a r t i , a s i n t 1 ]= p f i s s o ( g , x0 , t o l l , i t m a x )
si hanno in memoria i vettori x (contenente la successione di approssimazioni) e
scarti (contenente gli scarti calcolati ad ogni iterazione):
Per scrivere sul file [Link] questi vettori visualizzati come colonne di una
tabella si deve creare una matrice, A, che abbia tali vettori come righe, e poi
scriverla a file usando il comando fprintf.
% s c r i v e d a t i su f i l e
f i d =f o p e n ( ’ r i s p f i s s o . t x t ’ , ’w ’ ) ;
f p r i n t f ( fid , ’ %6s %16 s %28 s \n ’ , ’ i t e r ’ , ’ xk ’ , ’ s c a r t o ’ ) ;
i t = [ 1 : i t e r ] ; %c r e o i l v e t t o r e d e l l e iterazioni
A=[ i t ; x ( 2 : end ) ’ ; a b s ( s c a r t i ( 1 : end ) ) ’];
f p r i n t f ( f i d , ’ \n%6d %18.14 f %20.4 e ’ , A) ;
f p r i n t f ( f i d , ’ \n \n ’ ) ;
fclose ( fid ) ;
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 13 / 20
Esercizio proposto 3
Esercizio
Si scriva uno script Matlab che chiamando le due function newton.m e pfisso.m
risolva con i due metodi l’equazione
x = cos(x)
partendo da un opportuno punto iniziale x0 e con itmax = 100 e tol = 10−10 .
Creare un (UNICO) grafico semilogaritmico con il profilo di convergenza dei due
metodi.
Il grafico può essere salvato tramite il comando print nel file [Link]
con l’istruzione:
p r i n t −d p d f c o n f r o n t o . p d f
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 14 / 20
Metodo di Aitken
Implementazione: la singola iterazione del metodo di Aitken, cioè il passaggio da
xk a xk+1 è schematizzata come segue (si veda il libro Bergamaschi-Zilli per
maggiori dettagli).
xa = xk
xb = g(xa )
xc = g(xb )
(xb − xa )2
xk+1 = xa − . (1)
xc − 2xb + xa
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 15 / 20
Esercizio proposto 4
Esercizio
A partire dalla function pfisso si scriva la function aitken che implementa il
metodo di Aitken.
Esercizio
Si scriva quindi uno script Matlab che
1 chiamando la function aitken risolva l’equazione x = cos(x) partendo da
x0 = 1 e con itmax = 100 e tol = 10−10 .
2 Crea un grafico semilogaritmico con il profilo di convergenza del metodo.
3 Visualizza su file [Link] una tabella ordinata con: l’indice di
iterazione, il valore dell’iterata corrente, lo scarto e la stima della costante
asintotica mediante gli scarti.
Confrontare i risultati ottenuti con la tabella in fondo a pagina 60, libro
Bergamaschi Zilli.
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 16 / 20
Metodo di Steffensen
Per risolvere f (x) = 0, fissato un punto iniziale x0 , si considera l’iterazione del
metodo di Steffensen:
f (xk )2
xk+1 = xk −
f (xk + f (xk )) − f (xk )
Ordine di convergenza: p=2 .
Implementazione la singola iterazione del metodo di Steffensen, cioè il passaggio
da xk a xk+1 è schematizzata come segue (per esempio):
fa = f (xk )
fa2
xk+1 = xk − . (2)
f (xk + fa ) − fa
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 17 / 20
Implementazione
Esercizio
A partire dalla function che implementa il metodo di Newton si scriva una
function steffensen che implementa il metodo di Steffensen.
Tale function deve avere come parametri di input il punto iniziale, la tolleranza, il
numero massimo di iterazioni, e la funzione f . In uscita il vettore delle iterate, il
numero di iterazioni, il vettore degli scarti.
NB. A differenza della function che implementa il metodo di Newton dove si
verifica che f 0 (xk ) non sia zero, si inserisca qui un controllo sul denominatore della
formula di Steffensen.
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 18 / 20
Implementazione
Esercizio
Si scriva uno script Matlab che chiamando le due function newton.m e
steffensen.m risolva con i due metodi l’equazione
x2 + log x + cos x = 0
partendo da un opportuno punto iniziale x0 e con itmax = 100 e tol = 10−10 .
Lo script dovrà
Dare valore ai parametri di input delle due function.
Tracciare un grafico della funzione e dell’asse x nell’intervallo [0.2, 2]. Salvare
il grafico nel file [Link].
Chiamare opportunamente le due function.
Stimare per entrambi i metodi la costante asintotica visualizzarla a video.
Stimare per entrambi i metodi l’errore e confrontarlo con l’errore “vero”
ottenuto tramite il comando fzero.
Creare un (UNICO) grafico semilogaritmico con il profilo di convergenza dei
due metodi. Salvare il grafico nel file [Link].
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 19 / 20
Esercizio proposto 1
Esercizio
Si risolva l’equazione f (x) = 1 − x + arctan(x) mediante il metodo iterativo di
punto fisso.
1 Si determini graficamente l’intervallo contenente la soluzione ξ .
2 Si approssimi ξ usando la function pfisso con una tolleranza tol = 1e − 12,
a partire da un opportuno punto iniziale x0 .
3 Si scrivano ordinatamente i risultati ottenuti e si riporti in un grafico
semilogaritmico il profilo di convergenza del metodo.
Calcolo Numerico (Ingegneria Aerospaziale) Introduzione a Matlab 20 / 20