INTRODUZIONE A MATLAB Matrix Laboratory Introduzione Linguaggio di programmazione per applicazioni scientifiche e numeriche Vasto set di funzioni predefininte Interprete di comandi Possibilità di scrivere nuove funzioni Libreria di Toolbox per svariate applicazioni (analisi dei sistemi, analisi e sintesi di controllori, analisi dei segnali, ) L interfaccia utente di Matlab: la Command Window dà accesso diretto all interprete mediante scrittura diretta dei comandi al prompt» Matlab come calcolatrice E la modalità di impiego più semplice (valutare espressioni numeriche) Esempio: per calcolare 4 + sin (0.π) + e è sufficiente digitare al prompt»» 4+sqrt() (sin(0.*pi))^+exp() 1.4578 Il risultato viene scritto nella variabile ans Definizioni di variabili E possibile definire variabili e espressioni non numeriche più complesse Esempio:» a=4; b=;» a*b 8 Per conoscere le variabili definite e le loro dimensioni» whos Name Size Bytes Class A 1x1 8 double array Ans 1x1 8 double array b 1x1 8 double array Grand total is 3 elements using 4 bytes oppure» who Your variables are: a ans b Per cancellare una variabile (es. a)» clear a Per cancellare tutte le variabili» clear all Funzioni predefinite (di uso più comune) Funzioni trigonometriche: sin, cos, tan, acos, asin, atan, Esponenziale e logaritmo: exp, log, log10, sqrt, Numeri complessi: abs (modulo), angle (fase), real (parte reale), imag (parte immaginaria), Esempi: Calcolare il modulo di + 3 i» abs(+3*i) 3.6056 + 3i Calcolare 0log10 4 + 6i» 0*log10(abs((+3*i)/(4+6*i))) 6.006 Una funzione fondamentale! HELP help seguito dal nome di una funzione restituisce una descrizione e la sintassi d uso della medesima. Esempio:
» help exp fornisce una descrizione sull uso del comando exp (esponenziale in base e) help da solo restituisce l elenco di tutte le categorie (insiemi di funzioni) presenti in Matlab. help seguito dal nome di una categoria restituisce l elenco di tutte le funzioni presenti n quella categoria. Esempio:» help elmat restituisce l elenco di tutte le funzioni elementari implementate in Matlab per l algebra delle matrci Definizione di matrici Come si definisce una matrice in Matlab? 1 Esempio: definire la matrice x 3 4» A=[1 ;3 4] 1 3 4 Come si accede agli elementi di una matrice? Indici riga i e colonna j dell elemento di interesse A(i, j)» A(1,) Elementi di una colonna j A(:,j) (: = tutte le righe)» A(:,) 4 Elementi di una riga i A(i,:) (: = tutte le colonne)» A(1,:) 1 Operazioni elementari sulle matrici (» help elmat) Sono definiti gli operatori +,, * e ^ Matrice trasposta» A' 1 3 4 Matrice inversa» inv(a).0000 1.0000 1.5000 0.5000 Matrice identità (» help eye)» eye(size(a)) 1 0 0 1 Matrice nulla (» help zeros)» zeros(size(a)) 0 0 0 0 Determinante» det(a) Autovalori
» eig(a) 0.373 5.373 Autovettori (» help eig)» [V,D]=eig(A) V = 0.846 0.4160 0.5658 0.9094 D = 0.373 0 0 5.373 Alcuni comandi che useremo (» help nome comando ) abs clear close dlsim eig eye figure grid hold length lsim ones plot poly roots size xlabel ylabel zoom Dato il sistema a tempo discreto x(t+1) = A x(t) + b u(t) y(t) = c x(t) + d u(t) dove 0.8 1 1 0.5 0.6 b = 1 c = [ 1 1 1] d = 0 1 0.5 1 determinare l equilibrio corrispondente a ingresso costante pari a (u(t) = t) e studiarne la stabilità. % puliamo e definiamo le matrici e l ingresso» clear all;» A=[ 0.8 1 ; 0.5 0.6 ; 1 0.5]» b=[1 1 1]» c=[1 1 1]» d=0» u= % equilibrio e uscita di equilibrio = y = cx + du % x ( I A) bu» x=inv(eye(size(a)) A)*b*u 0.809 0.7514 1.948» y=c*x+d*u y =.8555 % stabilità: calcolo degli autovalori e del loro modulo» autoval=eig(a) autoval = 0.4755 + 0.3641i 0.4755 0.3641i 0.509» abs(autoval) 0.5989 0.5989 0.509 % (modulo inferiore a 1 stabilità asintotica) % altro metodo (radici del polinomio caratteristico)» policar=poly(a)
policar = 1.0000 0.7000 0.100 0.0900 3 % cioè: A( λ) = λ + 0.7λ + 0.1λ 0. 09 % gli autovalori sono le radici del polinomio caratteristico A( λ)» autov=roots(policar) % Notare che sono uguali al vettore autoval! % simulazione del sistema» T=[0:1:0] ;» U=*ones(size(T));» X0=[0 0 0] ;» [Y,X]=dlsim(A,b,c,d,U,X0); % plot della simulazione: variabili di stato» figure; hold on; grid; zoom; xlabel('tempo t'); ylabel('variabili di stato');» plot(t,x(:,1),'g');» plot(t,x(:,),'r');» plot(t,x(:,3),'b'); % il vettore X tende verso il vettore di equilibrio x (il sistema è asintoticamente stabile) 0.809 0.7514 1.948 % le oscillazioni sono dovute alla presenza di autovalori complessi % plot della simulazione: variabile di uscita» figure; hold on; grid; zoom; xlabel('tempo k'); ylabel('uscita');» plot(t,y); % Y tende verso l uscita di equilibrio y % un altro sistema a tempo discreto 1 1 1 1 0 b = 1 c = [ 0 1 ] d = 0 u(t) = t 1 1 % equilibrio e uscita di equilibrio 8 4 y = 10 6 % stabilità: calcolo degli autovalori e del loro modulo (modulo maggiore di 1 instabilità) 1.1304 1.1304 autoval =.565 + 1.0434i abs (autoval) = 1.8811.565.0434i 1.8811 % simulazione del sistema nell intervallo [0, 0] partendo da una condizione iniziale prossima ma diversa da x % (p.e. X0 = [ 7.9 4.1 5.9] ); % plot della simulazione: variabili di stato e uscita; il vettore X diverge da x (il sistema è instabile) % simulazione del sistema nell intervallo [0, 10] partendo da una condizione X0 iniziale pari a x % il plot della simulazione mostra che variabili di stato e uscita rimangono costanti: % partendo dalla condizione di equilibrio, anche se instabile, vi si rimane! Dato il sistema a tempo continuo x (t) = A x(t) + b u (t) y (t) = c x(t) + d u(t) dove
1 0 10 b = 1 c = [ 1 0 1] d = 0 0 0 1 determinare l equilibrio corrispondente a ingresso costante pari a 1 (u(t) = 1 t) e studiarne la stabilità. % puliamo e definiamo le matrici e l ingresso» A=[ ; 0 10;0 0 ]» b=[1 1 1]» c=[1 0 1]» d=0» u=1 % equilibrio e uscita di equilibrio % A bu y = cx + du» x= inv(a)*b*u 0.7308 0.1154 0.0769» y=c*x+d*u y = 0.6538 % stabilità: calcolo gli autovalori e ne osservo la parte reale» autoval=eig(a) autoval =.0000.0000 +10.0000i.0000 0.0000i % parte reale di tutti gli autovalori strettamente negativa (» real(autoval) ) asintotica stabilità % altro metodo (radici del polinomio caratteristico)» policar=poly(a) policar = 1 5 108 104 3 % cioè: A ( λ) = λ + 5λ + 108λ + 104 % gli autovalori sono le radici del polinomio caratteristico A( λ)» autov=roots(policar) % Notare che sono pari al vettore autoval % simulazione del sistema» T=[0:0.01:5] ;» U=1*ones(size(T));» X0=[0 0 0] ;» [Y,X]=lsim(A,b,c,d,U,T,X0); % plot della simulazione: variabili di stato» figure; hold on; grid; zoom; xlabel('tempo t'); ylabel('variabili di stato');» plot(t,x(:,1),'g');» plot(t,x(:,),'r');» plot(t,x(:,3),'b'); % il vettore X tende verso il vettore di equilibrio x (il sistema è asintoticamente stabile) 0.7308 0.1154 0.0769 % le oscillazioni sono dovute alla presenza di autovalori complessi % plot della simulazione: variabile di uscita» figure; hold on; grid; zoom; xlabel('tempo k'); ylabel('uscita');
» plot(t,y); % Y tende verso l uscita di equilibrio y % un altro sistema a tempo continuo 3 1 b = 4 c = [ 1 0] d = 0 u(t) = 1 t 1 % equilibrio e uscita di equilibrio 0.1538 y = 0.1538 0.3846 % stabilità: calcolo gli autovalori e ne osservo la parte reale + 3.4641i autoval = 3.4641i % parte reale di tutti gli autovalori strettamente negativa (» real(autoval) ) asintotica stabilità % simulazione del sistema nell intervallo [0, 8], partendo da condizione iniziale qualsiasi % plot della simulazione: variabili di stato % il vettore X tende verso il vettore di equilibrio x (il sistema è asintoticamente stabile) % le oscillazioni sono dovute alla presenza di autovalori complessi % plot della simulazione: variabile di uscita % Y tende verso l uscita di equilibrio y % plot nel piano di stato» figure; hold on; xlabel('x_1'); ylabel('x_');» plot(x(:,1),x(:,)); % traiettoria» plot(x(1),x(),'*'); % equilibrio % cambiare la condizione iniziale, ripetere la simulazione e sovrapporre nel piano di stato % la nuova simulazione alla vecchia (data l asinotica stabilità del sistema, si tende verso l equilibrio % da ogni condizione iniziale Studiare la stabilità del sistema a tempo CONTINUO p 0 p 0 p p al variare del parametro p nell intervallo [, 1]. % pulizia % autovalori al variare del parametro p» param=[];» autoval=[];» for p=:0.1:1, A=[ 1 p ; 0 p; 0 p p]; param=[param p]; autoval=[autoval eig(a)]; end;» figure; hold on; grid; zoom; xlabel('parametro p'); ylabel('parte reale degli autovalori');» plot(param,real(autoval)); % per p > 0 tutti gli autovalori hanno parte reale negativa il sistema è asintoticamente stabile % ripeti l esempio a tempo DISCRETO % la frontiera di stabilità è il cerchio di raggio unitario» figure; hold on; grid; zoom; xlabel('parametro p'); ylabel('modulo degli autovalori');» plot(param,abs(autoval)); % esiste sempre un autovalore di modulo maggiore di 1 il sistema è instabile per ogni valore di p