Lezione 9: Ricerca degli zeri

Ricerca di zeri
Equazioni non lineari
• Il problema è ricavare le radici (gli zeri) di
una funzione f(x), cioè i valori z:
f(z)=0
quando non si possa ottenere la soluzione
in forma chiusa (una formula)
DEI - Univ. Padova (Italia)
Separazione delle radici
Per semplificare il problema e renderlo
trattabile, bisogna individuare un intervallo
I=[a,b] contenente un solo zero:
Separazione delle radici
DEI - Univ. Padova (Italia)
Metodi iterativi
• Un metodo iterativo fornisce una successione di
approssimazioni alla soluzione {xn}:
lim xn = z
n →∞
• Avendo già a disposizione k approssimazioni, un
metodo iterativo fornisce la n-esima:
xn = Gn ( xn −1 , xn − 2 , K , xn − k )
DEI - Univ. Padova (Italia)
Velocità di convergenza
• Data una successione di approssimazioni {xn} convergente a
z, si definisce l’errore di troncamento al passo n-esimo:
en = z − xn
• La successione ha ordine di convergenza p e fattore di
convergenza C se:
lim
n →∞
en +1
en
p
=C
il valore di p dà una indicazione della velocità con cui la
soluzione viene raggiunta
DEI - Univ. Padova (Italia)
Efficienza computazionale
• Se p=1 la convergenza è lineare
• Se p=2 la convergenza è quadratica
per grandi n le cifre raddoppiano ad ogni iterazione
• E se un metodo fa molte più operazioni a parità di p?
L’efficienza computazionale guarda il numero r di valutazioni
della funzione f(x) e delle sue derivate
E=p
DEI - Univ. Padova (Italia)
1/ r
Teorema di Bolzano
• Sia f : [a, b] ⊂ R → R
• f(a)<0<f(b)
• f è almeno C0
Esiste z in (a,b): f(z)=0
Dimostrazione 1:
per assurdo
Dimostrazione 2:
per bisezione
DEI - Univ. Padova (Italia)
Dimostrazione: metodo di bisezione
• Il metodo di bisezione ci fornisce metodo per costruire
una successione convergente a z:
a0 = a b0 = b
an −1 + bn −1
xn =
2
n = 1, K , N
• Se f(xn)=0 allora z=xn, altrimenti:
⎧[an , bn ] = [an −1 , xn ]
⎨
⎩[an , bn ] = [ xn , bn −1 ]
DEI - Univ. Padova (Italia)
f (an −1 ) ⋅ f ( xn ) < 0
f (bn −1 ) ⋅ f ( xn ) < 0
Dimostrazione: metodo di bisezione
• {an} è monotona non-decrescente
• {bn} è monotona non-crescente
•
•
lim an = lim bn = lim cn
n →∞
n →∞
n →∞
f (c) = lim f (an ) = lim f (bn )
n →∞
n →∞
f (c) = lim f (an ) ≤ 0 ≤ lim f (an ) = f (c)
n →∞
DEI - Univ. Padova (Italia)
n →∞
Metodo di bisezione:esempio
f(x)=(x-1)2-x-2
I1
I2
I3
I4
DEI - Univ. Padova (Italia)
Metodo di bisezione:esempio
cn
Valore vero dello zero
iterazioni
f(cn)
iterazioni
DEI - Univ. Padova (Italia)
Metodo di bisezione: convergenza
• Al passo k dell’algoritmo
bk −1 − ak −1 (bk − 2 − ak − 2 ) / 2
b0 − a0
ek = z − xk ≤
=
=L=
2
2
2k
• E dunque la stima dell’errore dopo k passi è
b0 − a0
lim ek ≤ lim
=0
k
k →∞
k ←∞
2
DEI - Univ. Padova (Italia)
Metodo di bisezione: convergenza
Per k grande si ottiene che:
ek ≅ xk − xk −1
E dunque si ha:
ek +1
ek
1
1
≅
2
Da cui l’ordine di convergenza è p=1
DEI - Univ. Padova (Italia)
Metodo di bisezione: Criterio di arresto
• Non possiamo eseguire il procedimento per
infinite iterazioni
• Quando fermarsi?
bk −1 − ak −1 b 0 −a0
=
≤ε
k
2
2
k ≥ log 2 (b − a) − log 2 ε
DEI - Univ. Padova (Italia)
Metodo di bisezione: Matlab
function z=Bisezione(f,a,b,tol,display);
an=a;
bn=b;
cn=(bn+an)/2;
Condizione di convergenza
while((bn-an)>tol)
cn=(bn+an)/2;
f1=feval(inline(f),an);
f2=feval(inline(f),cn);
f3=feval(inline(f),bn);
if(f1*f2<0)
bn=cn;
else
an=cn;
end;
end;
z=cn;
DEI - Univ. Padova (Italia)
Aggiornamento del punto medio
(bisezione)
Calcolo della funzione f
nei nuovi punti an,bn,cn
Punti fissi
• Ho una funzione non-lineare f(x) di cui voglio trovare
una radice z t.c. f(z)=0
• Posso trovare una funzione ausiliara:
h(x)=x-φ(x)
con gli stessi zeri di f(x)
f ( x) = 0 ⇔
DEI - Univ. Padova (Italia)
x = ϕ ( x)
Teorema delle contrazioni (Banach-Cacioppoli)
• Data una contrazione:
ϕ:I → I
I⊂R
∃q ∈ (0,1) ϕ ' ( x) ≤ q ∀x ∈ I
• Allora esiste uno ed un solo punto fisso z
lim xn = z
n →∞
xn = ϕ ( xn −1 )
DEI - Univ. Padova (Italia)
Metodo del punto fisso: convergenza
• L’ordine di convergenza della successione
costruita col teorema di Banach dipende dalla
funzione φ() nell’intorno del punto fisso z
• Se f(z) è derivabile almeno p-volte in z, e:
ϕ ( z) = z
ϕ ( k ) ( z ) = 0 k = 1,K, p − 1
ϕ
( p)
( z) = 0
allora l’ordine di convergenza è p
DEI - Univ. Padova (Italia)
Metodo del punto fisso: criterio di arresto
• Se il metodo converge e φ è una contrazione:
La successione converge con ordine di convergenza q
z − xn ≤ q xn − xn −1
z − xn −1 ≤ z − xn + xn − xn −1 ≤ ϕ ( z ) − ϕ ( xn −1 ) + xn − xn −1 ≤ q z − xn −1 + xn − xn −1
Disuguaglianza triangolare
DEI - Univ. Padova (Italia)
Metodo del punto fisso: criterio di arresto
• Se il metodo converge e φ è una contrazione:
Stima dell’errore al passo n-esimo
q
z − xn ≤
xn − xn −1
1− q
Stima iniziale dell’errore
dopo n passi
n
q
z − xn ≤
x1 − x0
1− q
DEI - Univ. Padova (Italia)
Metodo del punto fisso : esempio
f(x)=(x-1)2-x-2
Proviamo a scegliere
φ(x)=(x-1)2-2
con x in I=[0,4]
x0=2
x1=φ(x0)=-1
x2=φ(x1)=2
x3=-1
x4=2
DEI - Univ. Padova (Italia)
Metodo del punto fisso : esempio
Bisogna verificare che
φ(x) sia una
contrazione in I!!!
DEI - Univ. Padova (Italia)
Metodo del punto fisso: esempio
Proviamo a scegliere
φ(x)=(x+2)1/2+1
con x in I=[0,4]
x0=2.0000
x1=φ(x0)=3.0000
x2=φ(x1)=3.2361
x3=3.2882
x4=3.2996
x5=3.3021
x6=3.3026
x7=3.3026
DEI - Univ. Padova (Italia)
φ’(x)<1/2
x in I=[0,4]
Metodo del punto fisso: Matlab
function z=PuntoFisso(f,a,b,tol,display);
j=1;
cn=(a+b)/2;
z(j)=cn;
fz(j)=feval(inline(f),cn);
cold=cn+1;
while(abs(cold-cn)>tol)
cold=cn;
cn=feval(inline(f),cn);
j=j+1;
z(j)=cn;
end;
DEI - Univ. Padova (Italia)
Inizializzazione
Condizione di convergenza
Iterazione di punto fisso