Studio di sistemi lineari In Matlab un sistema lineare può essere definito in tre modi: sys=ss(A,B,C,D) definisce il sistema SYS dalle matrici A, B, C e D. sys=zpk(z,p,k) definisce il sistema mediante gli zeri, i poli ed il guadagno della sua funzione di trasferimento. sys=tf(num,den) definisce il sistema mediante i coefficienti del numeratore e del denominatore della sua funzione di trasferimento. Se ad esempio il sistema ha la funzione di trasferimento 10s(s-2)/(s+1)(s+3) possiamo usare le istruzioni zpk([0 2],[-1 -3],10) oppure tf([10 -20 0],[1 4 3]) (tenendo conto che la funzione equivale a (10s^2-20s)/(s^2+4s+3)). Dalla versione 6.0 del Matlab è possibile inserire la funzione di trasferimento in forma simbolica usando i comandi: s=tf('s') oppure s=zpk('s') Per visualizzare i diagrammi di Bode, di Nyquist, di Nichols e il luogo delle radici (positivo) del sistema usare rispettivamente i comandi: bode(sys) nyquist(sys) nichols(sys) rlocus(sys) Per attivare/disattivare lo zoom e la griglia nel grafico si usano i comandi zoom e grid. Per sovrapporre al diagramma di Nichols le curve della carta di Nichols usare il comando ngrid. margin(sys) calcola margine di ampiezza e margine di fase con le relative pulsazioni, evidenziandole sui diagrammi di Bode. evalfr(sys,s) valuta il valore (complesso) della funzione di trasferimento alla frequenza complessa s (usare abs e phase per calcolarne modulo e fase in radianti). Il comando nyquist del Matlab non visualizza le circonferenze all'infinito. E' possibile scaricare qui una versione modificata, che calcola anche il numero di poli Re > 0 della funzione a ciclo chiuso col criterio di Nyquist. I file .M contenuti nel file zip vanno inseriti in una cartella accessibile dal path di Matlab. Saranno quindi disponibili due nuovi comandi: nyquist1(num,den) disegna il diagramma di Nyquist del sistema la cui funzione di trasferimento è definita da num e den, che sono le matrici dei coefficienti del numeratore e del denominatore. lnyquist1(A,B,C,D) disegna il diagramma di Nyquist del sistema dato in forma di stato. Consiglio: se è installato il Symbolic Toolbox, è possibile utilizzare l'istruzione sym2poly per calcolare num e den nella seguente maniera: syms s Interpolazione e fitting di dati sperimentali X e Y siano due vettori riga contenenti le ascisse e le ordinate dei dati sperimentali. Per effettuare l'interpolazione mediante spline è necessario creare un vettore riga XX contenente i punti su cui si vuole valutare la funzione interpolata (più è fitto il vettore meglio verrà il grafico). Ad esempio XX=0:.1:10; se i dati sono contenuti nell'intervallo [0,10]. Quindi l'istruzione YY=spline(X,Y,XX); crea il vettore riga YY contenente le ordinate della funzione interpolata sui punti di XX. Per disegnarla basta eseguire l'istruzione plot(XX,YY), se si vogliono evidenziare i dati sperimentali eseguire invece plot(X,Y,'.',XX,YY). Per trovare i coefficienti del polinomio di grado N che meglio si adatta ai dati sperimentali eseguire l'istruzione P=polyfit(X,Y,N). Per valutare la funzione polinomiale trovata sull'intervallo definito da XX usare il comando YP=polyval(P,XX);. Quindi per disegnarla plot(XX,YP) (se non si vuole cancellare il grafico precedente eseguire prima hold). Eseguire un fitting non lineare è un po' più complicato e deve essere installato lo Statistics Toolbox. La funzione a cui si vogliono "fittare" i dati deve essere definita in un file .M nella forma f(beta,x), dove beta è la matrice dei parametri che si devono determinare col fitting. Ad esempio se la funzione è y=a+b*exp(c*x) possiamo così scrivere il file exp1.m: function y=exp1(beta,x) Quindi eseguiamo il comando beta=nlinfit(X',Y','exp1',beta0). Ho usato X' e Y' perchè questa funzione accetta vettori colonna. beta0 è un vettore con la stima iniziale dei parametri (nel nostro caso di dimensione 3). Se si ha errore o il fitting non converge riprovare con un beta0 diverso. Il vettore beta conterrà i parametri determinati dal fitting. Per disegnare la funzione determinata sull'intervallo definito da XX possiamo eseguire i comandi: YF=exp1(beta,XX); Nota: per rappresentare i dati su scale logaritmiche basta usare al posto di plot le istruzioni loglog, semilogx e semilogy. | ||||
|