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 1. Bisezione 2. Secanti (o corde) 3. 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 sen x - loge x Posto: x1=a=1f(x1)=0,84>0 x2=b=3 f(x2)=-0,96<0 1,0 0,8 0,6 0,4 0,2 0,0 -0,2 -0,4 -0,6 -0,8 -1,0 0,0 0,5 1,0 1,5 2,0 2,5 3,0 3,5 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 sen x - loge x 0,4 0,2 0,0 -0,2 -0,4 -0,6 Si considera il punto medio x4=2,5 f(x4)=-0,318<0 -0,8 -1,0 1,6 1,8 2,0 2,2 2,4 2,6 2,8 3,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]. 3,2 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 Output if abs(y(i+2))<1E-04 ind=i; break end end display('ascissa=') a display('ordinata=') y(ind+2) display('numero di iterazioni=') ind a= ascissa= 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. ba x1 a f (a ) f (b) f (a) x1 sostituisce a nella definizione dell’intervallo. SECANTI Si procede poi calcolando xn+1, che sostituisce xn nella definizione dell’intervallo: b xn xn1 xn f (b) f ( xn ) f ( xn ) Questo procedimento è corretto se: 1. f(a)>f(b) e la concavità è verso il basso, come nell’esempio 2. f(a)<f(b) e la concavità è verso l’alto Altrimenti, se: 3. f(a)>f(b) e la concavità è verso l’alto 4. 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)); Output ascissa= ans = 2.2191 ordinata= if abs(y(i))<1E-04 ind=i; break end end display('ascissa=') x(i) display('ordinata=') y(i) display('numero di iterazioni=') ind ans = 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: 1. f(a)>f(b) e la concavità è verso il basso, come nell’esempio 2. f(a)<f(b) e la concavità è verso l’alto Altrimenti, se: 3. f(a)>f(b) e la concavità è verso l’alto 4. 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)); Output ascissa= ans = 2.2191 ordinata= if abs(y(i))<1E-04 ind=i; break end end display('ascissa=') x(i) display('ordinata=') y(i) display('numero di iterazioni=') ind ans = -1.9146e-006 numero di iterazioni= ind = 4