Ecco a voi uno script per verificare l’osservabilità e la controllabilità delle matrici:
function oss_e_cntrl.m
function oss_e_cntrl(A,B,C)
n=length(A); % n=numero di colonne di A. Qui indica il numero di variabili dello stato (xdot=Ax+Bu)
cntrl=ctrb(A,B); % controllabilità
oss=obsv(A,C); % oservabilità
disp(‘oss_e_cntrl(A,B,C)’) % mostra come vengono chiamate le matrici variabili usateif rank(cntrl) == n
disp(sprintf(‘il sistema è controllabile: n=%d, rank(ctrb(A,B))=%d’,n,rank(cntrl)))
else
disp(sprintf(‘il sistema non è controllabile: n=%d, rank(ctrb(A,B))=%d’,n,rank(cntrl)))
endif rank(oss)== n
disp(sprintf(‘il sistema è osservabile: n=%d, rank(obsv(A,C))=%d’,n,rank(oss)))
else
disp(sprintf(‘il sistema non è osservabile: n=%d, rank(obsv(A,C))=%d’,n,rank(oss)))
end
SPIEGAZIONE
Lo script è molto facile:
- Innanzitutto calcolo i ranghi delle matrici controllabilità e osservabilità (queste matrici sono calcolate in modo automatico da matlab tramite i comandi ctrb e oss).
- Quindi verifico (tramite if) che il rango sia pari alla lunghezza n del vettore di stato.
- Infine stampa a schermo il risultato (dal ramo if o dall’else).
il comando sprintf permette di stampare nel testo le variabili indicate con %d, specificando successivamente le variabili o i valori con cui sostuitirle nella stringa.
sprintf puo’ essere associato ad una variabile a=sprintf(‘stringa da stampare’) che produce nell’esecuzione :
>> ans = stringa da stampare
Per evitare l’ans= annido il tutto in un disp (comando display) che stampa direttamente la stringa:
>> stringa da stampare
