Orion42 Blog

~IT made easy~

Matlab-it

[Matlab] – Script per verificare l’osservabilità e la controllabilità delle matrici

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 usate

if 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)))
end

if 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

Rispondi

Skip to content