METODI NUMERICI PER LA RICERCA DEGLI ZERI DI

  • Slides: 16
Download presentation
METODI NUMERICI PER LA RICERCA DEGLI ZERI DI UNA FUNZIONE Prof. Stefano Gori Liceo

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],

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;

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

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)

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]

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: x

BISEZIONE Problema: ricerca degli zeri di y= sen x – log x Posto: x 1=a=1 f(x 1)=0, 84>0 x 2=b=3 f(x 2)=-0, 96<0 Si considera il punto medio x 3=2 f(x 3)=0, 22>0 Siccome f(x 3) è positiva come f (x 1), x 3 sostituisce x 1 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:

BISEZIONE Problema: ricerca degli zeri di y= sen x – log x Abbiamo quindi: x 2=b=3 f(x 2)=-0, 96<0 x 3=2 f(x 3)=0, 22>0 Si considera il punto medio x 4=2, 5 f(x 4)=-0, 318<0 Siccome f(x 4) è negativa come f (x 2), x 4 sostituisce x 2 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

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

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))<1 E-04 ind=i; break end display('ascissa=') a display('ordinata=') y(ind+2) display('numero di iterazioni=') ind a= ascissa= 2. 2190 ordinata= ans = -9. 5557 e-006 numero di iterazioni= ind = 14

SECANTI Problema: ricerca degli zeri di y= sen x – log x Posto: a=1

SECANTI Problema: ricerca degli zeri di y= sen x – log x Posto: a=1 f(a) b=3 f(b) Si costruisce la secante per (x 1, f(x 1)) e (b, f(b)) e se ne determina il punto x 1 di intersezione con l’asse x. x 1 sostituisce a nella definizione dell’intervallo.

SECANTI Si procede poi calcolando xn+1, che sostituisce xn nella definizione dell’intervallo: Questo procedimento

SECANTI Si procede poi calcolando xn+1, che sostituisce xn nella definizione dell’intervallo: 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

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))<1 E-04 ind=i; break end display('ascissa=') x(i) display('ordinata=') y(i) display('numero di iterazioni=') ind ans = 1. 9643 e-005 numero di iterazioni= ind = 6

TANGENTI Problema: ricerca degli zeri di y= sen x – log x Posto: x

TANGENTI Problema: ricerca degli zeri di y= sen x – log x Posto: x 1=a=1 f(x 1) x 2=b=3 f(x 2) Si costruisce la tangente per (x 2, f(x 2)) e se ne determina il punto x 3 di intersezione con l’asse x. x 3 sostituisce x 2 nella definizione dell’intervallo.

TANGENTI Si procede poi calcolando xn+1, che sostituisce xn nella definizione dell’intervallo, sempre dalla

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 5 B A.

ESEMPIO CON MATLAB realizzato da Macchini Matteo e Castiglia Dario, classe 5 B 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))<1 E-04 ind=i; break end display('ascissa=') x(i) display('ordinata=') y(i) display('numero di iterazioni=') ind ans = -1. 9146 e-006 numero di iterazioni= ind = 4