Zeri di una funzione - innovit.org numerici per la ricerca... · METODO DI BISEZIONE...

18
DETERMINAZIONE DEGLI ZERI DI UNA FUNZIONE Prof.Daniele Attampato Il problema da affrontare ecalcolare in modo approssimato gli zeri di una funzione, cioei valori di x per cui la funzione si annulla.

Transcript of Zeri di una funzione - innovit.org numerici per la ricerca... · METODO DI BISEZIONE...

DETERMINAZIONE DEGLI ZERI DI UNA FUNZIONEProf.Daniele Attampato

Il problema da affrontare e’ calcolare in modo approssimato gli zeri di unafunzione, cioe’ i valori di x per cui la funzione si annulla.

• I metodi per calcolare gli zeri di una funzione sono:1.metodo di bisezione2.metodo delle tangenti3.metodo delle secanti4.metoto del punto unito

• Perche’ i metodi possano essere applicabili devono verificarsi leseguenti condizioni:· la funzione deve ammettere uno zero nell’intervallo [a,b]· la funzione deve essere continua nell’intervallo [a,b]· la funzione deve essere secante all’asse delle x e non tangente(questo significa che il segno della f(x) a destra dello zero deve essereopposto al segno a sinistra dello zero)

• Per ottenere l’intervallo di partenza [a,b] si puo’ tracciare il graficodella funzione con Derive e prendere due valori di x che contengano lozero (separazione delle radici).

- se i due valori hanno segnoopposto (il loro prodotto e’negativo) allora la funzione siannulla proprio in [a,c]; si poneallora b←c e si ripete la procedura.

- se i due valori hanno stessosegno (il loro prodotto e’ positivo)allora la funzione si annulla in[c,b]; si pone allora a←c e si ripetela procedura.

METODO DI BISEZIONE

A partire dall’intervallo [a,b], si considera l’intervallo [a,c] con c punto mediotra a e b, e si calcola il valore della funzione nei due estremi:

INIZIO

c=(a+b)/2

f(a)*f(c) > 0 ?SI NO

a=c b=c

b - a < e ?NO

SI

FINE

Condizione di arresto: il programma si ferma quando l’intervallo èdiventato piu’ piccolo di un valore ‘e’, detto errore assoluto (inalternativa puo’ essere considerato l’errore relativo).Alla fine del ciclo si può prendere indifferentemente a o b comeapprossimazione dello zero.

ESERCIZIO

Graficare la funzione y=x5+x3-7x2-x+6 con Derive ed effettuarevisivamente la separazione delle radici.

Determinare lo zero della funzione nell'intervallo [a,b] usando ilmetodo numerico di BISEZIONE.

CODICE IN LINGUAGGIO C

#include <stdio.h> /* include le funzioni di input/output */

#include <math.h> /* include le funzioni matematiche: in tal caso pow(base,esp) */

#include <stdlib.h> /* include la funzione system(“PAUSE”) */

float f(float x){

float y;

y=pow(x,5)+pow(x,3)-7*pow(x,2)-x+6;

return y;

}

int main(){

float a,b,c,e; /* [a,b] è l'intervallo contenente lo zero c è il punto medio di [a,b] e è l'err assoluto*/

printf(" INSERIRE L'INTERVALLO [a,b] \n");

printf(" ESTREMO SINISTRO a= ");

scanf("%f",&a);

printf(" ESTREMO DESTRO b= ");

scanf("%f",&b);

printf(" INSERIRE L'ERRORE ASSOLUTO e= ");

scanf("%f",&e);

while ((b-a)>e){

c=(b+a)/2;

if (f(a)*f(c)<0)

b=c; /* se c'è un cambiamento di segno della funzione nell'intervallo [a,c] */

else

a=c; /* se non c'è un cambiamento di segno della funzione nell'intervallo [a,c] */

}

printf("\n\n LO ZERO SI HA IN x= %f",a);

printf("\n\n\n");

system("PAUSE");

}

Questo si traduce applicandoiterativamente la formula:

xn+1 = xn – f(xn)/f’(xn)

dove xn rappresenta l’approssimaz.corrente ed xn+1 l’approssimazionesuccessiva.

Inizializzazione:x0=a se f(a)*f’’(a) > 0x0=b se f(a)*f’’(a) < 0

f(xn) rappresenta il valore dellafunzione in xn, mentre f’(xn) ilvalore della derivata prima dellafunzione in xn.

METODO DELLE TANGENTI

Partendo da un punto prossimo allo zero, l’intersezione dell’asse delle x conla tangente alla funzione in quel punto determina la successivaapprossimazione dello zero cercato. Il metodo converge se la derivataseconda della funzione è costante in [a,b].

x0=a x1 x2

y - f(x0)=f’(x0)(x-x0)y=0

-f(x0)=f’(x0)(x-x0)

x= x0 - f(x0)/f’(x0)

La formula converge verso lo zero a patto che la funzione sia monotona tral’estremo scelto e lo zero: la tangente non deve mai cambiare di segnodurante il processo di avvicinamento, altrimenti l’algoritmo “torna indietro” ediverge.

Condizione di arresto: l’esecuzione termina quando due approssimazioniconsecutive differiscono, in valore assoluto, di un valore più piccolo di ‘e’(errore assoluto). Si considera il valore assoluto per garantire che ladifferenza xn+1-xn (ampiezza dell’intervallo) sia comunque sempre positiva.

NB: Nel codice, prima del ciclo, alle variabili xn e xn+1 vengono assegnati i valori degli estremidell’intervallo [a,b], in modo da poter soddisfare da subito la condizione ed entrare nel ciclostesso per iniziare le iterazioni. Al primo passaggio nel ciclo, a partire da uno dei due estremi, siricava l’approssimazione successiva, e così via (l’altro estremo non viene utilizzato).

ESERCIZIOGraficare la funzione y=x5+x3-7x2-x+6 con Derive ed effettuarevisivamente la separazione delle radici.

Implementare un programma in linguaggio C per determinare lo zerodella funzione nell'intervallo [a,b] usando il metodo numerico delleTANGENTI.

La derivata prima della funzione data è: y’=5x4+3x2-14x-1

Questo si traduce applicandoiterativamente la formula:

xn+1 = xn – f(xn)*(xn-c)

f(xn)-f(c)

dove xn rappresenta l’approssimaz.corrente ed xn+1 l’approssimazionesuccessiva.

Inizializzazione:x0=a, c=b se f(a)*f’’(a) < 0x0=b, c=a se f(a)*f’’(a) > 0

METODO DELLE SECANTIQuesto metodo utilizza l’intersezione di una secante con l’asse x perdeterminare la successiva approssimazione dello zero cercato. Rispetto almetodo delle tangenti non richiede l’uso della derivata, ma necessita di unpunto fisso da utilizzare come secondo punto per determinare le variesecanti. Il metodo converge se la derivata seconda della funzione ècostante in [a,b].

a

(x-x0)/(a-x0) = (y-f(x0))/(f(a)-f(x0)) eq. Retta per due punti

y=0

x = x0 – f(x0)*(x0-a)---------------

f(x0)-f(a)

x0 = bx1x2

f(a)

f(x0)x3

L’algoritmo converge nella maggioranza dei casi anche se è possibile che inqualche raro “caso patologico” possa “perdere” lo zero.Ad ogni modo, la sua efficacia e’ meno legata alle particolari caratteristichedella funzione, rispetto al metodo delle tangenti, anche se un po’ piu’ lentodal punto di vista della velocita’ di convergenza (necessita in generale di unmaggior numero di iterazioni per raggiungere la soluzione).Per il resto, la struttura ciclica e la condizione di uscita dei due metodi sonoidentiche.

Condizione di arresto: l’esecuzione termina quando due approssimazioniconsecutive differiscono, in valore assoluto, di un valore più piccolo di ‘e’(errore assoluto). Si considera il valore assoluto per garantire che ladifferenza xn+1-xn (ampiezza dell’intervallo) sia comunque sempre positiva.

NB: Nel codice, prima del ciclo, alle variabili xn+1 e xn vengono assegnati i valori degli estremidell’intervallo [a,b], in modo da poter soddisfare da subito la condizione ed entrare nel ciclostesso per iniziare le iterazioni.

ESERCIZIOGraficare la funzione y=x5+x3-7x2-x+6 con Derive ed effettuarevisivamente la separazione delle radici.

Implementare un programma in linguaggio C per determinare lo zerodella funzione nell'intervallo [a,b] usando il metodo numerico delleSECANTI.

Osservando il grafico di esempio, laintersezione delle due curve è ilpunto unito (Pu), la cui ascissa xPu

è la radice cercata.Il metodo ricorsivo per trovare ilvalore approssimato dell’ascissa delpunto unito xPu è il seguente:x1

x2=g(x1)x3=g(x2)x4=g(x3)……..Se viene soddisfatta la condizionesufficiente di convergenza (vedipagina successiva) la successionedei valori x1…xn converge a xPu.

METODO DEL PUNTO UNITOData una funzione f(x), il sistema per la ricerca delle radici (o zeri) è:

y=f(x) f(x)=0 Sommando x ad entrambi i membri si ottiene:y=0 f(x)+x=x

(in alternativa, se possibile, si può isolare x a destra direttamente nella f(x))

E’ sufficiente allora studiare le intersezioni delle funzioni g(x)=f(x)+x et(x)=x

Convergenza: condizione sufficienteSe g(x) è derivabile in I = [a, b] e |g’(x)|<1, x є I

esiste un unico punto unito xPu є I

la successione dei valori x1..xn converge a xpu, per ogniapprossimazione iniziale x1 є I.

Condizione di arresto del programma: l’esecuzione terminaquando due approssimazioni consecutive differiscono, in valoreassoluto, di un valore più piccolo di ‘e’ (errore assoluto). Si considerail valore assoluto per garantire che la differenza xn+1-xn (ampiezzadell’intervallo) sia comunque sempre positiva.

ESERCIZIOGraficare la funzione = − − con Derive. Tramite il foglioelettronico (n=10 iterazioni) determina un valore approssimato dellaradice presente nell’intervallo [0,1] usando il metodo numerico del puntounito.

= − −− 2 − 1 = 0 − − 1 = (isolo la x a secondo membro)

g(x)= − − t(x)=

Verifica della condizione sufficiente di convergenza|g’(x)|<1, x є [0,1]

La condizione sufficiente di convergenza è verificata!Posso quindi cercare l’approssimazione della radice mediante il foglioelettronico.

Calcolo dell’approsimazione della radice

La soluzione esatta è x = 0.5505102572