Calcolare Matrici A B C D Su Matlab Ss

Calcolatore Matrici A B C D per MATLAB State-Space

Inserisci i parametri del tuo sistema dinamico per calcolare automaticamente le matrici di stato, ingresso, uscita e feedthrough per la rappresentazione in spazio di stato su MATLAB.

Guida Completa al Calcolo delle Matrici A B C D in MATLAB per Sistemi in Spazio di Stato

La rappresentazione in spazio di stato è un metodo fondamentale per descrivere sistemi dinamici lineari tempo-invarianti (LTI). In MATLAB, questa rappresentazione utilizza quattro matrici fondamentali: A (matrice di stato), B (matrice di ingresso), C (matrice di uscita) e D (matrice di feedthrough).

1. Fondamenti Teorici delle Matrici State-Space

Un sistema dinamico lineare può essere descritto dalle seguenti equazioni:

ẋ(t) = A x(t) + B u(t)
y(t) = C x(t) + D u(t)

Dove:

  • x(t): vettore di stato (n×1)
  • u(t): vettore di ingresso (m×1)
  • y(t): vettore di uscita (p×1)
  • A: matrice di stato (n×n)
  • B: matrice di ingresso (n×m)
  • C: matrice di uscita (p×n)
  • D: matrice di feedthrough (p×m)

2. Metodi per la Determinazione delle Matrici

Esistono diversi approcci per determinare le matrici A, B, C, D:

  1. Metodo Diretto: Derivazione dalle equazioni differenziali del sistema
  2. Forma Canonica Controllabile: Particolarmente utile per sistemi SISO
  3. Forma Canonica Osservabile: Alternativa alla forma controllabile
  4. Forma Canonica Modale: Basata su autovalori e autovettori
  5. Forma Canonica di Jordan: Per sistemi con autovalori multipli

3. Implementazione in MATLAB

MATLAB offre diverse funzioni per lavorare con la rappresentazione in spazio di stato:

> A = [0 1; -2 -3];
> B = [0; 1];
> C = [1 0];
> D = 0;
> sys = ss(A,B,C,D);

La funzione ss crea un oggetto che rappresenta il sistema in spazio di stato. È possibile convertire tra diverse rappresentazioni:

Funzione MATLAB Descrizione Esempio di Utilizzo
ss2tf Converte da spazio di stato a funzione di trasferimento [num,den] = ss2tf(A,B,C,D,1)
tf2ss Converte da funzione di trasferimento a spazio di stato [A,B,C,D] = tf2ss(num,den)
ss2zp Converte da spazio di stato a zeri/poli/guadagno [z,p,k] = ss2zp(A,B,C,D)
canon Trasforma in forme canoniche [Ab,Bb,Cb,T,k] = canon(sys,'modal')
ctrb/obsv Calcola matrici di controllabilità/osservabilità Co = ctrb(A,B); Ob = obsv(A,C)

4. Analisi della Stabilità

La stabilità di un sistema in spazio di stato può essere analizzata attraverso:

  • Autovalori della matrice A: Il sistema è asintoticamente stabile se tutti gli autovalori hanno parte reale negativa
  • Matrice di Lyapunov: Risolvendo l’equazione A’P + PA = -Q per una matrice Q definita positiva
  • Criterio di Routh-Hurwitz: Applicabile anche alla rappresentazione in spazio di stato
> eigenvalues = eig(A);
> if all(real(eigenvalues) < 0)
  disp(‘Sistema asintoticamente stabile’);
> else
  disp(‘Sistema instabile’);
> end

5. Controllabilità e Osservabilità

Due proprietà fondamentali dei sistemi in spazio di stato:

Controllabilità

Un sistema è completamente controllabile se la matrice di controllabilità:

Co = [B AB A²B … An-1B]

ha rango pari a n (ordine del sistema).

Osservabilità

Un sistema è completamente osservabile se la matrice di osservabilità:

Ob = [C; CA; CA²; …; CAn-1]

ha rango pari a n.

6. Discretizzazione dei Sistemi Continui

Per implementare sistemi continui su calcolatori digitali, è necessario discretizzare le equazioni. MATLAB offre la funzione c2d:

> sys_d = c2d(sys, Ts, ‘zoh’);
> [Ad,Bd,Cd,Dd] = ssdata(sys_d);

Dove 'zoh' indica il mantenimento dell’ordine zero (zero-order hold), il metodo di discretizzazione più comune.

Metodo di Discretizzazione Descrizione Accuratezza Stabilità
Zero-Order Hold (zoh) Mantiene costante l’ingresso tra campioni Buona per Ts piccoli Preserva stabilità per Ts sufficientemente piccolo
Tustin (bilineare) Mappatura bilineare s→(2/Ts)(z-1)/(z+1) Molto accurata Preserva sempre la stabilità
Forward Euler Approssimazione in avanti: s→(z-1)/Ts Bassa per Ts grandi Può diventare instabile
Backward Euler Approssimazione all’indietro: s→(z-1)/zTs Media Preserva stabilità

7. Applicazioni Pratiche

La rappresentazione in spazio di stato trova applicazione in numerosi campi:

  • Controllo di sistemi meccanici: Bracci robotici, veicoli, strutture flessibili
  • Elettronica: Filtri attivi, amplificatori, convertitori DC-DC
  • Economia: Modelli macroeconomici, sistemi finanziari
  • Biologia: Modelli di popolazione, sistemi fisiologici
  • Aerospaziale: Controllo di velivoli, sistemi di navigazione

Un esempio pratico è il controllo di un motore DC, dove le variabili di stato potrebbero essere la posizione angolare e la velocità angolare, mentre l’ingresso è la tensione applicata.

8. Errori Comuni e Soluzioni

Durante la lavorazione con matrici in spazio di stato, è facile incorrere in errori:

  1. Dimensione errata delle matrici:

    Assicurarsi che:

    • A sia n×n
    • B sia n×m
    • C sia p×n
    • D sia p×m
  2. Sistema non controllabile/osservabile:

    Verificare il rango delle matrici di controllabilità e osservabilità con:

    rank(ctrb(A,B)) == size(A,1)
  3. Instabilità numerica:

    Per sistemi con dinamiche molto veloci/lente:

    • Usare aritmetica a precisione maggiore
    • Riscalare le variabili di stato
    • Considerare metodi di bilanciamento
  4. Discretizzazione impropria:

    Scegliere Ts almeno 10 volte più piccolo della costante di tempo più veloce del sistema.

9. Ottimizzazione delle Prestazioni

Per sistemi di grandi dimensioni, è importante ottimizzare:

  • Sparse Matrices: Utilizzare matrici sparse per risparmiare memoria
  • Preallocazione: Preallocare gli array per evitare ridimensionamenti
  • Vettorizzazione: Evitare cicli for quando possibile
  • Funzioni MEX: Per sezioni critiche del codice
  • Parallel Computing: Utilizzare Parallel Computing Toolbox
> A = sparse(A); % Converte in matrice sparsa
> x = zeros(n,1); % Prealloca vettore
> for i = 1:N
  x = A*x + B*u(:,i); % Simulazione
  y(:,i) = C*x + D*u(:,i);
> end

10. Visualizzazione dei Risultati

MATLAB offre potenti strumenti di visualizzazione per analizzare i sistemi:

> step(sys); % Risposta al gradino
> impulse(sys); % Risposta all’impulso
> bode(sys); % Diagramma di Bode
> nyquist(sys); % Diagramma di Nyquist
> pzmap(sys); % Mappa poli-zeri
> initial(sys,x0); % Risposta libera
> lsim(sys,u,t); % Risposta a ingresso arbitrario

È possibile personalizzare questi grafici con opzioni aggiuntive:

> step(sys, 10); % Durata simulazione 10 secondi
> grid on;
> title(‘Risposta al Gradino del Sistema’);
> xlabel(‘Tempo [s]’);
> ylabel(‘Ampiezza’);

11. Esempio Completo: Sistema Massa-Molla-Smorzatore

Consideriamo un sistema meccanico composto da una massa m, una molla con costante k e uno smorzatore con coefficiente c:

mẍ(t) + cẋ(t) + kx(t) = u(t)

Dove u(t) è la forza applicata.

Definiamo come variabili di stato:

  • x₁(t) = x(t) [posizione]
  • x₂(t) = ẋ(t) [velocità]

Le equazioni di stato diventano:

ẋ₁(t) = x₂(t)
ẋ₂(t) = (-k/m)x₁(t) + (-c/m)x₂(t) + (1/m)u(t)
y(t) = x₁(t) [uscita = posizione]

Le matrici risultanti sono:

> m = 1; k = 10; c = 0.5;
> A = [0 1; -k/m -c/m];
> B = [0; 1/m];
> C = [1 0];
> D = 0;
> sys = ss(A,B,C,D);

Per analizzare la risposta al gradino:

> step(sys);
> grid on;
> title(‘Risposta al Gradino del Sistema Massa-Molla-Smorzatore’);

12. Estensioni Avanzate

Per sistemi più complessi, è possibile considerare:

  • Sistemi non lineari: Linearizzazione intorno a punti di equilibrio
  • Sistemi tempo-varianti: Matrici A(t), B(t), C(t), D(t)
  • Sistemi stocastici: Inclusione di rumore e incertezze
  • Controllo ottimo: LQR (Linear Quadratic Regulator)
  • Osservatori: Filtro di Kalman per la stima dello stato

MATLAB offre toolbox specializzate per queste estensioni, come:

  • Robust Control Toolbox
  • Model Predictive Control Toolbox
  • System Identification Toolbox
  • Simulink per la simulazione non lineare

Leave a Reply

Your email address will not be published. Required fields are marked *