Esercizi svolti › Stabilità
Come sapere se un sistema è stabile senza calcolare i poli. Quattro esercizi svolti passo passo, a mano, e per ognuno il codice MATLAB per controllare il risultato.
9 minuti e 36 secondi: stabilità, polinomio caratteristico, tabella di Routh, casi speciali e parametro K.
Benvenuti su Zerospoles. In questa lezione vediamo con calma la stabilità dei sistemi lineari e il criterio di Routh, passo dopo passo. Partiamo da che cosa significa stabile e perché basta guardare i poli. Poi scriviamo il polinomio caratteristico, e costruiamo insieme la tabella di Routh. Vedremo i due casi speciali, quando compare uno zero o una riga intera di zeri. E per finire useremo il criterio con un parametro K, che è l'esercizio tipico d'esame. Gli esercizi svolti, con il codice Matlab da copiare, li trovi sotto il video, nella stessa pagina.
Un sistema è stabile se, dopo un impulso, la sua uscita si spegne col tempo invece di crescere senza limite. Matematicamente, la risposta all'impulso deve tendere a zero. E questa risposta è una somma di termini, uno per ogni polo della funzione di trasferimento. Un polo reale negativo dà un esponenziale che decade. Un polo con parte reale positiva dà un esponenziale che esplode. Quindi la regola è questa: il sistema è asintoticamente stabile se e solo se tutti i poli hanno parte reale negativa.
Guardiamo il piano complesso. A sinistra dell'asse immaginario i poli danno oscillazioni o esponenziali che si smorzano. Sull'asse immaginario abbiamo oscillazioni che non si smorzano mai: il sistema è al limite di stabilità. A destra dell'asse c'è l'instabilità: basta un solo polo lì e l'uscita diverge. Il problema è che per trovare i poli bisogna risolvere un'equazione di grado alto, e a mano è quasi impossibile. Il criterio di Routh ci evita proprio questo: ci dice quanti poli stanno a destra, senza calcolarli.
Se il sistema è in retroazione con guadagno d'anello L di s, la funzione a ciclo chiuso è L diviso uno più L. I poli sono quindi le soluzioni di uno più L uguale a zero. Portando tutto a denominatore comune otteniamo un polinomio, che chiamiamo polinomio caratteristico. Studiare la stabilità vuol dire studiare dove stanno le radici di questo polinomio.
Prima di fare conti, c'è un controllo velocissimo. Se manca un coefficiente, o ci sono segni diversi, il sistema non è stabile. Attenzione però: questa condizione è solo necessaria, non basta. Prendiamo s al cubo più s al quadrato più due s più otto. Tutti i coefficienti sono positivi, eppure questo polinomio ha due radici con parte reale positiva. Serve quindi un test completo, ed è esattamente il criterio di Routh.
Costruiamo la tabella con un esempio: s al cubo più due s al quadrato più tre s più quattro. Una riga per ogni potenza di s, dalla più alta fino a s alla zero. Le prime due righe si riempiono con i coefficienti, alternandoli: nella prima riga uno e tre, nella seconda due e quattro.
Ogni elemento nuovo si calcola con un piccolo determinante: prendi i due elementi della colonna a sinistra e quelli della colonna a destra. Per la riga s alla uno: due per tre, meno uno per quattro, diviso due. Fa sei meno quattro, diviso due, cioè uno. Per l'ultima riga basta ricopiare il quattro, perché non ci sono altri elementi da combinare. La regola generale è: elemento della riga sopra a sinistra per quello in diagonale, meno il pivot per quello a destra, tutto diviso il pivot.
Ora guardiamo solo la prima colonna: uno, due, uno, quattro. Il criterio dice che il numero di cambi di segno in questa colonna è uguale al numero di poli nel semipiano destro. Qui i segni sono tutti positivi, quindi zero cambi di segno, zero poli instabili: il sistema è stabile. Se vuoi controllare, le radici vere sono circa meno uno virgola sei, e una coppia con parte reale meno zero virgola diciassette.
Facciamo un secondo esempio, di grado quattro: s alla quarta più due s al cubo più tre s al quadrato più quattro s più cinque. Le prime due righe: uno, tre, cinque, e poi due, quattro. La riga s al quadrato: due per tre meno uno per quattro, diviso due, fa uno. Poi due per cinque meno zero, diviso due, fa cinque. La riga s alla uno: uno per quattro, meno due per cinque, diviso uno, fa meno sei. E l'ultima è cinque. La prima colonna è: più uno, più due, più uno, meno sei, più cinque. Due cambi di segno: dal più uno al meno sei, e poi dal meno sei al più cinque. Quindi due poli nel semipiano destro, sistema instabile.
Un trucco che fa risparmiare molti errori. Puoi moltiplicare o dividere un'intera riga per un numero positivo, e il risultato sui segni non cambia. Se in una riga hai quattro, otto, dodici, dividi tutto per quattro e lavori con uno, due, tre. Occhio però: solo per numeri positivi. Se dividi per un numero negativo, rovesci i segni e sbagli il conteggio.
Può capitare che il primo elemento di una riga venga zero, mentre il resto della riga no. Allora non puoi dividere. Prendiamo s alla quarta più s al cubo più due s al quadrato più due s più tre. Nella riga s al quadrato il primo elemento viene uno per due meno uno per due, cioè zero. La soluzione è sostituire lo zero con un numero piccolissimo, che chiamiamo epsilon, positivo. Nella riga successiva compare due meno tre su epsilon. Se epsilon tende a zero, tre su epsilon è enorme, e il termine diventa molto negativo. La prima colonna è più, più, più epsilon, meno, più: due cambi di segno, quindi due poli instabili.
Il secondo caso è una riga formata solo da zeri. Succede quando ci sono radici simmetriche rispetto all'origine. Esempio: s al cubo più due s al quadrato più quattro s più otto. La riga s alla uno viene zero zero. Si costruisce il polinomio ausiliario con la riga sopra: due s al quadrato più otto. Si deriva, e si ottiene quattro s: quel quattro prende il posto della riga di zeri, e si continua. La prima colonna è uno, due, quattro, otto: nessun cambio di segno, quindi nessun polo a destra. Le radici dell'ausiliario, più o meno due j, stanno sull'asse immaginario: il sistema è al limite di stabilità.
Veniamo all'esercizio tipico d'esame: trovare per quali valori di K il sistema è stabile. Il guadagno d'anello è K diviso s più uno, per s più due, per s più tre. Sviluppiamo il denominatore e sommiamo K: il polinomio caratteristico è s al cubo più sei s al quadrato più undici s più sei più K. Nella riga s alla uno: sei per undici, meno sei più K, diviso sei. Fa sessanta meno K, diviso sei. E l'ultima riga è sei più K.
Per la stabilità la prima colonna deve avere tutti i segni uguali. Uno e sei sono positivi, quindi chiediamo sessanta meno K maggiore di zero, e sei più K maggiore di zero. Questo dà K minore di sessanta, e K maggiore di meno sei. Se consideriamo guadagni positivi, il sistema è stabile per K compreso tra zero e sessanta. A K uguale sessanta la riga s alla uno è zero. Il polinomio ausiliario è sei s al quadrato più sessantasei, con radici più o meno j radice di undici. Il sistema oscilla a circa tre virgola tre radianti al secondo: è proprio il limite di stabilità.
In Matlab puoi verificare tutto in pochi secondi. Il comando roots restituisce le radici del polinomio, e vedi subito il segno delle parti reali. Nella pagina trovi anche la funzione routh table, da copiare: costruisce la tabella e gestisce anche il caso dello zero con epsilon. E il valore sessanta che abbiamo trovato è lo stesso che dà il margine di guadagno: circa trentacinque virgola sei decibel.
Quattro errori classici. Primo: bisogna contare i cambi di segno nella prima colonna, non il numero di elementi negativi. Secondo: non dividere una riga per un numero negativo. Terzo: se compare uno zero nella prima colonna, usa epsilon e non fermarti. Quarto: Routh ti dice quanti poli sono a destra, ma non dove siano. Per saperlo davvero devi calcolare le radici.
Ricapitolando. Il sistema è stabile se tutti i poli hanno parte reale negativa. Con Routh, il numero di cambi di segno nella prima colonna è il numero di poli nel semipiano destro. Uno zero si sostituisce con epsilon, una riga di zeri si risolve col polinomio ausiliario. E con un parametro K si impongono i segni positivi nella prima colonna e si risolvono le disequazioni. Ora prova tu: nella pagina trovi quattro esercizi svolti passo passo, e uno da fare da solo. Ci vediamo al prossimo argomento. Ciao!
Il polinomio caratteristico è:
| col. 1 | col. 2 | |
|---|---|---|
| s³ | 1 | 3 |
| s² | 2 | 4 |
| s¹ | 1 | 0 |
| s⁰ | 4 |
Codice MATLAB per controllare:
p = [1 2 3 4]; % s^3 + 2s^2 + 3s + 4
r = roots(p) % i poli
stabile = all(real(r) < 0) % 1 se tutti a sinistra| col. 1 | col. 2 | col. 3 | |
|---|---|---|---|
| s⁴ | 1 | 3 | 5 |
| s³ | 2 | 4 | 0 |
| s² | 1 | 5 | 0 |
| s¹ | −6 | 0 | 0 |
| s⁰ | 5 |
Codice MATLAB:
p = [1 2 3 4 5];
r = roots(p);
n_instabili = sum(real(r) > 0) % numero di poli a destraUn anello aperto con guadagno K, chiuso in retroazione unitaria negativa:
| col. 1 | col. 2 | |
|---|---|---|
| s³ | 1 | 11 |
| s² | 6 | 6+K |
| s¹ | (60−K)/6 | 0 |
| s⁰ | 6+K |
Codice MATLAB: prova tanti valori di K e prendi il più grande stabile.
K = 0:0.1:100;
stab = arrayfun(@(k) all(real(roots([1 6 11 6+k])) < 0), K);
Kmax = K(find(stab, 1, 'last'))Con il Control System Toolbox puoi vedere lo stesso limite sul margine di guadagno:
L = tf(1, [1 6 11 6]); % L(s) con K = 1
margin(L) % margine di guadagno: 60 (35,6 dB) a 3,32 rad/s
rlocus(L) % luogo delle radici| col. 1 | col. 2 | col. 3 | |
|---|---|---|---|
| s⁴ | 1 | 2 | 3 |
| s³ | 1 | 2 | 0 |
| s² | ε | 3 | 0 |
| s¹ | 2−3/ε | 0 | 0 |
| s⁰ | 3 |
Codice MATLAB: una funzione che costruisce la tabella e gestisce lo zero con il metodo ε. Salvala come routh_table.m.
function R = routh_table(c)
% Tabella di Routh. c = coefficienti in ordine decrescente di potenza.
n = length(c) - 1; % grado del polinomio
m = ceil((n + 1) / 2); % numero di colonne
R = zeros(n + 1, m);
a = c(1:2:end); b = c(2:2:end);
R(1, 1:length(a)) = a;
R(2, 1:length(b)) = b;
for i = 3:n + 1
if R(i-1, 1) == 0
R(i-1, 1) = 1e-9; % metodo epsilon: zero -> numero piccolo
end
for j = 1:m - 1
R(i, j) = (R(i-1, 1) * R(i-2, j+1) - R(i-2, 1) * R(i-1, j+1)) / R(i-1, 1);
end
end
endR = routh_table([1 1 2 2 3])
cambi = sum(diff(sign(R(:,1))) ~= 0) % cambi di segno nella prima colonnaPer quali valori di K il sistema con questo polinomio è stabile?
Costruisci la tabella a mano e poi apri la soluzione.