METODI NUMERICI PER LA RICERCA DEGLI ZERI DI UNA FUNZIONE Prof. Stefano Gori Liceo Scientifico Salutati – Montecatini Terme
TEOREMA DI ESISTENZA Data una funzione f continua nell’intervallo chiuso e limitato [a;b], se negli estremi dell’intervallo la funzione assume valori di segno opposto allora esiste almeno un punto interno ad [a;b] in cui f(x)=0.
PRIMO TEOREMA DI UNICITÀ È data f(x) continua in [a;b]e derivabile in (a;b). Per f(x) sussistano le ipotesi del teorema di esistenza. Se f’(x)0 in (a;b), allora lo zero è unico.
SECONDO TEOREMA DI UNICITÀ È data f(x) continua in [a;b] e derivabile due volte in (a;b). Per f(x) sussistano le ipotesi del teorema di esistenza. Se f’’(x) non cambia segno in (a;b), allora lo zero è unico.
METODI Bisezione Secanti (o corde) Tangenti (o metodo di Newton)
Problema: ricerca degli zeri di y= sen x – log x In [1;3] sono verificate le ipotesi del secondo teorema di unicità.
BISEZIONE Problema: ricerca degli zeri di y= sen x – log x Posto: x1=a=1f(x1)=0,84>0 x2=b=3 f(x2)=-0,96<0 Si considera il punto medio x3=2 f(x3)=0,22>0 Siccome f(x3) è positiva come f (x1), x3 sostituisce x1 nella definizione dell’intervallo. Al posto di [1;3], a questo passo, consideriamo pertanto l’intervallo [2;3].
BISEZIONE Problema: ricerca degli zeri di y= sen x – log x Abbiamo quindi: x2=b=3 f(x2)=-0,96<0 x3=2 f(x3)=0,22>0 Si considera il punto medio x4=2,5 f(x4)=-0,318<0 Siccome f(x4) è negativa come f (x2), x4 sostituisce x2 nella definizione dell’intervallo. Al posto di [2;3], a questo passo, consideriamo pertanto l’intervallo [2;2,5].
BISEZIONE Problema: ricerca degli zeri di y= sen x – log x Sapevamo all’inizio che lo zero era compreso in [1;3]. Dopo due passi, sappiamo che lo zero è compreso in [2;2,5]. A ogni passo, l’ampiezza dell’intervallo si dimezza (bisezione). Problema: quando ci si ferma? Il processo si può arrestare quando l’ampiezza dell’intervallo è minore di un valore prefissato (ad esempio, un milionesimo). Per le funzioni a forte pendenza, fissato arbitrario e positivo, ci si può fermare quando |f(x)|< .
ESEMPIO CON MATLAB x(1)=1; a=x(1); x(2)=3; b=x(2); y(1)=sin(x(1))-log(x(1)); fa=y(1); y(2)=sin(x(2))-log(x(2)); fb=y(2); for i=1:1000 x(i+2)=(a+b)/2; y(i+2)=sin(x(i+2))-log(x(i+2)); if y(i+2)*fa>0 a=x(i+2); fa=y(i+2); end if y(i+2)*fa<0 b=x(i+2); fb=y(i+2); end if abs(y(i+2))<1E-04 ind=i; break display('ascissa=') a display('ordinata=') y(ind+2) display('numero di iterazioni=') ind Output ascissa= a = 2.2190 ordinata= ans = -9.5557e-006 numero di iterazioni= ind = 14
SECANTI Problema: ricerca degli zeri di y= sen x – log x Posto: a=1f(a) b=3 f(b) Si costruisce la secante per (x1,f(x1)) e (b, f(b)) e se ne determina il punto x1 di intersezione con l’asse x. x1 sostituisce a nella definizione dell’intervallo.
SECANTI Si procede poi calcolando xn+1, che sostituisce xn nella definizione dell’intervallo: Questo procedimento è corretto se: f(a)>f(b) e la concavità è verso il basso, come nell’esempio f(a)<f(b) e la concavità è verso l’alto Altrimenti, se: f(a)>f(b) e la concavità è verso l’alto f(a)<f(b) e la concavità è verso il basso rimane fisso l’estremo sinistro dell’intervallo ed è il destro ad avvicinarsi allo zero.
ESEMPIO CON MATLAB a=1; b=3; fa=sin(a)-log(a); fb=sin(b)-log(b); x(1)=a-fa*(b-a)/(fb-fa); for i=1:1000 y(i)=sin(x(i))-log(x(i)); x(i+1)=x(i)-y(i)*(b-x(i))/(fb-y(i)); if abs(y(i))<1E-04 ind=i; break end display('ascissa=') x(i) display('ordinata=') y(i) display('numero di iterazioni=') ind Output ascissa= ans = 2.2191 ordinata= 1.9643e-005 numero di iterazioni= ind = 6
TANGENTI Problema: ricerca degli zeri di y= sen x – log x Posto: x1=a=1f(x1) x2=b=3 f(x2) Si costruisce la tangente per (x2, f(x2)) e se ne determina il punto x3 di intersezione con l’asse x. x3 sostituisce x2 nella definizione dell’intervallo.
TANGENTI Si procede poi calcolando xn+1, che sostituisce xn nella definizione dell’intervallo, sempre dalla stessa parte destra. Questo procedimento è corretto se: f(a)>f(b) e la concavità è verso il basso, come nell’esempio f(a)<f(b) e la concavità è verso l’alto Altrimenti, se: f(a)>f(b) e la concavità è verso l’alto f(a)<f(b) e la concavità è verso il basso rimane fisso l’estremo destro dell’intervallo ed è il sinistro ad avvicinarsi allo zero.
ESEMPIO CON MATLAB realizzato da Macchini Matteo e Castiglia Dario, classe 5B A.S. 2007/2008 Liceo Scientifico Salutati – Montecatini T. a=1 b=3 fb=sin(b)-log(b); m(1)=cos(b)-(1/b); x(1)=(m(1)*b-fb)/m(1); for i=1:1000 y(i)=sin(x(i))-log(x(i)); m(i+1)=cos(x(i))-(1/(x(i))); x(i+1)=(m(i)*(x(i))-(y(i)))/(m(i)); if abs(y(i))<1E-04 ind=i; break end display('ascissa=') x(i) display('ordinata=') y(i) display('numero di iterazioni=') ind Output ascissa= ans = 2.2191 ordinata= -1.9146e-006 numero di iterazioni= ind = 4