Sunteți pe pagina 1din 15

L3.

Criteriul de stabilitate Routh-Hurwitz


În acest laborator se va analiza stabilitatea sistemelor folosind criteriul de stabilitate Routh-
Hurwitz.

1. Introducere teoretică
Un sistem este stabil dacă ieșirea sa poate fi controlată, producând un răspuns mărginit pentru
o intrare mărginită. Când un sistem devine instabil, ieșirea sa poate fi infinită (nemărginită) chiar și
pentru o intrare finită. În aplicațiile practice, multe sisteme sunt natural instabile, însă acestea pot fi
stabilizate printr-un controler adecvat.

Un sistem în buclă închisă este prezentat în Fig. 1, unde 𝑈(𝑠) este intrarea, 𝐶(𝑠) este funcția
de transfer a controlerului, 𝐺(𝑠) este funcția de tranfer a instalației (sistemului), 𝐻(𝑠) este funcția de
transfer a buclei de reacție și 𝑌(𝑠) este ieșirea.

Fig. 1 – Sistem în buclă închisă

Funcția de transfer în buclă închisă a sistemului prezentat în Fig. 1 este:


𝐶(𝑠)𝐺(𝑠) 𝐶(𝑠)𝐺(𝑠)
𝐻𝑐𝑙 (𝑠) = =
1 + 𝐻(𝑠)𝐶(𝑠)𝐺(𝑠) 1 + 𝐻𝑜𝑙 (𝑠)
unde 𝐻𝑜𝑙 (𝑠) este funcția de transfer a sistemului în buclă deschisă (Fig. 2).

Fig. 2 – Sistem în buclă deschisă

Numitorul funcției de transfer în buclă închisă, 1 + 𝐻𝑜𝑙 (𝑠) = 1 + 𝐻(𝑠)𝐶(𝑠)𝐺(𝑠) reprezintă


ecuația caracteristică a sistemului. Rădăcinile acestei ecuații reprezintă polii funcției de transfer 𝐻𝑐𝑙 (𝑠).
Poziția polilor acestei funcții de transfer determină stabilitatea sistemului. Un sistem este instabil dacă
are cel puțin un pol în semiplanul drept (SPD).

1
1 1
Exemplul 1: Poli negativi reali: 𝐶(𝑠) = 2; 𝐺(𝑠) = 𝑠+3 ; 𝐻(𝑠) = 1; 𝑈(𝑠) = 𝑠

2
𝑌(𝑠) 𝐶(𝑠)𝐺(𝑠) 𝑠 + 3 = 2
𝐻𝑐𝑙 (𝑠) = = =
𝑈(𝑠) 1 + 𝐻(𝑠)𝐶(𝑠)𝐺(𝑠) 1 + 2 𝑠+5
𝑠+3
2 𝐴 𝐵
𝑌(𝑠) = 𝑈(𝑠)𝐻𝑐𝑙 (𝑠) = = +
𝑠(𝑠 + 5) 𝑠 𝑠 + 5
2 2
𝐴 = lim 𝑠𝑌(𝑠) = lim =
𝑠→0 𝑠→0 𝑠 + 5 5
2 2
𝐵 = lim (𝑠 + 5)𝑌(𝑠) = lim =−
𝑠→−5 𝑠→−5 𝑠 5
2 1 1
𝑌(𝑠) = ( − )
5 𝑠 𝑠+5
Folosind transformata Laplace inversă, expresia lui 𝑦(𝑡) este:
2
𝑦(𝑡) = (1 − 𝑒 −5𝑡 )
5
Localizarea polilor și răspunsul sistemului sunt:

Fig. 3 – Poli negativi reali

1 1
Exemplul 2: Poli pozitivi reali: 𝐶(𝑠) = 2; 𝐺(𝑠) = 𝑠−3 ; 𝐻(𝑠) = 1; 𝑈(𝑠) = 𝑠

2
𝑌(𝑠) 𝐶(𝑠)𝐺(𝑠) 𝑠 − 3 = 2
𝐻𝑐𝑙 (𝑠) = = =
𝑈(𝑠) 1 + 𝐻(𝑠)𝐶(𝑠)𝐺(𝑠) 1 + 2 𝑠−1
𝑠−3
2 𝐴 𝐵
𝑌(𝑠) = 𝑈(𝑠)𝐻𝑐𝑙 (𝑠) = = +
𝑠(𝑠 − 1) 𝑠 𝑠 − 1
2
𝐴 = lim 𝑠𝑌(𝑠) = lim =−2
𝑠→0 𝑠→0 𝑠 − 1

2
𝐵 = lim(𝑠 − 1)𝑌(𝑠) = lim = 2
𝑠→1 𝑠→1 𝑠

2
1 1
𝑌(𝑠) = −2 ( − )
𝑠 𝑠−1
Folosind transformata Laplace inversă, expresia lui 𝑦(𝑡) este:

𝑦(𝑡) = −2(1 − 𝑒 𝑡 )
Localizarea polilor și răspunsul sistemului sunt:

Fig. 4 – Poli pozitivi reali

1 1 1
Exemplul 3: Poli negativi complecși: 𝐶(𝑠) = 20; 𝐺(𝑠) = 𝑠+3 ; 𝐻(𝑠) = 𝑠+4 ; 𝑈(𝑠) = 𝑠

20 20
𝑌(𝑠) 𝐶(𝑠)𝐺(𝑠) 𝑠+3 𝑠 +3
𝐻𝑐𝑙 (𝑠) = = = =
𝑈(𝑠) 1 + 𝐻(𝑠)𝐶(𝑠)𝐺(𝑠) 1 + 20 (𝑠 + 3)(𝑠 + 4) + 20
(𝑠 + 3)(𝑠 + 4) (𝑠 + 3)(𝑠 + 4)
𝑌(𝑠) 20(𝑠 + 4) 20(𝑠 + 4)
𝐻𝑐𝑙 (𝑠) = = 2 =
𝑈(𝑠) 𝑠 + 7𝑠 + 32 7 √79 7 √79
(𝑠 + 2 − 𝑗 2 )(𝑠 + 2 + 𝑗 2 )

20(𝑠 + 4) 𝐴 𝐵𝑠 + 𝐶
𝑌(𝑠) = = + ⇒ 20(𝑠 + 4) = 𝐴(𝑠 2 + 7𝑠 + 32) + 𝑠(𝐵𝑠 + 𝐶)
𝑠(𝑠 2 + 7𝑠 + 32) 𝑠 𝑠 2 + 7𝑠 + 32
20(𝑠 + 4) 80 5
𝐴 = lim 𝑠𝑌(𝑠) = lim = =
𝑠→0 𝑠→0 𝑠 2 + 7𝑠 + 32 32 2
5 5
5 35 +𝐵 = 0⇒𝐵 = −
20𝑠 + 80 = 𝑠 2 ( + 𝐵) + 𝑠 ( + 𝐶) + 80 ⇒ {2 2
2 2 35 5
+ 𝐶 = 20 ⇒ 𝐶 =
2 2
5 5(𝑠 − 1)
𝑌(𝑠) = − 2
2𝑠 2(𝑠 + 7𝑠 + 32)
Pentru cea de-a doua fracție se vor folosi următoarele transformate Laplace inverse:

Laplace transform Time domain function Laplace transform Time domain function
𝑭(𝒔) 𝒇(𝒕) 𝑭(𝒔) 𝒇(𝒕)
𝑠+𝑎 1 1 −𝑎𝑡
𝑒 −𝑎𝑡 cos(𝑏𝑡) 𝑒 sin(𝑏𝑡)
(𝑠 + 𝑎)2 + 𝑏 2 (𝑠 + 𝑎)2 + 𝑏 2 𝑏

3
Cea de-a doua fracție va trebui rescrisă în forma corespunzătoare, conform tabelului de
transformate Laplace, folosind rădăcinile numitorului pentru a determina coeficienții 𝑎 și 𝑏:

7
5 5 𝑠−1 5 5 𝑠+ 9 1
𝑌(𝑠) = − ∙ 2 = − ( 2 − ∙ )
2
2𝑠 2 𝑠 + 7𝑠 + 32 2𝑠 2 7 79 2 7 2 79
(𝑠 + 2) + 4 (𝑠 + 2) + 4

Folosind transformata Laplace inversă, expresia lui 𝑦(𝑡) este:

5 7 √79 9 2 −7𝑡 √79


𝑦(𝑡) = [1 − 𝑒 −2𝑡 cos ( 𝑡) + ∙ 𝑒 2 sin ( 𝑡)]
2 2 2 √79 2

5 7 √79 9 −7𝑡 √79


𝑦(𝑡) = [1 − 𝑒 −2𝑡 cos ( 𝑡) + 𝑒 2 sin ( 𝑡)]
2 2 √79 2

Localizarea polilor și răspunsul sistemului sunt:

Fig. 5 – Poli negativi complecși

1 1 1
Exemplul 4: Poli pozitivi complecși: 𝐶(𝑠) = 20; 𝐺(𝑠) = ; 𝐻(𝑠) = ; 𝑈(𝑠) =
𝑠−3 𝑠−4 𝑠

20 20
𝑌(𝑠) 𝐶(𝑠)𝐺(𝑠) 𝑠−3 𝑠 −3
𝐻𝑐𝑙 (𝑠) = = = =
𝑈(𝑠) 1 + 𝐻(𝑠)𝐶(𝑠)𝐺(𝑠) 1 + 20 (𝑠 − 3)(𝑠 − 4) + 20
(𝑠 − 3)(𝑠 − 4) (𝑠 − 3)(𝑠 − 4)
𝑌(𝑠) 20(𝑠 − 4) 20(𝑠 − 4)
𝐻𝑐𝑙 (𝑠) = = 2 =
𝑈(𝑠) 𝑠 − 7𝑠 + 32 7 √79 7 √79
(𝑠 − 2 − 𝑗 2 )(𝑠 − 2 + 𝑗 2 )

20(𝑠 − 4) 𝐴 𝐵𝑠 + 𝐶
𝑌(𝑠) = = + ⇒ 20(𝑠 − 4) = 𝐴(𝑠 2 − 7𝑠 + 32) + 𝑠(𝐵𝑠 + 𝐶)
𝑠(𝑠 2 − 7𝑠 + 32) 𝑠 𝑠 2 − 7𝑠 + 32
20(𝑠 − 4) 80 5
𝐴 = lim 𝑠𝑌(𝑠) = lim = − = −
𝑠→0 𝑠→0 𝑠 2 − 7𝑠 + 32 32 2
5 5
5 35 +𝐵 =0⇒𝐵 =
20𝑠 − 80 = 𝑠 2 (− + 𝐵) + 𝑠 ( + 𝐶) + 80 ⇒ {2 2
2 2 35 5
+ 𝐶 = 20 ⇒ 𝐶 =
2 2

4
5 5(𝑠 + 1)
𝑌(𝑠) = − +
2𝑠 2(𝑠 2 − 7𝑠 + 32)
Cea de-a doua fracție va trebui rescrisă în forma corespunzătoare, conform tabelului de
transformate Laplace, folosind rădăcinile numitorului pentru a determina coeficienții 𝑎 și 𝑏:

7
5 5 𝑠+1 5 5 𝑠− 9 1
𝑌(𝑠) = − + ∙ 2 =− + ( 2
+ ∙ )
2
2𝑠 2 𝑠 − 7𝑠 + 32 2𝑠 2 7 79 2 7 2 79
(𝑠 − 2) + 4 (𝑠 − 2) + 4

Folosind transformata Laplace inversă, expresia lui 𝑦(𝑡) este:

5 7 √79 9 2 7𝑡 √79
𝑦(𝑡) = [−1 + 𝑒 2𝑡 cos ( 𝑡) + ∙ 𝑒 2 sin ( 𝑡)]
2 2 2 √79 2

5 7 √79 9 7𝑡 √79
𝑦(𝑡) = [−1 + 𝑒 2𝑡 cos ( 𝑡) + 𝑒 2 sin ( 𝑡)]
2 2 √79 2

Localizarea polilor și răspunsul sistemului sunt:

Fig. 6 – Poli pozitivi complecși

Criteriul de stabilitate Routh-Hurwitz

Criteriul de stabilitate Routh-Hurwitz este un test matematic pentru condițiile necesare și


suficiente pentru determinarea stabilității unui sistem liniar invariant în timp (SLIT). Criteriul Routh-
Hurwitz poate fi utilizat pentru a determina numărul polilor (numărul rădăcinilor numitorului) funcției
de transfer situați în semiplanul drept. Dacă o funcție de transfer are cel puțin un pol în semiplanul
drept, sistemul va fi instabil (vezi exemplele 1 – 4).

Pentru o ecuație polinomială în forma generală 𝑎𝑛 𝑠 𝑛 + 𝑎𝑛−1 𝑠 𝑛−1 + ⋯ + 𝑎1 𝑠 + 𝑎0 ,


următoarele condiții trebuie să fie îndeplinite înaintea aplicării criteriului Routh-Hurwitz:

• toți coeficienții ecuației polinomiale trebuie să aibă același semn


• nu lipsește nici un termen (𝑎𝑖 ≠ 0; ∀𝑖 = 1 … 𝑛)

Dacă cel puțin una din condițiile anterioare este falsă, sistemul va fi instabil.

Algoritmul criteriului de stabilitate Routh-Hurwitz este următorul:

5
1. Se aranjează coeficienții ecuației caracteristice (numitorul funcției de transfer) într-un
tabel, după cum urmează:

𝑠𝑛 𝑎𝑛 𝑎𝑛−2 𝑎𝑛−4 …
𝑠 𝑛−1 𝑎𝑛−1 𝑎𝑛−3 𝑎𝑛−5 …

2. Se completează tabelul pentru toate puterile lui 𝑠:

𝑠𝑛 𝑎𝑛 𝑎𝑛−2 𝑎𝑛−4 …
𝑠 𝑛−1 𝑎𝑛−1 𝑎𝑛−3 𝑎𝑛−5 …
𝑠 𝑛−2 𝑏1 𝑏2 𝑏3 …
𝑠 𝑛−3 𝑐1 𝑐2 𝑐3 …
⋮ ⋮ ⋮ ⋮ ⋮
𝑠0 𝑘1 𝑘2 𝑘3 …

Coeficienții 𝑏𝑖 , 𝑐𝑖 …, 𝑘𝑖 se calculează după următoarea metodă:


𝑤 𝑥
| 𝑦 𝑧| 𝑤𝑧 − 𝑥𝑦 𝑥𝑦 − 𝑤𝑧
𝑏𝑖 , 𝑐𝑖 , … , 𝑘𝑖 = − =− =
𝑦 𝑦 𝑦
unde:
• 𝑤 este termenul aflat cu două rânduri deasupra poziției curente și pe prima coloană
• 𝑥 este termenul aflat cu două rânduri deasupra poziției curente și o coloană la dreapta
• 𝑦 este termenul aflat cu un rând deasupra poziției curente și pe prima coloană
• 𝑧 este termenul aflat cu un rând deasupra poziției curente și o coloană la dreapta

Exemplu:
𝑎𝑛 𝑎𝑛−2 𝑎𝑛−1 𝑎𝑛−5
|𝑎 𝑎 | | 𝑏 𝑏3 |
𝑏1 = − 𝑛−1 𝑛−3
; 𝑐2 = − 1
𝑎𝑛−1 𝑏1
3. Se numără schimbările de semn ale coeficienților rezultați pe prima coloană a tabelului.
Numărul schimbărilor de semn indică numărul polilor în semiplanul drept. Dacă nu există
nici o schimbare de semn pe prima coloană, sistemul este stabil.
4𝑠5 +3𝑠4 +4
Exemplul 5: 𝐻𝑐𝑙 (𝑠) = 𝑠5 +2𝑠4 +6𝑠3 +6𝑠2 +5.5𝑠+5

Condițiile de aplicare ale criteriului Routh-Hurwitz sunt îndeplinite, deci acesta poate fi aplicat.

𝑠5 1 6 5.5
4 2 6 5
𝑠
3 𝑏1 𝑏2 𝑏3
𝑠
𝑠2 𝑐1 𝑐2 𝑐3
𝑠 𝑑1 𝑑2 𝑑3
0 𝑒1
𝑠

1 6 1 5.5 1 0
| | 12 − 6 | | 11 − 5 | |
𝑏1 = − 2 6 = = 3; 𝑏2 = − 2 6 = = 3; 𝑏3 = − 2 0 = 0
2 2 2 2 2

6
2 6 2 5
| | 6𝑏1 − 2𝑏2 18 − 6 | | 5𝑏 − 2𝑏 15
𝑏1 𝑏2 𝑏1 𝑏3 1 3
𝑐1 = − = = = 4; 𝑐2 = − = = = 5; 𝑐3 = 0
𝑏1 𝑏1 3 𝑏1 𝑏1 3
𝑏1 𝑏2 𝑏 𝑏3
| | 𝑏2 𝑐1 − 𝑏1 𝑐2 12 − 15 3 | 1 |
𝑐1 𝑐2 𝑐1 𝑐3
𝑑1 = − = = = − ; 𝑑2 = − = 0; 𝑑3 = 0
𝑐1 𝑐1 4 4 𝑐1
𝑐1 𝑐2 3
|𝑑 𝑑2 | 𝑐2 𝑑1 − 𝑐1 𝑑2 −5 ∙ 4
1
𝑒1 = − = = =5
𝑑1 𝑑1 3
−4

Tabelul Routh-Hurwitz devine:

𝑠5 1 6 5.5
4 2 6 5
𝑠
3 3 3 0
𝑠
2 4 5 0
𝑠
𝑠 −0.75 0 0
0 5
𝑠

Pe prima coloană sunt două schimbări de semn, ceea ce înseamnă că există doi poli în
semiplanul drept, deci sistemul este instabil.
4𝑠3 +3𝑠2 −4
Exemplul 6: 𝐻𝑐𝑙 (𝑠) = 𝑠3 +4𝑠2 +7𝑠+𝐾. Să se determine valorile lui 𝐾 pentru care sistemul este stabil.

𝑠3 1 7
𝑠2 4 𝐾
1 7 1 0
| | | |
𝑠
𝑏1 = − 4 𝐾 = 28 − 𝐾 𝑏2 = − 4 0 = 0
4 4 4
4 𝐾
|28 − 𝐾 |
𝑠0 4 0
𝑐1 = − =𝐾
28 − 𝐾
4

Pentru ca sistemul să fie stabil, trebuie să nu existe nici o schimbare de semn pe prima coloană.
28 − 𝐾
{ 4 > 0 ⇒ {28 − 𝐾 > 0 ⇒ {𝐾 < 28 ⇒ 𝐾 ∈ (0,28)
𝐾>0 𝐾>0 𝐾>0
4𝑠5 +3𝑠4 −4
Exemplul 7: 𝐻𝑐𝑙 (𝑠) = 2𝑠5 +2𝑠4 +5𝑠3 +5𝑠2 +3𝑠+1

𝑠5 2 5 3
4 2 5 1
𝑠
𝑠3 𝑏1 𝑏2 𝑏3
2 𝑐1 𝑐2 𝑐3
𝑠
𝑠 𝑑1 𝑑2 𝑑3
0 𝑒1
𝑠

7
2 5 2 3
| | | |
𝑏1 = − 2 5 = 10 − 10 = 0; 𝑏 = − 2 1 = 6 − 2 = 2
2
2 2 2 2
2 5 2 1
| | 5𝑏1 − 2𝑏2 | | 𝑏 − 2𝑏
𝑏1 𝑏2 𝑏 𝑏3 1 3
𝑐1 = − = ; 𝑐2 = − 1 =
𝑏1 𝑏1 𝑏1 𝑏1
Dacă un coeficient de pe prima coloană este egal cu 0 (în acest caz 𝑏1 ), acesta va fi numitorul
următoarei linii din tabel. Pentru a nu avea împățire cu zero, coeficientul respectiv va fi notat cu 𝜀, ca
o valoare neglijabilă foarte apropiată de 0 și de același semn cu coeficientul anterior de pe prima
coloană a tabelului. Folosind această metodă, algoritmul poate continua.
5𝑏1 − 2𝑏2 5𝜀 − 4 4 𝑏1 − 2𝑏3 𝜀
𝑏1 = ε ⇒ 𝑐1 = = = − ; 𝑐2 = = =1
𝑏1 𝜀 𝜀 𝑏1 𝜀
În relațiile de mai sus, termenul 5𝜀 din expresia lui 𝑐1 a fost eliminat, deoarece valoarea 𝜀 este
de fapt 0 (sau foarte apropiată), astfel termenul respectiv de la numărător poate fi ignorat.

𝑏 𝑏2 −4
| 1 |
𝑏2 𝑐1 − 𝑏1 𝑐2 2 𝜀 − 𝜀
𝑐1 𝑐2
𝑑1 = − = = = 2; 𝑑2 = 0
𝑐1 𝑐1 4
−𝜀
𝑐1 𝑐2
|𝑑 𝑑 | 𝑐 𝑑 − 𝑐 𝑑 2
2 1 1 2
𝑒1 = − 1 2
= = =1
𝑑1 𝑑1 2
Tabelul Routh-Hurwitz devine:

𝑠5 2 5 3
4 2 5 1
𝑠
3 𝜀 2 0
𝑠
4
𝑠2 − 1 0
𝜀
𝑠 2 0 0
0 1
𝑠

Pe prima coloană sunt două schimbări de semn, ceea ce înseamnă că există doi poli în
semiplanul drept, deci sistemul este instabil.
3𝑠3 +2𝑠+5
Exemplul 8: 𝐻𝑐𝑙 (𝑠) = 𝑠4 +𝑠3 +3𝑠2 +2𝑠+2

𝑠4 1 3 2
𝑠3 1 2 0
2 𝑏1 𝑏2 𝑏3
𝑠
𝑠 𝑐1 𝑐2 𝑐3
0 𝑑1
𝑠

1 3 1 2
| | 3−2 | | 2
𝑏1 = − 1 2 = = 1; 𝑏2 = − 1 0 = = 2
1 1 1 1

8
1 2 1 0
| | 2−2 | |
𝑐1 = − 1 2 = = 0; 𝑐2 = − 1 0 = 0
1 1 1
Când toți coeficienții unui rând sunt egali cu zero, aceștia vor fi înlocuiți cu coeficienții derivatei
polinomului auxiliar anterior (derivata liniei anterioare din tabel).

𝑠4 1 3 2
𝑠3 1 2 0
2 1 2 0
𝑠
𝑠 0 0 0
0 𝑑1
𝑠

Polinomul auxiliar pentru 𝑠 2 este:


𝑑𝑃2 (𝑠)
𝑃2 (𝑠) = 𝑠 2 + 2 ⇒ 𝑃1 (𝑠) = = 2𝑠
𝑑𝑠
Coeficienții liniei ce conține doar valorile zero vor fi înlocuiți cu coeficienții polinomului 𝑃1 (𝑠).

𝑠4 1 3 2
𝑠3 1 2 0
𝑠2 1 2 0
𝑠 2 0 0
0 𝑑1
𝑠
1 2
| | 4
𝑑1 = − 2 0 = = 2
2 2
Tabelul Routh-Hurwitz devine:

𝑠4 1 3 2
3 1 2 0
𝑠
2 1 2 0
𝑠
𝑠 2 0 0
0 2
𝑠

Nu există schimbări de semn pe prima coloană, deci sistemul este stabil.

2. Evaluarea criteriului Routh-Hurwitz folosind MATLAB

Pentru a implementa criteriul Routh-Hurwitz în MATLAB, funcția routh_table trebuie


implementată. Parametrul de intrare al funcției va fi funcția de transfer a sistemului în buclă închisă
sau reprezentarea sistemului cu modelul variabilelor de stare. Funcția va returna valorile coeficienților
Routh-Hurwitz, numărul de schimbări de semn și polii sistemului.

Funcția poate fi descărcată de pe Moodle sau poate fi implementată prin următorul cod, salvat
într-un fișier cu numele routh_table.m.

9
function [rh_table, num, poles] = routh_table(H)
% check if the input parameter is valid
if (isa(H, 'ss'))
H = tf(H);
end
if (~isa(H, 'tf'))
error('Invalid input system');
end

% small value for epsilon


eps = 0.01;
den = cell2mat(H.denominator);

% check for missing coefficients


if (nnz(~den) > 0)
error('Missing coefficients. The system is unstable');
end

num_rows = length(den);
num_cols = round(num_rows/2);

% initialize table
rh_table = zeros(num_rows, num_cols);
% populate first row
rh_table(1,:) = den(1,1:2:num_rows);

% populate second row


if (rem(num_rows,2) ~= 0)
rh_table(2,1:num_cols - 1) = den(1,2:2:num_rows);
else
rh_table(2,:) = den(1,2:2:num_rows);
end

% compute the coefficients


for i = 3:num_rows
for j = 1:num_cols - 1
% element two rows up, 1st col
x1 = rh_table(i - 2, 1);
% element two rows up, one col right
x2 = rh_table(i - 2, j + 1);
% element one row up, 1st col
x3 = rh_table(i - 1, 1);
% element one row up, one col right
x4 = rh_table(i - 1, j + 1);

% |x1 x2|
% |x3 x4| x2x3 - x1x4
% coefficient = - -------- = -----------
% x3 x3

rh_table(i, j) = (x2 * x3 - x1 * x4)/x3;


end

10
% check if the row is equal to zero
if (rh_table(i, :) == 0)
aux_poly_order = num_rows - i + 1;
aux_poly = zeros(1, aux_poly_order + 1);
col_index = 1;
for j = 1:2:length(aux_poly)
aux_poly(1, j) = rh_table(i - 1, col_index);
col_index = col_index + 1;
end

% calculate the derivative polynomial coefficients


derivative_poly = polyder(aux_poly);
col_index = 1;
for j = 1:2:length(derivative_poly)
rh_table(i, col_index) = derivative_poly(1, j);
col_index = col_index + 1;
end
end

% check if first coefficient is 0


if (rh_table(i, 1) == 0)
rh_table(i, 1) = eps;
end
end

% count the number of sign changes


first_col = rh_table(:, 1);
positive = first_col > 0;
changes = xor(positive(1:end-1, 1), positive(2:end, 1));
num = sum(changes);
poles = roots(den);
end

Funcția routh_table astfel definită poate fi apelată din directorul în care a fost salvată,
folosind una din următoarele metode:
>> [table, sign_changes, poles] = routh_table(H)
>> [table, sign_changes, poles] = routh_table(sys)

unde H este o funcție de transfer definită anterior iar sys este o reprezentarea cu modelul
variabilelor de stare definită anterior.

Pentru a reprezenta grafic polii și zerourile sistemului, se folosește funcția MATLAB pzplot:
>> pzplot(H)
>> pzplot(sys)

3. Evaluarea criteriului Routh-Hurwitz folosind Scilab


Pentru a implementa criteriul Routh-Hurwitz în Scilab, funcția routh_table trebuie
implementată. Parametrul de intrare al funcției va fi funcția de transfer a sistemului în buclă închisă
sau reprezentarea sistemului cu modelul variabilelor de stare. Funcția va returna valorile coeficienților
Routh-Hurwitz, numărul de schimbări de semn și polii sistemului.

11
Funcția poate fi descărcată de pe Moodle sau poate fi implementată prin următorul cod, salvat
într-un fișier cu numele routh_table.sci.
function [rh_table, num, poles]=routh_table(H)
// check if the input parameter is valid
if (typeof(H) == 'state-space') then
H = ss2tf(H);
end
if (type(H) ~= 16) then
error('Invalid input system');
end

// small value for epsilon


eps = 0.01;
den = flipdim(coeff(H.den), 2);

// check for missing coefficients


if (and(den) == %F) then
error('Missing coefficients. The system is unstable');
end

num_rows = length(den);
num_cols = round(num_rows/2);

// initialize table
rh_table = zeros(num_rows, num_cols);
// populate first row
rh_table(1, :) = den(1,1:2:num_rows);
// populate second row
if (modulo(num_rows,2) ~= 0) then
rh_table(2, 1:num_cols - 1) = den(1, 2:2:num_rows);
else
rh_table(2, :) = den(1, 2:2:num_rows);
end

// compute the coefficients


for i = 3:num_rows
for j = 1:num_cols - 1
// element two rows up, 1st col
x1 = rh_table(i - 2, 1);
// element two rows up, one col right
x2 = rh_table(i - 2, j + 1);
// element one row up, 1st col
x3 = rh_table(i - 1, 1);
// element one row up, one col right
x4 = rh_table(i - 1, j + 1);
// |x1 x2|
// |x3 x4| x2x3 - x1x4
// coefficient = - -------- = -----------
// x3 x3
rh_table(i, j) = (x2 * x3 - x1 * x4)/x3;
end

12
// check if the row is equal to zero
if (rh_table(i, :) == 0) then
aux_poly_order = num_rows - i + 1;
aux_poly = zeros(1, aux_poly_order + 1);
col_index = 1;
for j = 1:2:length(aux_poly)
aux_poly(1, j) = rh_table(i - 1, col_index);
col_index = col_index + 1;
end

// calculate the derivative polynomial coefficients


aux_poly = poly(flipdim(aux_poly,2), 's', 'coeff');
derivative_poly = derivat(aux_poly);
derivative_poly = flipdim(coeff(derivative_poly), 2);
col_index = 1;
for j = 1:2:length(derivative_poly)
rh_table(i, col_index) = derivative_poly(1, j);
col_index = col_index + 1;
end
end

// check if first coefficient is 0


if (rh_table(i, 1) == 0) then
rh_table(i, 1) = eps;
end
end

// count the number of sign changes


first_col = rh_table(:, 1);
pos = first_col > 0;
changes = pos (1:length(pos)-1, 1) <> pos (2:length(pos), 1);
num = sum(changes);

poles = roots(H.den);
endfunction

În Scilab, orice modificare în definiția unei funcții nu va fi încărcată automat. După orice
modificare sau după definirea unei noi funcții, aceasta trebuie reîncărcată folosind comanda getd în
fereastra Scilab, în interiorul directorului unde funcția a fost definită. După ce funcția a fost
(re)încărcată, ea poate fi apelată folosind una din următoarele metode:
--> getd
--> [table, sign_changes, poles] = routh_table(H)
--> [table, sign_changes, poles] = routh_table(sys)

unde H este o funcție de transfer definită anterior iar sys este o reprezentarea cu modelul
variabilelor de stare definită anterior.

Pentru a reprezenta grafic polii și zerourile sistemului, se folosește funcția Scilab plzr:
>> plzr(H)
>> plzr(sys)

13
4. Desfășurarea lucrării

1. Verificați rezultatele din exemplele 1 – 4, folosind funcțiile pzplot/plzr, respectiv


lsim/csim (MATLAB/Scilab).
2. Folosiți funcția routh_table pentru a analiza rezultatele prezentate în exemplele 5 – 8.
3. Pentru sistemul în buclă închisă din Fig. 7, determinați stabilitatea sistemului folosind criteriul
Routh-Hurwitz în următoarele cazuri:
𝑠+5 1
a. 𝐶(𝑠) = 𝑠
; 𝐺(𝑠) = 𝑠(𝑠+1)(𝑠+9) ; 𝐻(𝑠) = 1
2𝑠+5 1
b. 𝐶(𝑠) = 𝑠
; 𝐺(𝑠) = 𝑠(𝑠+1)(𝑠+9) ; 𝐻(𝑠) = 1
88𝑠+5 1
c. 𝐶(𝑠) = 𝑠
; 𝐺(𝑠) = 𝑠(𝑠+1)(𝑠+9) ; 𝐻(𝑠) = 1
89𝑠+5 1
d. 𝐶(𝑠) = 𝑠
; 𝐺(𝑠) = 𝑠(𝑠+1)(𝑠+9) ; 𝐻(𝑠) = 1

Fig. 7 – Sistem în buclă închisă

4. Verificați stabilitatea următoarelor sisteme și reprezentați grafic locația polilor și zerourilor,


precum și răspunsul acestora la semnalul treaptă-unitate:
6𝑠2 +3𝑠+1
a. 𝐻𝑐𝑙 (𝑠) = 𝑠5 +2𝑠4 +3𝑠3 +6𝑠2 +5𝑠+3
2𝑠4 +5𝑠2 +1
b. 𝐻𝑐𝑙 (𝑠) = 𝑠5 +7𝑠4 +6𝑠3 +42𝑠2 +8𝑠+56
5. Verificați stabilitatea pentru următoarele sisteme modelate cu ajutorul variabilelor de stare:
−10 −9 −50 −5 1
1 0 0 0 0
a. 𝐴 = [ ] ; 𝐵 = [ ] ; 𝐶 = [0 0 50 5]; 𝐷 = [0]
0 1 0 0 0
0 0 1 0 0
0 1 0 0 0
0 0 1 0 0
b. 𝐴 = [ ] ; 𝐵 = [ ] ; 𝐶 = [5 95 0 0]; 𝐷 = [0]
0 0 0 1 0
−5 −95 −9 −10 1

5. Întrebări și exerciții

𝐾𝑠+5 1
1. Pentru sistemul din Fig. 7 având 𝐶(𝑠) = 𝑠
; 𝐺(𝑠) = 𝑠(𝑠+1)(𝑠+9) ; 𝐻(𝑠) = 1, determinați
valorile lui 𝐾 pentru care sistemul este stabil.
10𝑠+𝐾 1
2. Pentru sistemul din Fig. 7 având 𝐶(𝑠) = 𝑠
; 𝐺(𝑠) = 𝑠(𝑠+1)(𝑠+9) ; 𝐻(𝑠) = 1, determinați
valorile lui 𝐾 pentru care sistemul este stabil.

14
3. Determinați valorile lui 𝐾 pentru care sistemul următor este stabil:
0 1 0 0 0
0 0 1 0 0
𝐴=[ ] ; 𝐵 = [ ] ; 𝐶 = [10 𝐾 0 0]; 𝐷 = [0]
0 0 0 1 0
−10 𝐾 −9 −10 1

15

S-ar putea să vă placă și