Luogo delle radici, approfondimento: le regole dimostrate, casi difficili, MATLAB e Python
Condizioni di fase e di modulo, dimostrazione di tutte le regole, luogo circolare con uno zero, angoli di partenza, processo instabile in anello aperto, luogo rispetto a un parametro, esempi in MATLAB e Python verificati.
https://www.electronics-engineering.com/luogo-delle-radici-approfondimento-regole-dimostrate-matlab-python
Questa pagina approfondisce la lezione sul luogo delle radici. Lì le regole di tracciamento sono enunciate; qui sono dimostrate una per una, a partire dalla condizione di fase. Poi si studiano i casi che negli esercizi creano difficoltà: gli angoli di partenza dai poli complessi, il luogo circolare di un sistema con uno zero, il processo instabile in anello aperto, il luogo rispetto a un parametro diverso dal guadagno. In fondo ci sono gli esempi in MATLAB e in Python, con il codice verificato.
Notazione:
, con
monico di grado
e zeri
,
monico di grado
e poli
; i poli dell’anello chiuso sono le radici di
, per
.
Le regole, dimostrate
Condizioni di fase e di modulo.
equivale a
, un numero reale negativo. Un numero complesso è reale negativo se e solo se il suo argomento è
(a meno di multipli di
). Poiché
, si ottiene la condizione di fase; il modulo dà il valore di
. Ogni regola che segue è una conseguenza di queste due.
Regola 1 (simmetria).
e
hanno coefficienti reali, quindi le radici complesse di
vengono a coppie coniugate: il luogo è simmetrico rispetto all’asse reale.
Regola 2 (partenza e arrivo). Il polinomio
ha grado
per ogni
: ci sono
rami. Per
l’equazione diventa
: i rami partono dai poli. Dividendo per
,
: per
radici tendono agli zeri. Le altre
devono andare all’infinito, perché un polinomio di grado
ha
radici e solo
possono restare al finito.
Regola 3 (asse reale). Per
reale, ogni polo o zero reale a sinistra di
contribuisce un angolo 0°, ogni polo o zero reale a destra 180°, e una coppia complessa contribuisce angoli opposti che si annullano. La somma è
, e vale
modulo
se e solo se quel numero è dispari.
Regola 4 (asintoti e baricentro). Per
grande,
![Rendered by QuickLaTeX.com \[ \frac{D(s)}{N(s)} = s^{n-m}\cdot\frac{1 - \frac{\sum p_i}{s} + \cdots}{1 - \frac{\sum z_i}{s} + \cdots} = s^{n-m}\left(1 - \frac{\sum p_i - \sum z_i}{s} + O(s^{-2})\right) \approx \left(s - \sigma_a\right)^{n-m} \]](https://www.electronics-engineering.com/wp-content/ql-cache/quicklatex.com-9af29827fc9451a092b78e68fe1f55ba_l3.png)
con
, perché
(si usano i coefficienti di
e
: il secondo coefficiente di un polinomio monico è meno la somma delle radici). L’equazione del luogo diventa
:
. Sono semirette che partono da
con gli angoli della lezione. ∎
Regola 5 (diramazione). Dove due rami si incontrano,
ha una radice doppia
:
e
. Eliminando
:
, che è il numeratore di
. Equivalentemente, sul tratto reale del luogo
, e il punto di diramazione è un massimo (o minimo) di
: lì due radici reali si fondono e diventano complesse. ∎
Regola 6 (angoli di partenza). Vicino a un polo
, tutti i fattori tranne
hanno argomento quasi costante, uguale al valore in
. La condizione di fase dà allora la direzione di partenza:
![]()
e allo stesso modo l’angolo di arrivo a uno zero
.
Regola 7 (somma dei poli). Se
, il coefficiente di
in
non dipende da
(perché
ha grado al massimo
), quindi la somma dei poli dell’anello chiuso è costante. Se una coppia va verso destra, un altro ramo deve andare a sinistra di pari misura: è un controllo molto utile sui disegni.
Regola 8 (asse immaginario). I punti di attraversamento sono le soluzioni di
: uguagliando a zero parte reale e parte immaginaria si ottengono
e
. È la stessa informazione della riga nulla nella tabella di Routh.

Uno zero e un luogo circolare
![]()
Asse reale: il tratto tra 0 e
e tutto quello a sinistra di
. Diramazioni:
dà
, cioè
(con
) e
(con
).
Teorema. La parte complessa del luogo è la circonferenza di centro
(lo zero) e raggio
.
Dimostrazione. Con
, l’equazione
ha radici complesse
,
. Da
:
, cioè
. ∎
In generale, con due poli e uno zero reali il luogo è sempre una circonferenza centrata nello zero, di raggio uguale alla media geometrica delle distanze dello zero dai due poli (qui
). Lo zero “attira” i rami e li tiene nel semipiano sinistro per ogni
: è l’effetto di un’azione derivativa (rete anticipatrice o PD).

Poli complessi: l’angolo di partenza
![]()
Poli in
e
. Angolo di partenza da
:
;
. Quindi
: il ramo parte verso l’alto e a destra, e attraversa l’asse immaginario.
Attraversamento:
. Con
: parte reale
, parte immaginaria
. Quindi
e
. Asintoti: baricentro
, angoli
e
.

Un processo instabile in anello aperto
![]()
Il polo in
rende il processo instabile da solo. Equazione caratteristica:
. Con il criterio di Routh (secondo ordine: tutti i coefficienti positivi) l’anello chiuso è stabile per
. Il luogo lo mostra: i rami partono da 0 e da 2, si incontrano sull’asse reale tra i due poli, descrivono un cerchio attorno allo zero in
(centro
, raggio
) e attraversano l’asse immaginario in
per
.
È la situazione tipica di un pendolo inverso, di un levitatore magnetico o di un aereo da caccia instabile per progetto: la retroazione deve avere un guadagno minimo, e un guasto del controllo è catastrofico.

Il luogo rispetto a un altro parametro
Il metodo funziona per qualunque parametro che compaia linearmente nell’equazione caratteristica. Si vuole sapere come si spostano i poli di
al variare dello smorzamento
. Si riscrive l’equazione come
![]()
che è un luogo delle radici con “guadagno”
, poli in
e uno zero in 0. Il luogo è una circonferenza di raggio 2 centrata nell’origine (i poli hanno modulo
finché sono complessi): lo smorzamento cambia l’angolo dei poli ma non la pulsazione naturale
. Per
i poli coincidono in
(smorzamento critico).

Il luogo in MATLAB e in Python
Il luogo dell’esempio della lezione,
, con la ricerca del guadagno che dà smorzamento 0,5.
MATLAB (Control System Toolbox):
G = tf(1, [1 6 8 0]); % G(s) = 1/(s(s+2)(s+4))
rlocus(G); sgrid(0.5, []) % luogo e retta di smorzamento 0,5
[K, poli] = rlocfind(G) % clic sul punto voluto del luogo
T = feedback(8.3*G, 1); stepinfo(T)Python (librerie gratuite numpy e python-control):
import numpy as np
import control as ct
G = ct.tf([1], [1, 6, 8, 0]) # G(s) = 1/(s(s+2)(s+4))
rlist, klist = ct.root_locus(G, plot=False)
# guadagno per cui la coppia dominante ha smorzamento 0,5
for K in np.linspace(0.5, 47, 50000):
p = np.roots([1, 6, 8, K])
c = p[np.argmax(p.imag)]
if c.imag > 0 and -c.real / abs(c) <= 0.5:
print(f"K = {K:.2f}, poli = {np.round(p, 3)}")
break
# guadagno critico: radici sull'asse immaginario
print(np.roots([1, 6, 8, 48]))
T = ct.feedback(8.3 * G, 1)
print(ct.step_info(T)["Overshoot"])L’esecuzione stampa
con poli
e
, poi le radici
e
per
, e infine una sovraelongazione del 15,5 %: un po’ meno del 16,3 % di un secondo ordine puro con
, per l’effetto del terzo polo in
, che smorza leggermente la risposta. Con plot=True (o con ct.root_locus_plot nelle versioni più recenti della libreria) si ottiene il disegno con matplotlib.

Gli esercizi, con tutti i casi di questa pagina, sono nella pagina degli esercizi collegata in cima.





Sono l'autore di questa pagina su «Luogo delle radici, approfondimento: le regole dimostrate, casi difficili, MATLAB e Python». Se qualcosa non è chiaro, se vi serve un esempio in più o volete approfondire un punto, scrivetelo qui sotto nei commenti: rispondo personalmente. Se la pagina vi è stata utile, lasciate un voto con le stelle in cima all'articolo.I am the author of this page on “Root locus in depth: the rules proved, difficult cases, MATLAB and Python”. If something is unclear, if you need another example or want to go deeper into a point, write it in the comments below: I answer personally. If the page was useful, leave a star rating at the top of the article.