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