Laboratorio 2 Calcolo simbolico, limiti e derivate. Metodo di Newton.

Anno Accademico 2007-2008
Corso di Analisi 1
per Ingegneria Elettronica
Laboratorio 2
Calcolo simbolico, limiti e derivate. Metodo di
Newton.
1
Introduzione al Toolbox simbolico
Con le routines del Symbolic Math Toolboxes è possibile utilizzare Matlab con una sintassi
molto simile alla simbologia dell’analisi.
É possibile definire variabili simboliche con il comando sym:
>>x=sym(’x’)
o anche specificando il tipo di variabile:
>>x=sym(’x’,’real’)
Si possono usare, con lo stesso effetto, i comandi
>>syms x
>>syms x real
Ora possiamo definire funzioni con queste variabili simboliche:
>>f=xˆ2-2*x+1
Digitando whos osserviamo che abbiamo creato due sym object. Per ottenere una visualizzazione più leggibile delle funzioni inserite si può utilizzare il comando pretty:
>>pretty(f)
x2 -2x+ 1
Il comando subs serve per la sostituzione simbolica, cioè per assegnare un valore ad una
variabile simbolica. Supponiamo di voler valutare la funzione f definita precedentemente per
x = 1: possiamo utilizzare il comando subs in due modi
• >>subs(f,1)
• >>subs(f,’x’,1)
1
2
Grafici di funzioni, limiti, derivate
Definiamo la variabile simbolica x e la seguente funzione:
f (x) =
2x2
−1
x2
con i seguenti comandi:
>>x=sym(’x’;)
>>f=2*xˆ2/(xˆ2-1)
È possibile disegnare il grafico di questa funzione senza doverla valutare in un numero discreto
di punti, usando il comando ezplot
>>ezplot(f)
che disegna la funzione sull’intervallo standard [−2π, 2π]; altrimenti si può specificare l’intervallo:
>>ezplot(f,[-5,5])
Dopo avere definito la variabile simbolica e una funzione possiamo calcolare i limiti con il
comando limit. Definiamo f (x) = tan(x), e calcoliamo il limite per x → π/2:
>>limit(f,x,pi/2)
Con Matlab possiamo calcolare il limite sinistro e destro:
>>limit(f,x,pi/2,’left’)
ans=
inf
>>limit(f,x,pi/2,’right’)
ans=
-inf
e anche il limite per x → ∞, digitando limit(f,x,inf).
Inoltre con il comando diff possiamo calcolare le derivate di funzioni, ad esempio possiamo
calcolare la derivata della tangente, definita nell’esercizio precedente:
>>fx=diff(f,x)
fx=
1+tan(x)ˆ2
3
Il metodo di Newton
Il metodo di Newton è un metodo iterativo per la ricerca degli zeri di una funzione che
costruisce una successione di valori x(n) approssimando localmente la funzione con la sua
retta tangente: a partire da un valore iniziale x(0) si costruisce la retta tangente in quel
punto, e si calcola il punto x(1) in cui tale retta interseca l’asse y = 0, quindi si costruisce la
retta tangente in x(1) e si itera.
L’espressione della retta tangente in un punto x(n) a f è la seguente:
2
Figura 1: Alcune iterazioni del metodo di Newton
y(x) = f (x(n) ) + f 0 (x(n) )(x − x(n) )
(1)
Cerchiamo il valore di x per cui la retta tangente interseca l’asse y = 0, quindi poniamo
y = 0 e otteniamo la successiva approssimazione della soluzione, x(n+1) :
x(n+1) = x(n) −
f (x(n) )
f 0 (x(n) )
(2)
purchè f 0 (x(n) ) 6= 0.
La 2 è l’espressione di un’iterazione generica del metodo di Newton.
È necessario stabilire un criterio d’arresto che decida quando la soluzione è stata approssimata
con la precisione desiderata. Esistono diverse scelte:
• criterio basato sul residuo
• confronto fra due iterazioni successive
Il criterio basato sul residuo arresta il metodo quando il modulo del residuo f (x(n) ) è
inferiore ad una tolleranza fissata:
|f (x(n) )| ≤ toll
Si può anche arrestare il metodo quando la distanza fra x(n+1) ed x(n) è inferiore ad una
tolleranza fissata:
|x(n+1)−x
(n)
| ≤ toll
Approfondimento: validità del criterio d’arresto
Osservando la figura 2 si nota che entrambi i criteri di arresto possono fallire. Nella situazione
a) in cui f 0 (xe ) << 1 il test sul residuo non è adeguato, infatti f (x(n) ) può essere molto basso
con x(n) lontano dalla soluzione. Nella situazione b) in cui f 0 (xe ) >> 1 invece due iterazioni
successive possono essere vicine con f (x(n) ) ancora molto diverso da 0.
3
Figura 2: Confronto fra i criteri d’arresto
Figura 3: Algoritmo
Scriviamo una funzione che implementi il metodo di Newton sfruttando le funzioni del
Toolbox simbolico di Matlab. Deve ricevere in ingresso f , x0 , la tolleranza per l’arresto, e un
numero massimo di iterazioni per cui arrestare il metodo anche se la soluzione non è stata
trovata. Vogliamo che restituisca la soluzione ed il numero di iterazioni effettuate.
4
function [sol,nit]=newton(f,x0,toll,maxit);
%———-newton————
fx=diff(f); % calcolo la derivata
nit=maxit; % nit: numero di iterazioni effettuate; lo cambio quando esco dal ciclo
sol=x0; % inizializzo la soluzione
k=0; %contatore
while (k¡maxit) % itero fino a raggiungere maxit
ff=subs(f,sol); %valuto il residuo
if (abs(ff)≤toll) %se minore di toll
nit=k; %salvo il numero di iterazioni
break; %ed esco
end
ffx=subs(fx,sol); %valuto la derivata nel punto
sol=sol-ff/ffx; %aggiorno la soluzione
k=k+1; %aggiorno il contatore
end
disp(’Sol Newton’)
sol
disp(’Iterazioni Newton’)
nit
Utilizziamo la funzione scritta per calcolare lo zero di f = x − cos(x). Disegnando il
grafico, ad esempio con ezplot vediamo che la soluzione esatta si trova fra 0 e π; scegliamo
il punto x0 di conseguenza.
>>syms x;
>>f=x-cos(x);
>>[sol,nit]=newton(f,0,10ˆ-8,200);
Otteniamo la soluzione sol=0.7391 con solo 4 iterazioni. Verifichiamo la soluzione sostituendola nella funzione e osservando che otteniamo (circa) zero:
>>subs(f,sol).
Se diminuiamo la tolleranza fino a 10−16 otteniamo la soluzione con 5 iterazioni.
Consideriamo ora un’altra funzione: g(x) = ex − 2x2 . Questa funzione ha tre zeri, uno
negativo vicino a -0.5, e due positivi. Osserviamo che partendo da valori diversi di x0 il
metodo converge a soluzioni diverse:
con x0 = 0.3 troviamo -0.53983527690282
con x0 = 0.4 troviamo 2.61786661306681
5
con x0 = 0.7 troviamo 1.48796206549818
con x0 = 2.2 troviamo 2.61786661306681, ma con x0 = 2.1 troviamo di nuovo -0.53983527690282!
Questo comportamento dipende dal fatto che abbiamo cambi di segno della derivata prima e
seconda nell’intervallo che contiene le tre soluzioni.
Esercizi
1
Introduzione al Toolbox simbolico
Dichiarare le variabili simboliche necessarie e definire le seguenti funzioni:
√
a) f (x) = x2 − 1
b) g(x) =
x−1
x+2
1
c) s(t) = 1 + vt + at2
2
Visualizzare le funzioni con il comando pretty.
Valutarle nei seguenti punti:
a) x = 2
b) x = −2
c) t = 2, a = −9.81, v = 1 (Suggerimento: usare la sintassi subs(f,[t a v],[...
...]))
...
Osservare che è possibile valutare le funzioni anche su un vettore di punti ad esempio con il
comando
>>ff=subs(f,[0:0.1:2])
2
Grafici di funzioni, limiti, derivate
2.1
Definire la funzione
2x − 1
x+2
Disegnarne il grafico, quindi calcolarne il limite destro e sinistro per x → −2 ed il limite per
x → ∞. Utilizzando la funzione retta tangente calcolare e disegnare la retta tangente nel
punto x0 = 0.
f (x) =
6
2.2
Definire il rapporto incrementale
cos(x + h) − cos(x)
h
dopo avere dichiarato le variabile simboliche x e h. Utilizzarlo per calcolare la derivata di
cos(x) attraverso il comando limit.
Verificare il risultato ottenuto utilizzando diff.
2.3
Differenziare la funzione f (y) = x2 sin(y) rispetto a y.
3
Il metodo di Newton
3.1
Costruire un grafico del modulo del residuo corrispondente ad ogni iterazione per la ricerca
dello zero della funzione x − cos(x) a partire da x0 = 0, con una tolleranza di 10−8 .
3.2
Modificare la funzione newton utilizzando come criterio di arresto invece del test sul residuo
la distanza fra due iterazioni successive. Rappresentare in un grafico l’andamento di questa
quantità per ogni iterazione per la funzione dell’esercizio precedente.
3.3
Sia data la funzione f = ex − 2x2 ; calcolare i due zeri della sua derivata prima ed utilizzarli
come valori iniziali x0 nella ricerca degli zeri di f . Cosa succede? Perché?
7