Anno Accademico 2007-2008
Corso di Analisi 1
per Ingegneria Elettronica
Laboratorio 2
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])
Soluzione
a) >>syms x
>>f=(x.ˆ2-1).ˆ0.5
>>subs(f,2)
a) >>syms x
>>g=(x-1)/(x+2)
>>subs(g,-2)
a) >>syms t
>>syms a >> syms v >>s=1+v*t+0.5*a*t.ˆ2
>>subs(s,[t a v],[2 -9.81 1])
1
Figura 1: Retta tangente in x0 = 0
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) =
Soluzione
>>syms x
>>f=(2*x-1)/(x+2)
>>ezplot(f)
>>limit(f,x,-2,’right’)
ans=
-inf
>>limit(f,x,-2,’left’)
ans=
inf
>>retta tangente(x,f,0);
>>grid on
2
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.
Soluzione
>>syms x
>>syms h
>>r=(cos(x+h)-cos(x))/h
>>limit(r,h,0)
ans=
-sin(x)
>>diff(cos(x))
ans=
-sin(x)
2.3
Differenziare la funzione f (y) = x2 sin(y) rispetto a y.
Soluzione
>>syms x;
>>syms y;
>>f=xˆ2*sin(y)
>>diff(f,y)
ans= xˆ2*cos(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 .
Soluzione
Strategia 1: modifichiamo la funzione in modo da disegnare ad ogni iterazione il valore del
residuo sul grafico, usando il comando hold on.
...
ff=subs(f,sol); %valuto il residuo
3
plot(k,abs(ff),’.’)
hold on
...
Strategia 2: salviamo il residuo in un vettore e facciamo il grafico in un secondo momento.
...
ff=subs(f,sol); %valuto il residuo
res(k+1)=abs(ff);
hold on
...
plot([1:k],res)
Osservazione: in Matlab gli indici partono da 1, non da 0 quindi devo utilizzare k+1.
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.
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
ffx=subs(fx,sol); %valuto la derivata nel punto
sol old=sol; %salvo la vecchia soluzione per confronto
sol=sol-ff/ffx; %aggiorno la soluzione
k=k+1; %aggiorno il contatore
ee(k)=abs(sol-sol old);
if (abs(ee(k))≤ toll) %se minore di toll
nit=k; %salvo il numero di iterazioni
break; %ed esco
end
end
disp(’Sol Newton’)
4
sol
disp(’Iterazioni Newton’)
nit
plot([1:k],ee)
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é?
Soluzione
>>syms x;
>>f=exp(x)-2*xˆ2;
fx=diff(f);
ezplot(fx)
Vediamo che la derivata si annulla vicino a 0.3 e 2:
>>[sol,nit]=newton(fx,0.3,10ˆ-8,200);
>>[sol,nit]=newton(fx,2,10ˆ-8,200);
Troviamo che la derivata si annulla in 0.35740295618139 e 2.15329236411035. Se utilizzo
questi due punti come x0 il metodo non converge nel numero massimo di iterazioni, questo
perché la retta tangente in questi punti è praticamente orizzontale e non interseca l’asse delle
x (o lo fa molto lontano).
5