Root Locus
English translation
Execution setup
The Python option uses python-control. If the module is missing, run %pip install control==0.10.2 in a Colab or Jupyter code cell.
Learning objectives
Examine how choosing a gain relates to pole locations and the time response.
Gain and closed-loop poles
Starting conditions
. Use .
Procedure
- Plot the root locus and mark the poles of
feedback(K*L,1)for each K using distinct symbols. - Tabulate the real parts of the poles and stability for each case.
- Predict pole movements and response changes relative to the baseline condition .
Results to retain
- 1 root-locus plot and a pole table for each K.
import numpy as np
import matplotlib.pyplot as plt
import control as ctl
s = ctl.tf('s')
L=(s+7)/(s*(s+5)*(s+15)*(s+20))
ctl.root_locus_plot(L)
for k in [100,500,1000]: print(k,ctl.poles(ctl.feedback(k*L,1)))
Record results and self-check
K:
Closed-loop Pole:
Maximum real part:
Stability:
Points to check
- Do the root-locus points match the directly calculated closed-loop poles?
- Are complex roots still conjugate pairs?
Testing predictions with time responses
Starting conditions
Apply a unit step over s to the same model and gain.
Procedure
- Calculate overshoot and settling time only for stable cases.
- Explain the relationship between the slowest pole pair and oscillation and decay in the time response.
- : add one value above or below this and test your prediction.
Results to retain
- A response plot and performance table including all 4 conditions.
import numpy as np
import matplotlib.pyplot as plt
import control as ctl
s = ctl.tf('s')
L=(s+7)/(s*(s+5)*(s+15)*(s+20))
t=np.linspace(0,8,1601)
T=ctl.feedback(500*L,1)
t,y=ctl.step_response(T,t)
plt.plot(t,y);plt.xlabel('Time [s]');plt.grid()
# TODO: Add the remaining gains.
Record results and self-check
K:
Overshoot [%]:
Settling Time [s]:
Agreement with predictions:
Points to check
- Did you avoid forcing convergence metrics for unstable cases?
- Did you distinguish predictions based on poles from actual observations?
Applying the same procedure to other models
Starting conditions
Use and .
Procedure
- Create a root-locus plot, pole table, and step plot for L2 in the same format.
- Determine whether gain changes produce the same pattern in the higher-order model L and in L2.
- Explain whether conclusions from one model can be applied directly to another.
Results to retain
- A comparison summary table for both models and a brief interpretation.
import numpy as np
import matplotlib.pyplot as plt
import control as ctl
s = ctl.tf('s')
L2=(s+2)/(s*s+2*s+3)
for k in [.5,2,10]:print(k,ctl.poles(ctl.feedback(k*L2,1)))
Record results and self-check
Model:
K:
Pole:
Overshoot [%]:
Settling Time [s]:
Points to check
- Did you reconstruct the closed-loop expression for each model?
- Did you avoid treating equal gain values as evidence of equal performance in the two systems?