Introduzione Una qualsiasi equazione può sempre scriversi nella forma f ( x) 0 in generale non è detto che la soluzione sia reale e che sia unica nel caso unidimensionale è possibile effettuare la ricerca della soluzione “intrappolandola” in un intervallo e procedendo per approssimazioni successive Se il problema è multidimensionale, avremo un sistema di equazioni: f1 x1 , x2 , , xN 0 f 2 x1 , x2 ,, xN 0 f ( x) 0 f N x1 , x2 ,, xN 0 in questo caso non è possibile “intrappolare la soluzione” occorre partire da un valore di prova e arrivare alla soluzione in maniera iterativa Intrappolamento (“bracketing”) Una radice dell’equazione f(x)=0 è intrappolata (“bracketed”) nell’intervallo [a,b] se f(a) e f(b) hanno segni opposti se f(x) è continua, allora nell’intervallo (a,b) c’è almeno una radice dell’equazione (teorema del valor medio) se f(x) è discontinua ma limitata, invece di una radice potrebbe esserci una discontinuità a gradino attraverso lo zero se f(x) è discontinua e non limitata, potrebbe esserci una singolarità in questo caso, un algoritmo di ricerca delle radici potrebbe convergere proprio alla singolarità Alcuni esempi y f(a) y f(a) f(x) continua f(x) discontinua e limitata b b a f(b) x a x f(b) y f(x) discontinua e non limitata f(a) a f(b) b x Intrappolamento Il punto di partenza per la soluzione dell’equazione f(x)=0 è l’intrappolamento Il problema è quello di cercare due valori a e b tali che f(a) e f(b) abbiano segno opposto In alcuni casi tali valori di a e b non sono noti, ma vanno ricercati si può procedere per estrapolazione dati due valori di partenza x1 e x2, l’intervallo [x1,x2] viene esteso in maniera geometrica finché non si arriva a ottenere un intervallo per cui f(x1)f(x2)<0 alternativamente, si può procedere per interpolazione dati due valori di partenza x1 e x2, l’intervallo [x1,x2] viene suddiviso in N parti e si cerca una coppia di valori x1 e x2 per cui f(x1)f(x2)<0 Metodo della bisezione (1) Si parte da un intervallo [a,b] che intrappoli la radice dell’equazione f(x)=0 f(a)f(b)<0 Si calcola il valore della funzione nel punto medio xm dell’intervallo [a,b] se f(xm) ha lo stesso segno di f(a) si pone a’=xm e b’=b se f(xm) ha lo stesso segno di f(b) si pone a’=a e b’=xm Si ripete la procedura, dimezzando l’intervallo [a’,b’] Dopo ogni iterazione l’ampiezza dell’intervallo contenente la radice viene dimezzata: 1 n 1 n 2 Metodo della bisezione (2) Detta 0=b-a l’ampiezza dell’intervallo di partenza, e detta la precisione richiesta per la soluzione, si può calcolare il numero n di iterazioni necessarie ad ottenere la soluzione con la precisione : 0 2n n log 2 0 Con quale precisione è possibile ottenere la soluzione? Nella modalità “floating point” il computer usa sempre un numero fisso di cifre per rappresentare i numeri per esempio, richiedere =10-6 può aver senso se la radice dell’equazione è un numero dell’ordine di 1, ma non ha senso se è un numero dell’ordine di 1026! si potrebbe usare un criterio basato sul rapporto (xm+1-xm)/xm, ma tale criterio non avrebbe senso per soluzioni vicine allo zero solitamente si sceglie una precisione pari al prodotto della precisione del computer per la semiampiezza dell’intervallo di partenza Esempi (1) Consideriamo l’equazione: x log x 2 0 dove f(x)=x+logx-2 osserviamo che f(1)=-1<0 e f(2)=log2>0 Cerchiamo la soluzione con una precisione =10-5 la procedura di bisezione converge dopo 18 iterazioni e il risultato è x=1.55715 Esempi (2) Consideriamo l’equazione: 2 e x x 0 dove f(x)=2-e-x-x1/2 osserviamo che f(0)=+1>0 e f(4)=-e-4<0 Cerchiamo la soluzione con una precisione =10-5 la procedura di bisezione converge dopo 20 iterazioni e il risultato è x=3.92112 Esempi (3) Consideriamo ora la funzione: f ( x) 2x 5 x 1 e applichiamo il metodo di bisezione all’intervallo [0,2] f(0)=5>0; f(2)=-1<0 f(x) ha una singolarità in x=1 Il metodo di bisezione in questo caso restituisce la singolarità se si cerca la soluzione dell’equazione f(x)=0 con una precisione =10-5, il metodo di bisezione restituisce il valore x=0.99998 dopo 19 iterazioni Metodi della secante e della falsa posizione In entrambi i metodi si assume che f(x) sia approssimativamente lineare nella regione di interesse Entrambi i metodi sono validi per funzioni continue Si parte da due punti a e b con f(a) e f(b) di segni opposti si traccia la secante che passa per il punto [a,f(a)] e per il punto [b,f(b)] si considera il punto in cui la secante interseca l’asse delle x nel metodo della secante, ciascuna iterazione riparte dal punto determinato nella precedente iterazione si considera l’intervallo [xn-1,xn] senza curarsi dei segni di f(xn-1) e f(xn) nel metodo della falsa posizione, si richiede che la radice dell’equazione sia sempre “intrappolata” nell’intervallo in esame il metodo della secante converge più rapidamente si dimostra che vale la relazione: lim k 1 c k k 1.618 Metodo della secante y 2 f(x2) 3 f(x3) x1=a f(x5) f(x ) 4 f(x1) x4 4 x5 5 x3 x2=b x 1 Si procede iterativamente considerando le secanti tra il punto n-esimo e quello (n+1)-esimo possono esserci problemi se f(xn+1)=f(xn) Metodo della falsa posizione y 3 f(x3) f(x2) f(x4) f(x5) 2 4 5 x1=a x5 f(x1) x4 x3 x2=b x 1 A differenza del metodo della secante, si richiede che la funzione assuma sempre segni opposti negli estremi dell’intervallo Esempio Consideriamo l’equazione: x log x 2 0 dove f(x)=x+logx-2 osserviamo che f(1)=-1<0 e f(2)=log2>0 Cerchiamo la soluzione con una precisione =10-5 la procedura della falsa posizione converge dopo 6 iterazioni e il risultato è x=1.55715 (contro le 18 iterazioni richieste dal metodo di bisezione) Alcune considerazioni Il metodo della secante e quello della falsa posizione in genere convergono più rapidamente di quello di bisezione Ci sono però particolari tipi di funzione per cui entrambi i metodi possono richiedere molte iterazioni per raggiungere la convergenza y x Metodo di Brent Il metodo di Van Wijngaarden-Dekker-Brent combina la bisezione con l’interpolazione quadratica nell’interpolazione quadratica si usano tre punti per approssimare la funzione f(x) con una funzione quadratica inversa (si esprime x come funzione quadratica di y) il valore di x calcolato per y=0 viene preso come stima della radice dell’equazione f(x)=0 nel metodo di Brent si verifica se la radice così calcolata cade all’interno o all’esterno dell’intervallo di partenza se la radice calcolata con l’interpolazione quadratica cade al di fuori dell’intervallo di partenza, si procede per bisezione Interpolazione quadratica (1) Applichiamo la formula di Lagrange e calcoliamo il polinomio di secondo grado x(y) che passa per i tre punti (a,f(a)), (b,f(b)), (c,f(c)): y f (a)y f (b)c y f (b)y f (c)a f (c) f (a) f (c) f (b) f (a) f (b) f (a) f (c) y f (c)y f (a)b f (b) f (c) f (b) f (a) x( y ) Ponendo y=0 si ha: f (a) f (b)c f (b) f (c)a f (c) f (a) f (c) f (b) f (a) f (b) f (a) f (c) f (c) f (a)b f (b) f (c) f (b) f (a) x Interpolazione quadratica (2) Poniamo: f (b) R f (c ) f (b) S f (a) f (a) T f (c ) R ST Si ha: f (b) f (b) f (a) b a Tf (c) Rf (c)c R S T x f (c)1 R f (c)1 T 1 1 1 f (a)1 S f (a) 1 f (b) 1 f (b) 1 T R S cRT aS b x b b R 1T 1 S 1T 1 R 1S 1 Sf (a) dove abbiamo supposto che x=b sia la stima della soluzione ottenuta nell’iterazione precedente Interpolazione quadratica (3) Poniamo: Q R 1S 1T 1 Si ha: x b cRT S 1 aS R 1 bT 11 R 1S 1 P Q Q Osserviamo che: cRT (S 1) cST 2 S 1 cST R T bT 11 R 1S 1 bT 1R S RS bT 1ST S RS bS T 11 R T bST R T bS T 1 R T bST R T bS 1 R Interpolazione quadratica (4) Dalle precedenti relazioni segue che: P cST R T aS 1 R bST R T bS 1 R S T R T c b 1 R b a Le operazioni algebriche su P servono ad esprimere tale quantità in termini delle differenze (c-b) e (b-a) Questa espressione di P risulta utile quando deve essere implementata in una routine In conclusione si ha: x b P Q In altri termini, la nuova soluzione è ottenuta correggendo la vecchia soluzione b di una quantità P/Q che si suppone piccola se la correzione P/Q non è piccola, o se l’intervallo ottenuto con la nuova soluzione non si restringe abbastanza rapidamente, l’algoritmo di Brent effettua una bisezione Metodo di Newton-Raphson (1) A differenza dei metodi visti in precedenza, il metodo di Newton richiede il calcolo sia della funzione f(x) che della sua derivata f’(x) Dato un punto P(x,f(x)), si considera la tangente al grafico della funzione nel punto P e la si prolunga fino ad incontrare l’asse delle ascisse Il punto di intersezione della tangente con l’asse x rappresenta la nuova stima della soluzione Metodo di Neton-Raphson (2) y 1 f(x1) 2 f(x2) 3 f(x3) f(x4) f(x5) 4 5 x5 x4 x3 x2 x1 x Metodo di Newton-Raphson (3) In un intorno di un punto x si può scrivere: f ( x ) f ( x) f ( x) Imponendo la condizione f(x+)=0 si può ricavare : f ( x) f (x ) 0 f ( x) Dette xi e xi+1 le soluzioni dell’equazione dopo la i-esima e la (i+1)-esima iterazione, si avrà: f ( xi ) xi 1 xi i xi f ( xi ) Metodo di Newton-Raphson (4) Sviluppando la funzione f(x) in serie di Taylor in un intorno del punto x in cui f(x)=0 si ha: f ( x ) f ( x) f ( x) 2 f ( x) f ( x) 2 f ( x ) f ( x) f ( x) 2 2 f ( x) Posto xn=x+n e xn+1=x+ n+1 si ha: xn 1 xn n 1 n f ( xn ) f ( xn ) n 1 n f ( xn ) f ( xn ) n f ( x) n2 2 f ( x) f ( x) 1 f ( x) n 1 n2 2 f ( x) A differenza del metodo di bisezione, che converge linearmente, il metodo di Newton-Raphson converge quadraticamente Esempio Consideriamo l’equazione: x log x 2 0 dove f(x)=x+logx-2 osserviamo che f(1)=-1<0 e f(2)=log2>0 Cerchiamo la soluzione con una precisione =10-5 la procedura della falsa posizione converge dopo 6 iterazioni e il risultato è x=1.55715 (contro le 18 iterazioni richieste dal metodo di bisezione) partendo da x=2, la procedura di Newton-Raphson converge dopo 4 iterazioni e il risultato è x=1.55715 la rapidità della convergenza dipende dal punto di partenza: se si parte da x=1.5 sono sufficienti 3 iterazioni se si parte da x=10 occorrono 6 iterazioni se si parte da x=20 occorrono 8 iterazioni Casi problematici y y 2 1 1 x x 2 La procedura di Newton-Raphson può fallire quando: in una iterazione si incontra un massimo (o un minimo) locale di f(x) in questo caso la tangente alla curva è orizzontale ed il valore di x determinato nell’iterazione successiva è infinito una iterazione riconduce nel punto della iterazione precedente in questo caso si entra in un ciclo infinito Radici dei polinomi Un polinomio di grado n ha n radici le radici possono essere reali o complesse non necessariamente le radici sono distinte se i coefficienti del polinomio sono reali, le radici complesse si presentano in coppie coniugate: se a+ib è una radice del polinomio, lo è anche a-ib se i coefficienti del polinomio sono complessi, non è detto che vi siano relazioni tra le radici Per cercare le radici di un polinomio si possono usare gli algoritmi generali radici multiple (o radici fra loro molto vicine) introducono delle difficoltà per esempio P(x)=(x-a)2 ha una radice doppia in x=a e risulta P(x)>0 ovunque eccetto che in x=a in questo caso non si può intrappolare la radice neanche il metodo di Newton-Raphson funziona bene, perché in un intorno di x=a sia la funzione P(x) che la sua derivata tendono ad annullarsi Fattorizzazione (“deflation”) Una volta trovata una radice r del polinomio, questo può essere fattorizzato nella forma: P( x) x r Q( x) Le radici di Q(x) sono le radici restanti di P(x) In caso di radici complesse del tipo a+ib e a-ib, il polinomio P(x) va diviso per il fattore quadratico: x a ib x a ib x 2 2ax a 2 b2 La fattorizzazione va usata con attenzione: gli errori di calcolo su una radice possono dar luogo ad errori nella determinazione dei coefficienti del polinomio Q(x), e quindi nella determinazione delle altre radici conviene trattare le radici trovate di volta in volta come radici approssimate (“tentative roots” )del polinomio originale, e cercare di migliorarne la precisione (“polishing”) Metodo di Muller (1) Il polinomio P(x) viene interpolato con una curva di secondo grado Siano xi-2, xi-1 e xi le ultime tre stime di una radice di P(x) La curva quadratica che passa per i punti (xi-2, P(xi-2)), (xi-1, P(xi-1)) e (xi, P(xi)) avrà equazione: q( x) ax xi bx xi c 2 I coefficienti a,b e c si trovano imponendo che sia q(xi)=P(xi), q(xi-1)=P(xi-1), q(xi-2)=P(xi-2) Metodo di Muller (2) Si ha: q ( xi ) P( xi ) c P( xi ) q ( xi 1 ) P( xi 1 ) a xi 1 xi b xi 1 xi c P( xi 1 ) 2 q ( xi 2 ) P( xi 2 ) axi 2 xi bxi 2 xi c P( xi 2 ) 2 Utilizziamo le seguenti notazioni: h2 xi 2 xi 2 h1 xi 1 xi P ( xi 2 ) P( xi ) h2 1 P( xi 1 ) P ( xi ) h1 Effettuando le sostituzioni si ha: ah12 bh1 P( xi ) P( xi 1 ) ah12 bh1 1h1 ah1 b 1 ah22 bh2 P( xi ) P( xi 2 ) ah22 bh2 2 h2 ah2 b 2 da cui si ottiene: a h1 h2 1 2 a b 1 ah1 1 2 h1 h2 Metodo di Muller (3) Una volta calcolati a,b e c si può trovare la stima successiva della radice, xi+1, imponendo che q(xi+1)=0: axi 1 xi bxi 1 xi c 0 2 La precedente è un’equazione di secondo grado nell’incognita (xi+1-xi) Occorre scegliere la soluzione più piccola in modulo, poiché la stima (i+1)-esima della radice deve essere vicina alla stima precedente l’equazione potrebbe essere risolta in modo tradizionale ricavando: b b 2 4ac xi 1 xi 2a la soluzione più piccola in modulo è quella col segno + se b>0, ed è quella col segno – se b<0 in ogni caso, si deve fare una sottrazione che potrebbe portare ad un risultato nullo (per via della precisione della macchina!) Metodo di Muller (4) Conviene quindi procedere nel modo seguente: si pone y=1/(xi+1-xi) e si ha: axi 1 xi bxi 1 xi c 0 2 a b 2 c 0 cy by a 0 2 y y le cui soluzioni sono: b b 2 4ac b b 2 4ac y 2c 2c poiché (xi+1-xi) deve essere un numero di modulo piccolo, y deve essere un numero di modulo grande la soluzione di modulo più grande si ottiene prendendo il segno + se b>0, il segno – se b<0 nell’ultima formula in ogni caso, si deve fare una somma di due quantità con lo stesso segno, evitando problemi di cancellazione: y b b / b b 2 4ac 2c xi 1 xi 2c b b / b b 2 4ac Metodo di Muller (5) Si parte da tre valori arbitrari x1, x2 e x3 Si determina il valore successivo di x sfruttando la relazione di ricorrenza xi 1 xi 2c b b / b b 2 4ac Si elimina il valore di x più “vecchio” e si procede con una nuova iterazione La procedura iterativa viene terminata quando le differenze h1 e h2 sono sufficientemente piccole Nell’implementazione del metodo bisogna ricordare che c’è la possibilità che le varie quantità assumano valori complessi Il metodo di Muller può essere usato anche per funzioni che non siano polinomi Metodo di Laguerre (1) Un polinomio Pn(x) di grado n può essere fattorizzato nel modo seguente: Pn ( x) k x x1 x x2 x xn dove x1, x2, ..., xn sono le radici Osserviamo che: ln Pn ( x) ln k ln x x1 ln x x2 ln x xn Calcoliamo le derivate prima e seconda di ln|Pn(x)|: G ( x) d ln Pn ( x) H ( x) dx Pn( x) 1 1 1 Pn ( x) x x1 x x2 x xn d 2 ln Pn ( x) dx 2 P( x) P( x) Pn( x) n 2 Pn ( x) 1 1 1 x x1 2 x x2 2 x xn 2 2 Metodo di Laguerre (2) Sia x una stima approssimata della radice x1 Si assume che la radice x1 sia ad una distanza a da x, e che le altre radici x2,x3,...,xn siano tutte equidistanti da x, alla stessa distanza b: x x1 a x xi b i 2,3,, n questa assunzione ha senso per valori di x effettivamente prossimi a x1: se |x-xi|>>|x-x1|, le distanze |x-xi| sono in pratica infinite e possono essere considerate tutte uguali a un numero molto grande b Con le assunzioni di Laguerre si ha: 1 n 1 G ( x) a b 1 n 1 H ( x) 2 2 a b Metodo di Laguerre (3) Per ricavare la stima di x1 occorre calcolare il valore di a dal precedente sistema e ricavare x1=x-a. Si ha: 1 1 1 G ( x ) b n 1 a 1 1 H ( x) 2 n 1 a n 12 2 1 G ( x) a 1 2G ( x) 1 G 2 ( x) 1 n 1 n 1 a n 1 H ( x) 0 1 1 n 2 2G ( x) G 2 ( x) n 1H ( x) 0 a a 1 a2 1 G ( x) G 2 ( x) n G 2 ( x) n 1H ( x) a n n a G ( x) n 1 nH ( x) G 2 ( x) Metodo di Laguerre (4) Implementazione del metodo: si parte da una stima x della radice si calcola x1=x-a risolvendo il sistema precedente la nuova stima di x1 è usata come punto di partenza della iterazione successiva la procedura iterativa viene fermata quando a è sufficientemente piccolo Nell’implementazione del metodo bisogna gestire numeri complessi (le varie quantità possono anche assumere valori complessi) Sistemi di equazioni non lineari Consideriamo come esempio un sistema di due equazioni in due incognite: f ( x, y ) 0 g ( x, y ) 0 Risolvere il sistema significa trovare le intersezioni tra le linee di contorno f(x,y)=0 e g(x,y)=0 in generale non è possibile dire nulla sull’esistenza di soluzioni del sistema e sulla loro eventuale molteplicità per un sistema di N equazioni la soluzione è l’intersezione di N iperpiani di contorno, ciascuno di dimensione N-1 f(x,y)=0 g(x,y)=0 Metodo di Newton-Raphson generalizzato (1) Sia dato un sistema di N equazioni non lineari nelle N variabili x1,x2,...,xN: f i x1 , x2 ,, xN 0 i 1,2,, N Indicato con x=(x1,x2,...,xN) il vettore delle variabili che rappresenta una soluzione approssimata del sistema, e con x=(x1,x2,...,xN) una piccola perturbazione di x, in un intorno di x si ha: f i x j O x 2 j 1 x j N f i x x f i ( x) Metodo di Newton-Raphson generalizzato (2) Trascurando i termini di ordine superiore in x si ha: f i x j 0 j 1 x j N f i x x 0 f i ( x) Posto ij=fi/xj e i=-fi(x), il vettore x può essere trovato risolvendo il sistema lineare: N x j 1 ij j i i 1,2,, N La nuova stima della soluzione è quindi x’=x+x La ricerca della soluzione viene fatta partendo da una soluzione di prova e procedendo iterativamente