Sei sulla pagina 1di 23

UNIVERSIT DEGLI STUDI DEL MOLISE ANNO ACCADEMICO 2006/2007

Tesina di Matematica computazionale


Documentazione di supporto ai codici Matlab
Tornincasa Elio mat.120935

Progetto realizzato grazie allausilio del SW scientifico MatLab 6.5 e del libro di riferimento del corso Matematica Numerica di Quarteroni, Sacco e SaleriPROF. Giovanni Capobianco

INTRODUZIONE
Scopo: Si vuole esaminare le principali questioni relative allapprossimazione numerica delle radici (o zeri) di una funzione reale di una variabile. La nostra funzione di riferimento sar: f(x)=x3+4xcos(x)-2 (richiamata dal file effe.m) e verr esaminato il caso in cui f(x)=0, confrontando le prestazioni dei vari metodi iterativi (attinti per la ricerca): bisezione, tangenti, secanti e metodo della direzione costante. Questi metodi si basano sulla concezione della creazione di una successione di valori x(k) tali che limk-> x(k)=. Ogni metodo ha diversi ordini di convergenza che vedremo in dettaglio pi avanti. Dati: Lintervallo di ricerca di f(x)=0 denotato da *0,1+, la soluzione esatta x=0,53683855156678 e la tolleranza commisurata a 10-8.

Fig.1 Grafico di f(x)=x3+4xcos(x)-2

Si noti come la funzione crescente e concava nellintervallo *0,1+. effeprima(x)*effeseconda(x)<0 per ogni x appartenente nellintervallo.

Si anche studiato K(d)=1/f(x), problema ben condizionato.


2

METODO DI BISEZIONE
APPROCCIO GEOMETRICO: Viene diviso lintervallo, in sottointervalli corrispondenti alla met dellintervallo, ci spostiamo nel quadrante di riferimento controllando il segno. Questo procedimento dicotomico possibile se viene soddisfatto il teorema degli zeri per le funzioni continue (descritto dal codice controlEsistenza.m). La complessit computazionale di questo algoritmo commisurata solo al controllo del segno. Il codice dellalgoritmo presentato nel file bisezione.m, dove si deciso di iterare fino a quando la tolleranza (si ricordi 10-8) sia minore allerrore relativo sul risultato finale cio err=(abs(risultato-x)/abs(risultato)) , ottenendo il seguente risultato.

Fig.2 Grafico degli errori incrementali del metodo di bisezione

Si noti come in questo metodo la decrescenza degli errori non monotona. Se per assurdo si volesse studiare questa curva troveremo punti angolosi non derivabili.

Risultati di convergenza del metodo di bisezione

ITERATA 18 .. 21 22 23 24 25 26

X 0.53683853149414 .. 0.53683900833130 0.53683876991272 0.53683865070343 0.53683859109879 0.53683856129646 0.53683854639530

Risultati del codice bisezione.m

Alliterata 18 abbiamo le stesse cifre significative della 24, 25, 26, ma sostanzialmente non abbiamo rispettato il criterio di arresto. Come da risultati sugli errori (xdif):
0.06862128559744 0.39706807160384 0.16422339300320 0.04780105370288 0.01041011594728 0.01869546887780 0.00414267646526 0.00313371974101 0.00050447836213 0.00131462068944 0.00040507116366 0.00004970359923 0.00017768378221 0.00006399009149 0.00000714324613 0.00002128017655 0.00000706846521 Errore allIterata 18 = 0.00000003739046 0.00000351553738 0.00000173907346 0.00000085084150 0.00000040672552 0.00000018466753 0.00000007363854 0.00000001812404 Errore finale = 0.00000000963321

Dopo 26 iterate, il metodo di bisezione si ferma e raggiunge la condizione che lerrore sia minore di toll, anche se prende solo 7 cifre significative dopo la virgola. In questo caso lalgoritmo si stoppa bene, in altri casi c la possibilit che si stoppi con ritardo, poich non riesce a tenerne traccia. Altres, si provato ad utilizzare, come criterio di stop, lerrore assoluto sui risultati( err = abs(risultato-x) ), ottenendo un alt a 25 iterate con un ultimo errore leggermente maggiore a quello del criterio utilizzato nel codice. E sicuramente un passo in pi per affinare lalgoritmo per questa funzione. Utilizzando, invece, il criterio di arresto basato sul calcolo della funzione nella x approssimata (err= abs(effe(x)) sono arrivato al risultato dopo 27 iterate. E con un ultimo errore leggermente minore al criterio relativo. Testando con gli errori relativi e assoluti sullintervallo, il ciclo si ferma rispettivamente dopo 28 iterate e 29 iterate. A questo punto irrilevante parlare di ultimi errori, visto che ci sono iterate in pi. Da un certo punto di vista si poteva prospettare una convergenza pi lunga dovuta allutilizzo di un solo criterio, infatti: - Lerrore relativo sullintervallo (abs(b-a)/abs(b)) , pu dare problemi in prossimit di x=0; - Lerrore assoluto sullintervallo (abs(b-a)) , pu dare problemi se la prima approssimazione molto grande; - La funzione, pu dare problemi se la pendenza della curva vicina allo zero molto piccola (problemi con lepsilon macchina 2-16). Sono fondamentali i criteri di stop, perch un criterio pu arrivare a dare diverse cifre significative rispetto ad un altro. In definitiva, si denotato che i criteri di stop assoluti hanno una marcia in pi rispetto a quelli relativi (nel caso di un intervallo 0 e 1). Questa asserzione dovuta al fatto che si v a dividere sempre (o quasi eccezione b la prima volta) per un numero > 0 e < 1, cosa che pu provocare risultati pi alti e quindi convergenza pi lenta.

Listato 1 , Metodo di bisezione (bisezione.m)


% Metodo di bisezione per l'approssimazione di f(x)=0 function [x]=bisezione() t=cputime; a=0; b=1; toll=10.^-8; risultato =fzero(effe,.5); x=abs(b-a); % poniamo la prima approssimazione come differenza dell'intervallo i=0; xdif=[]; errf=toll+1; % essenziale per entrare nel ciclo la prima volta while( errf >toll) i=i+1 x=(a+b)/2 errf=abs(risultato-x)/abs(risultato); if(effe(x)<0) % controllo per spostarci nel quadrante a=x; else b=x; end

xdif=[xdif;errf]; end semilogy(1:length(xdif),xdif,'ro-') xdif % evidenziamo gli errori in ogni iterata Tempo=cputime-t %controlliamo il tempo che ci mette per convergere

Osservazione: il numero di iterazioni necessarie per raggiungere la tolleranza richiesta non dipende dalla funzione, nel senso che (a meno di casi fortunosi) sara sempre lo stesso qualunque sia la funzione considerata.

METODO DELLE SECANTI


APPROCCIO GEOMETRICO: A differenza del metodo di bisezione, quello delle secanti approssima la soluzione costruendo una retta secante passante per i punti (x(a), effe(a)) e (x(b), effe(b)). La retta tocca lasse delle x, e quella sar la soluzione approssimata f(x)=0. La x verr calcolata, inoltre, introducendo il rapporto incrementale, cosa che far incrementare la velocit di convergenza a discapito del costo computazionale. Il metodo stato costruito nel codice secanti.m. Anche in questo caso abbiamo una serie di osservazioni da fare dovute a diversi criteri di stop. Infatti, ponendo inizialmente lerrore relativo sui risultati approssimati, (abs(risultato-x)/abs(risultato)) abbiamo questo risultato:

Graficamente, all iterata 5 ancora non si raggiunge la precisione aspettata, per questo bisogna attendere literata successiva. Si noti la grandezza esigua (c l1) dellerrore alla penultima iterata grazie a xdif: 0.00000001431569

Risultati di convergenza delle secanti


ITERATA 1 2 3 4 5 6 X 0.63266929159564 0.50807579530431 0.53807142031366 0.53685324446390 0.53683854388156 0.53683855156682

Dopo 6 iterate lalgoritmo arriva alla soluzione. Anche in questo caso adottando il criterio assoluto cio (abs(risultato-x)) ci stoppiamo a 5 iterate, non a 6.

Si noti come il criterio sullerrore relativo abs(x-x1)/abs(x) all iterata 6 si trovi ancora sopra la tolleranza. Il suo errore alla sesta : 0.00000001431577 Gli altri criteri (tra cui quello esposto nel codice) arrivano con 6 iterate.
8

Per migliorare sensibilmente la velocit di convergenza dellalgoritmo possiamo adottare quanto segue. La prima approssimazione x1 pu essere posta non come 1, ma come (x0+toll/2), nel nostro caso toll/2. Dal Command Window quindi possiamo richiamare la funzione passandogli questi parametri << secanti(0,5.^-9). ITERATA 1 2 3 4 5 X 0.49999999999213 0.53186818075734 0.53676357359545 0.53683839427128 0.53683855156178

Importanti per i metodi iterativi sole le approssimazioni iniziali.

Notiamo uno snellimento di una iterata e il contemporaneo incremento per quanto riguarda la velocit di convergenza. Questo sistema viene utilizzato per evitare che lalgoritmo si interrompa precocemente, oppure per far s di non creare problemi neppure in casi di intervalli stretti. Si noti dalla tabella come il metodo delle secanti crei una successione decrescente che approssimi per eccesso la radice.

Listato 2, metodo delle secanti (secanti.m)


function [x]=secanti(x0,x1) t=cputime; toll=10.^-8; risultato = fzero(effe,.5); err=toll+1; % per entrare almeno la prima volta nel ciclo while i=0; % iterate xdif=[]; % vettore vuoto per mantenere gli errori delle iterate % vettore essenziale per il plot while(err >toll) i=i+1 x=x1-effe(x1)*(x1-x0)/(effe(x1)-effe(x0)) % relazione di ricorrenza err=abs(risultato-x)/abs(risultato); x0=x1; x1=x; xdif=[xdif;err]; end semilogy(1:length(xdif),xdif,'bo-') xdif tempo=cputime-t

METODO DELLE TANGENTI

APPROCCIO GEOMETRICO: Il metodo delle tangenti (o anche detto NewtonRaphson) si basa sulla possibilit di andare a ricercare approssimativamente f(x)=0, costruendo iterativamente le tangenti alla curva nei punti (xn,f(xn)). Il codice di riferimento tangenti.m, correlato con effeprima.m (indispensabile per il calcolo della successiva approssimazione e per il controllo di convergenza globale del metodo). Per ogni x appartenente allintervallo a,b ; effeprima(x) 0 La formula della tangente converge verso lo zero, a patto che la funzione sia monotona fra l'estremo scelto e lo zero: la tangente non deve mai cambiare di segno durante il processo di avvicinamento, altrimenti l'algoritmo "torna indietro". Il primo punto di approssimazione per il nostro esercizio 0.5, esattamente la met dellintervallo. Occorre scegliere in modo minuzioso questo punto per avere una convergenza migliore (come si visto nelle secanti). Uno dei criteri di scelta quello che mette in relazione la funzione per la derivata seconda (effeseconda.m) calcolata nel punto x0. Se questo prodotto > 0 allora la x0 ottimale per partire e si registra una notevole velocit di convergenza a discapito del costo computazionale (calcolo derivata). Vedere controlCriterio.m. Notando la curva (Fig1) come costruita possiamo azzardare che: - scegliendo x0 il pi vicino possibile al risultato (da sinistra o da destra) si arriver a convergenza pi velocemente (ad esempio optando per x0=0.53), visto che la funzione monotona. Anche per questo metodo si scelto di adottare il criterio di arresto basato sul risultato finale meno le approssimazioni. Questa volta per si ha la stessa velocit di convergenza sia per quello assoluto che per quello relativo. Cio 3 iterate.

10

Risultati di convergenza del metodo delle tangenti


ITERATA 1 2 3 X 0.53629732917759 0.53683842752870 0.53683855156677

Si pu notare dalla tabella la velocit di convergenza delle tangenti nel punto di prima approssimazione 0.5.

ITERATA 1 2

X 0.53681895192199 0.53683855140397

Si pu notare dalla tabella la velocit di convergenza delle tangenti nel punto di prima approssimazione 0.53. 2 ITERATE.. Con un errore commisurato alla 10-9

11

Listato 3, metodo delle tangenti (tangenti.m)


function [xn]=tangenti(x0) t=cputime; toll=10.^-8; risultato = fzero(effe,.5); err=toll+1; % condizione per far entrare la prima volta nel ciclo xdif=[]; % vettore indispensabile per il semilogy x=x0; i=0; while(err >toll) i=i+1 xn=x-effe(x)/effeprima(x) err=abs(risultato-xn)/abs(risultato); x=xn; xdif=[xdif;err]; end xdif semilogy(1:length(xdif),xdif,'ko-') tempo=cputime-t

Osservazione: In matematica, un punto fisso per una funzione definita su un insieme A un elemento x in A tale che x = f(x). In altre parole, un punto fisso un elemento (numero, punto etc.) che la funzione applica su se stesso. fonte: Wikipedia.it

Si pu vedere lesistenza del punto fisso digitando: << effe(.85). Dove effe(.85)=.85.. In poche parole si creata la bisettrice e si visto il punto di intersezione (p.fisso).
12

METODO DELLA DIREZIONE COSTANTE


Potrebbe essere visto come un metodo derivato dalle tangenti. Lunica differenza che non si v a calcolare la derivata (ossia il limite del rapporto incrementale) in ogni punto, ma la si va a calcolare una volta per tutte nel punto dove si prospetta il risultato. In poche parole, alla relazione di ricorrenza delle tangenti si v a traslare la derivata con m, trovando un costo computazionale minore, ma unaccuratezza peggiore della soluzione (Lerrore di questa semplificazione viene calcolato sviluppando Taylor). Il codice inerente il metodo descritto nel file metodoX.m. Un altro metodo per calcolare la pendenza della retta tangente quella di approssimarla volta per volta (oppure una volta), con il rapporto incrementale simmetrico (molto buono per funzioni lisce). Questo rapporto incrementale descritto dalla function m.m, dove h rappresenta lincremento sullascissa X e deve essere presa abbastanza piccola (ad esempio uguale alla tolleranza). Andiamo a considerare la retta tangente avente coefficiente angolare m: - immettendo nel Command Window <<m(.53683855156678,10-8) ; - abbiamo m=3.20370232564926 e effe(.5)= 0.11983487621925 y=mx+q=> y=m(x-x0)+f(x0)=> y=3,20370232564926(x-.5)- 0.11983487621925 => y=3,20370232564926x-1.72168603904388

13

Lasciando perdere questa ultima supposizione di approssimazione, poich richiede molti studi di funzioni anche se ci permette di non calcolare la derivata direttamente. Procediamo con lindividuazione di m: La m viene cercata in modo che 0<effeprima(risultato)/m<2. Da come si pu intendere, pi questo rapporto sia 1 pi converge velocemente. Per questo nel codice si scritto che m = effeprima(risultato). ITERATA 1 2 3 X 0.53740512212952 0.53683868764645 0.53683855156678

Alla iterata 3 il metodo (come da codice) si stoppa ottenendo la soluzione esatta. La m=3.20370231125870. ITERATA 1 2 3 X 0.53740512196150 0.53683868764892 0.53683855156678

Anche approssimando la m il metodo si stoppa alliterata 3 e d anche la soluzione esatta. La m=3.20370232564926 (errore su m allottava cifra significativa come prospettato). Con ci nulla toglie (in termini di convergenza) che la pendenza si pu approssimare assumendo m = m(.53683855156678,10-8), in modo da diminuire ulteriormente la complessit computazionale. Controlliamo gli errori:
0.00105538321171 0.00000025348342 0.00000000000001 < < = 0.00105538352468 0.00000025348801 0.00000000000001

Approssimazione di m

effeprima(risultato)

Incredibilmente, approssimando la m abbiamo un errore minore per la prima e per la seconda iterata.

14

Listato 4, metodo della direzione costante (metodoX.m)

function [y]=metodoX() t=cputime; toll=10.^-8; risultato = fzero(effe,.5); err=toll+1; xdif=[]; x=.5; i=0; m=effeprima(risultato) % o se no approssimiamo la pendenza con m=m(risultato,toll) while(err>toll) y=x-effe(x)/m i=i+1 err=abs(risultato-y)/abs(risultato); x=y; xdif=[xdif;err]; end xdif % evidenziamo gli errori in ogni iterata semilogy(i,xdif,'go-') Tempo=cputime-t

Osservazione Quando applichiamo ripetutamente la formula di Newton-Raphson pu accadere che la derivata prima della funzione f(x) si mantiene sensibilmente costante allora si pu porre: m = f(x)

Si noti che conformemente al metodo delle tangenti adottando una prima approssimazione migliore (ad esempio 0,53), il metodoX converge anchesso con una iterata in meno. Come da tabella:

ITERATA 1 2

X 0.53685831839977 0.53683855173238

15

Visione dinsieme: confronto delle prestazioni dei metodi

ITER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Bisezione(0,1)
0.50000000000000 0.75000000000000 0.62500000000000 0.56250000000000 0.53125000000000 0.54687500000000 0.53906250000000 0.53515625000000 0.53710937500000 0.53613281250000 0.53662109375000 0.53686523437500 0.53674316406250 0.53680419921875 0.53683471679688 0.53684997558594 0.53684234619141 0.53683853149414 0.53684043884277 0.53683948516846 0.53683900833130 0.53683876991272 0.53683865070343 0.53683859109879 0.53683856129646 0.53683854639530

Secanti(0,1)
0.63266929159564 0.50807579530431 0.53807142031366 0.53685324446390 0.53683854388156 0.53683855156682

Tangenti (0.5)
0.53629732917759 0.53683842752870 0.53683855156677

metodoX(0.5)
0.53740512212952 0.53683868764645 0.53683855156678

Come si nota dalla tabella i metodi migliori in termini di velocit di convergenza sono quelli delle tangenti e il metodo della direzione costante. Con 3 iterate riescono a fornire la soluzione esatta o quasi. Mentre il metodo di bisezione richiede 26 iterate , solamente per soddisfare la tolleranza. Le differenze dei metodi sono dovute ai diversi ordini di convergenza. Si assuma, sempre che questi risultati vengono fuori adottando gli stessi criteri di stop.

16

BISEZIONE: Il metodo , in generale, molto lento ma ha i seguenti pregi: 1. converge anche in presenza di pi soluzioni, 2. non richiede alcuna propriet della f(x), oltre la continuit, 3. dispone di una stima "a priori" dell'errore. Per tali ragioni il metodo dicotomico spesso usato per l'individuazione di intorni sufficientemente piccoli contenenti la radice cercata, sui quali applicare i metodi pi elaborati e veloci, come quello delle tangenti e delle secanti. La routine fzero del matlab utilizza un metodo ibrido tra bisezione e secanti, cio il metodo DekkerBrent. Come si pu notare digitando nel command window << fzero(effe,.5), abbiamo f(x)=0, che sarebbe il risultato. Analizzando anche i tempi Cpu come da codice, notiamo che grande influenza la ha la costruzione del grafico, la costruzione del vettore degli errori e se il programma stato avviato da poco oppure se si stanno eseguendo altri programmi. In definitiva notiamo che il tempo mediamente:

17

0,20 secondi

Lordine (p) del metodo di bisezione = 1, questo significa che limn->|err Xn+1|/|err Xn|p= c, La c il fattore asintotico di convergenza nel caso della bisezione=1/2. Abbiamo una convergenza lineare. Quindi lerr Xn+1= errXn. In termini di leggerezza, il metodo deve solamente andare a dividere lintervallo e calcolare il segno, cosa che fa evidenziare unottima leggerezza. I difetti principali sono da registrarsi nel caso in cui la pendenza della curva sia quasi nulla allo zero. Questo porterebbe ad un arresto preventivo. Il metodo dicotomico definisce immediatamente la stima dei dimezzamenti (iterazioni) necessari alla convergenza, definita da: n > log2 b-a/toll => n >log2 100000000 => Se calcoliamo 227 vediamo che si raggiunge 134217728. Quindi la stima ci d la visione preventiva che il metodo converger tra la 26a e 27a iterata. TANGENTI: E un metodo sicuramente migliore di quello dicotomico in termini di velocit di convergenza. Per, bisogna andare a calcolare la derivata per ogni ciclo e quindi per ogni x approssimata, cosa che fa crescere la complessit computazionale. Per un PC o calcolatrice programmabile potrebbe essere difficile e costoso calcolare una derivata, ad esempio, di una funzione trascendentale. Cosa che pu far nascere un errore maggiore come si visto nel confronto dei metodiX e tangenti. La velocit ottima, ma la leggerezza minima. Inoltre questo metodo pu avere il difetto, passandogli una approssimazione iniziale non buona, di uscire dallintervallo zompettando a destra e a sinistra senza trovare la f(x)=0. Analizzando il tempo cpu utilizzato dal metodo, si evidenziato che non c una notevole disparit rispetto al metodo di bisezione, ma al contrario i 2 metodi si attestano quasi allo stesso tempo. 0,16 secondi

18

Il mio discorso stato formulato mantenendo inalterate le condizioni quali, creazione grafico e vettore errori etc ( Come si scorge dai codici) Per il calcolo simbolico della derivata ho scelto di utilizzare lambiente di sviluppo scientifico Maple 9.5 (per problemi con alcuni moduli del programma MatLab).

MAPLE 9.5 Calcolo Derivate prima e seconda

Anche in Matlab avrei potuto calcolarle attingendo dalla routine s = sym(effe). Richiamando poi diff (s). Oppure la potevano sviluppare in linguaggio C:
#include<stdio.h> #include<math.h> float f(float x) { float y; y = x +4xcos(x)-2 ; return y; } int main(void) { float x, dx, der, der0, der1, der2; x = .5; dx = toll; der0 = (f(x+dx)-f(x-dx))/(2*dx); der1 = (f(x+dx)-f(x))/dx; der2 = (f(x)-f(x-dx))/dx;
3

19

der = (der0+der1+der2)/3; printf("La derivata in %f vale %f",x,der); }

ADOTTANDO IL METODO DEI TRE PUNTI Per quanto riguarda il metodo delle tangenti si anche stimato lerrore, come descritto dal codice stimaErrTang.m.

Errore reale:
0.00100816602610 0.00000023105286 0.00000000000002

Errore Stimato:
0.00100000000000 * err. iniziale 1.000000000000001e-007 * err. iniziale 1.000000000000002e-015 * err. Iniziale

Dai risultati ci saremmo potuti aspettare che il metodo si sarebbe dovuto fermare alla terza iterata. Infatti, nella seconda abbiamo ancora un errore di 10-7. Si assuma sempre che il metodo delle tangenti ha ordine di convergenza 2 (convergenza quadratica) e che lerrore alliterata ennesima sempre > dellerrore stimato. Un ordine di convergenza minore provoca una curva degli errori pi alta rispetto alle altre, per questo la curva degli errori delle tangenti si trova sotto le altre. Inoltre si pu assumere che una iterata di tangenti vale dieci di bisezione.

SECANTI: Il metodo delle secanti permette di non calcolare la derivata direttamente, ma di approssimarla e studiare solo una funzione calcolata nel punto ogni volta, ammettendo che una (x1) venga mantenuta in memoria e quindi non venga ricalcolata nella prossima iterazione. Alla base di questo concetto c lalgoritmo di Horner che permette di calcolare con meno operazioni la derivata (polinomio ridotto), al contrario della valutazione tradizionale. Nelle tangenti, invece, avevamo uno studio di funzione e uno studio di derivata per ogni approssimazione. Prendendo in esame quando si detto la velocit di convergenza aumenta (6 iterate), ma la complessit computazionale diminuisce sensibilmente. Il difetto
20

principale del metodo che lapprossimazione pu uscire dallintervallo se un estremo preso in modo poco coerente. Lordine di convergenza delle secanti si attesta a 1,618.. (radice singola) quindi si dice che la convergenza superlineare. Il numero phi un numero importante in termini di studio del corpo umano e della sezione aurea (come descritto da Da Vinci e Fr Pacioli). Questo numero venne fornito dalla successione di Fibonacci, cio applicando il limite che tende ad infinito del rapporto del numero che viene dopo ed il numero che viene prima si ottiene il numero phi. Un po come si fa per il calcolo del fattore asintotico c. Per quanto riguarda il tempo di cpu utiizzato per ottenere la convergenza, notiamo per che non c un grosso divario con gli altri. Infatti il metodo converge dopo: 0.17 secondi In definitiva possiamo considerare questo metodo migliore rispetto a tangenti e bisezione in generale . Infatti si stima che una iterata, di un metodo che calcola la derivata, corrisponde a due iterate. Nel nostro caso invece: facendo un semplice calcolo 3*2=6, le tangenti convergono come le secanti. Per questa funzione denotiamo che i due metodi si equivalgono. Uno dei problemi fondamentali della regola di ricorrenza delle secanti che se f(x1) ed f(x0) sono molto vicine, si pu avere come risultato NaN (divisione per zero).

METODO DELLA DIREZIONE COSTANTE: Questo metodo , rispetto alle secanti, ha il gap di calcolare almeno una volta la derivata nel punto in cui c la soluzione f(x)=0. Abbiamo per unottima velocit paragonabile a quella delle tangenti, cio 3 iterate. Daltronde questo metodo direttamente correlato a quello delle tangenti, per questo ne prende i difetti sopra citati. Nonch lordine di convergenza (p=2). Possiamo affermare che se il metodo delle tangenti ogni volta deve raddoppiare le sue iterate (cio 6 alla fine), perch calcola la derivata. Il metodoX deve raddoppiare solo la prima iterata cos facendo viene 2+1+1= 4 iterate. Meglio di secanti e

21

tangenti. Daltronde il risultato viene immagazzinato per il prossimo calcolo. Non bisogna escludere per che di per se il calcolo della derivata costa parecchio. Questo metodo come si potuto capire senzaltro migliore rispetto ai due sopra citati. Ma una domanda sorge spontanea, non conoscendo il risultato come facciamo a calcolarne la derivata? Per questo motivo non pu essere usato in maniera diretta (per trarne tutti i benefici), ma si deve prima utilizzare il metodo delle tangenti e secanti, calcolarne i risultati e poi provare con esso. Quindi andiamo ad affinare lalgoritmo. Si nota per che utilizzando al posto del calcolo della derivata in risultato, il calcolo della derivata in un punto di prima approssimazione (0.5), la convergenza viene fornita dopo 5 iterate. Per il discorso fatto prima 2+1+1+1+1= 6 iterate. Possiamo affermare che in questo caso i tre metodi forniscano risultati uguali. Il tempo di Cpu non che migliora di molto rispetto agli altri metodi e si mantiene mediamente a : 0,15 secondi La tematica del tempo cpu per confrontare i 4 metodi del tutto aleatoria, infatti c la possibilit che su un altro processore fornisca risultati diversi. Anche le varie tecniche di scheduling della CPU possono provocare ritardi oppure velocizzazioni, ad esempio i context switch (passaggio da un processo ad un altro) possono provocare ritardi. Le piccole differenze tra i metodi sono dovute in primo luogo alla scrittura di pi dati (ad esempio il metodo di bisezione deve riportare 26 errori, 26 iterate e 26 risultati). Si notato in definitiva che avviando la prima volta un metodo, il tempo CPU molto maggiore rispetto al prossimo tentativo (considerando di chiudere il grafico). Questo dovuto al fatto che alcuni dati vengono immagazzinati in una memoria piccola e veloce denominata cache. In questo modo si velocizzano le istruzioni e il relativo tempo CPU. Ritornando al nostro discorso non ci sono disparit evidenti nel tempo, perch alla fine il numero di operazioni svolte dalla CPU sono le stesse per i metodi.

22

Come si pu vedere dal grafico i due metodi rispettivamente alla prima e alla seconda iterata afferiscono ad un errore uguale (o quasi), mentre dalla seconda alla terza incominciamo ad evidenziare una differenza. Disuguaglianza, a mio avviso, dovuta al calcolo della derivata. Infatti il metodoX attinge gi dalla prima iterata un calcolo della derivata nel punto del risultato, mentre le tangenti arriveranno sempre con un po pi di ritardo dovuto al calcolo della derivata nel punto di approssimazione. In poche parole il metodo delle tangenti impiegher una iterata in pi (4 quindi) per raggiungere la precisone completa di 10-14. Per eliminare il problema della derivata abbiamo visto lutilizzo delle secanti. Un altro metodo poco conosciuto il metodo Steffensen che approssima la derivata con il seguente rapporto:

Come si pu notare a differenza delle secanti abbiamo per due studi di funzione f(xn) e f(xn+f(xn)) . Lordine di convergenza pari a quello di Newton..

23

Potrebbero piacerti anche