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