Home > Università > Comandi frequenti del Matlab

Comandi frequenti del Matlab

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')
sys=10*s*(s-2)/(s+1)/(s+3)

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
num=sym2poly(10*s*(s-2))
den=sym2poly((s+1)*(s+3))

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)
y=beta(1)+beta(2)*exp(beta(3)*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);
plot(X,Y,'.',XX,YF)

Nota: per rappresentare i dati su scale logaritmiche basta usare al posto di plot le istruzioni loglog, semilogx e semilogy.

Home
Scrivimi

Torna su
Indietro

Visite dal 17 marzo 2004

Per visualizzare al meglio il sito si consiglia di utilizzare Mozilla Firefox oppure Internet Explorer versione 5 o sucessiva alla risoluzione di 800x600 con caratteri medi.