Control System Stability Analysis Guide
Control System Stability Analysis Guide
zeros/poles in LHP) and stable, the magnitude plot gives pole/zero count vs
frequency.
2. Important anchor: magnitude crosses 0 dB at ωgc = 25 rad/s. Denote G(s) =
∏(s+zi )
K∏ . Use slope changes (from the asymptote drawing) to deduce pole & zero
(s+pj )
Template answer (write this and fill corner frequencies from the picture):
change by −20 dB/dec at each pole and +20 dB/dec at each zero. Suppose from the plot
you observe (example) poles at p1 = a1 , p2 = a2 , … and zeros at z1 = b1 , …. Then:
(s + z1 )(s + z2 ) ⋯
G(s) = K
(s + p1 )(s + p2 ) ⋯
What to hand in: show the corner frequencies read from the plot, count poles/zeros, write
the rational form above, and compute K using the 0 dB crossing. (If the plot shows only
single poles/zeros at obvious decades, use those values.)
Template computation:
For each ωk :
[Link] 4/19
11/30/25, 6:27 PM Solve control system questions
∑poles 20 log10
ωk2 + p2j .
Phase (deg): ∑zeros tan−1 (ωk /zi ) ⋅ (180/π) − ∑poles tan−1 (ωk /pj ) ⋅ (180/π).
Write the numeric table after reading corner frequencies from the plot, evaluate those
expressions at the list of ω values, and plot.
% Define zeros and poles (fill with values read from your asymptotic plot)
zeros = [z1, z2]; % e.g. [1 10]
poles = [p1, p2, p3]; % e.g. [0.1 5 50]
K = ...; % compute from |G(j25)| = 1
s = tf('s');
G = K * prod(s + zeros) / prod(s + poles);
w = [0.5 1 5 10 25 40 100];
[mag,ph] = bode(G, w);
magdb = 20*log10(squeeze(mag));
phdeg = squeeze(ph);
T = table(w', magdb, phdeg, 'VariableNames', {'omega','magnitude_dB','phase_deg'}
bode(G, {0.1,200}) % full bode
grid on
(c) Compute gain crossover, phase crossover, gain & phase margins
Method (write this):
Gain-crossover frequency ωgc : frequency where ∣G(jω)∣
= 1 (0 dB). You know
ωgc = 25 from plot (given).
GM is ∞ dB.
Phase margin: PM = 180∘ + ∠G(jωgc ).
[Link] 5/19
11/30/25, 6:27 PM Solve control system questions
Interpretation: If PM>0 and GM>1 (positive dB) the closed-loop system is stable for unity
feedback. If PM <= 0 or GM <= 1, closed-loop unstable or marginal.
Q2. Root locus sketches and stability (three separate G(s) cases)
General procedure (hand in this and a sketch for each):
numerator
1. Write open-loop L(s) = G(s) ignoring the gain K (i.e., L(s) = ).
denominator
For root locus we consider KG0 (s) where G0 (s) is normalized (no K).
2. Poles are the roots of the denominator; zeros are roots of numerator.
3. Root-locus rules to apply (show your calculations on the sheet):
Number of branches = number of poles np .
Locus on real axis: between poles/zeros where number of real poles/zeros to the
right is odd.
(2q+1)180∘ ∑ poles−∑ zeros
Asymptotes: angles ϕa = n p −n z
, centroid
σa =
n p −n z
.
d
Breakaway/break-in: solve derivative condition ds K(s) = 0 where K(s) =
−1/G0 (s) on real axis.
[Link] 6/19
11/30/25, 6:27 PM Solve control system questions
Q2(a)
K(s + 9)
G(s) = , K ≤ 0 (note: − ∞ < K ≤ 0)
s(s + 1)(s2 + 10s + 25)
Observations:
Poles: s= 0, s = −1, s2 + 10s + 25 = 0 ⇒ s = −5 ± j0 (actually
discriminant 100 − 100 = 0 so double pole at s = −5). So poles at 0, -1, -5
(double).
Zero: s = −9.
Number of poles np= 4 (counting multiplicity), zeros nz = 1.
(2q+1)180
Asymptote angles: ϕ = 3 = {60∘ , 180∘ , 300∘ } measured from positive real
axis.
K sign note: Because the instruction range is K ≤ 0, the locus is traced for negative
gains; interpret results accordingly (mirror RL for negative K may go to zeros at +9?).
Mention angle criterion sign flip.
Conclude: Provide root-locus sketch showing branches from poles moving to the zero at
-9 and going to infinity along the three asymptotes (angles above). Comment on stability:
for which (negative) K is RL in LHP — use MATLAB rlocus to mark stable region.
MATLAB hints:
s = tf('s');
G0 = (s+9)/(s*(s+1)*(s^2+10*s+25));
rlocus(G0) % view real axis, asymptotes, break points
% For negative K use plot of rlocus(-G0) or simply explore K negative:
rlocus(-G0)
[Link] 7/19
11/30/25, 6:27 PM Solve control system questions
Q2(b)
K(s + 1)
G(s) = , K≥0
s3 (s + 2)
Observations:
Poles: triple pole at s=0 (multiplicity 3) and a pole at s=-2 → 4 poles total.
Zero at s=-1.
np − nz = 3 asymptotes again. Centroid:
0 + 0 + 0 + (−2) − (−1) −2 + 1 1
σa = = = − ≈ −0.3333.
3 3 3
∘ ∘ ∘
Asymptote angles: same set: 60 , 180 , 300 .
Key features:
Multiple pole at origin → RL initially departs from origin with equal angular spacing;
expect two branches on imaginary axis for small K (possible instability). Carefully
compute departure angles from origin (use angle criterion).
Breakaway/break-in: solve derivative condition for the real axis segments (between -2
and 0 etc).
Stability comment: Because of high multiplicity at origin, small positive K may move poles
into RHP — check by Routh or numerical RL in MATLAB.
MATLAB commands:
s = tf('s');
G0 = (s+1)/(s^3*(s+2));
rlocus(G0)
% use rlocfind to find K where poles cross imaginary axis:
[k,poles] = rlocfind(G0) % interactively click
Q2(c)
K(s2 + s + 1)
G(s) = , K≥0
s(s + 2)(s + 10)
Observations:
Poles: 0, -2, -10 → three poles.
[Link] 8/19
11/30/25, 6:27 PM Solve control system questions
−1±j 3
Zeros: roots of s2
+ s + 1 which are s = 2
(complex conjugate zeros in LHP).
But since np− nz = 1 only one asymptote at 180° (i.e., along negative real axis) and
it goes to −∞.
Root index: 3 poles → 3 branches; two will typically be attracted to the finite zeros;
one will go to infinity along the real negative axis.
Stability: For K≥0, root locus often stays LHP for small K; ensure no RHP crossings — test
with Routh or plot.
MATLAB:
s = tf('s');
G0 = (s^2+s+1)/(s*(s+2)*(s+10));
rlocus(G0)
Q3. Non-unity feedback system — root locus for K from 0→∞ and find
K for overshoot <5% and settling time <2.5s
Given: Non-unity feedback block (figure in PDF). The hint: rearrange to make characteristic
eqn 1 + K G(s) H(s) = 0. (Because figure is inside PDF, I give general method using
G(s)H(s).)
Mp = e−πζ/
1−ζ 2
π 2 + (ln Mp )2
[Link] 9/19
11/30/25, 6:27 PM Solve control system questions
For Mp = 0.05, ζ ≈ 0.69 (approx). For 5% this gives approx 0.69; for 2% it’s
larger.
4 4 1.6
Settling time (2%): Ts ≈ < 2.5 ⇒ ωn > = .
2.5ζ
ζωn ζ
Procedure to find K:
1. From overshoot spec get minimum ζmin . For 5% we get ζ
≈ 0.69 (compute exactly
in MATLAB with formula above).
2. Choose ζ = required damping (≥ ζmin ). Then from settling time constraint find
required ωn
> 1.6/ζ .
3. Desired dominant pole location sd
1 − ζ 2.
= −ζωn ± jωn
4. Use the angle criterion of root locus: evaluate angle of G(s)H(s) at sd ; it must equal
(2k + 1)π . If it does (or choose ω_n to satisfy it), then find K from magnitude
criterion:
1
K=
∣G0 (sd )H(sd )∣
where G0 is the plant without K (or the open-loop product G(s)H(s) excluding K).
MATLAB recipe: (generic — plug in the actual G(s)H(s) from the figure)
s = tf('s');
G0 = ...; % plant times H(s) without K
rlocus(G0)
zeta_desired = ...; % from Mp spec
% On the rlocus plot, use 'sgrid' to show lines of constant zeta
sgrid(zeta_desired)
% Use rlocfind to click on the desired intersection to get K
[K, poles] = rlocfind(G0)
What to hand in: show the derivation for ζ from Mp < 5%, compute required ωn from
settling-time bound, then show the angle & magnitude criterion used to find K
(symbolically), and present the numeric K (from MATLAB).
[Link] 10/19
11/30/25, 6:27 PM Solve control system questions
controller
Given: Two resonant modes (Mode1 and Mode2) make the open-loop marginally stable
(underdamped). A rate feedback PD compensator needed. Some parts require plots with
GC(s)=1 first, then with PD GC (s) = 0.25(s + 4) in the feedback path.
Because the exact modal frequencies and transfer functions for Mode1/Mode2 are in the
figure in your PDF, I will give a fully general solution + MATLAB recipe to compute
numerically.
Model (general)
Let the two modes be approximated as two lightly-damped second-order transfer
functions (typical aerospace flex modes):
K1 K2
Gm (s) = + 2 .
2
s2 + 2ζ1 ωn1 s + ωn1 s2 + 2ζ2 ωn2 s + ωn2
Open-loop plant (for example) may be G(s) = Gm (s). Closed-loop with gain Kp inside
forward path or feedback depending on figure; follow block diagram to form the closed-
loop characteristic eqn.
poles (resonant pair likely near ±jωn1 and ±jωn2 shifted left by damping).
Use angle criterion: pick desired pole location with small negative real part (sufficient
damping), then compute K using magnitude condition K = 1/∣G0 (sd )∣.
Alternatively use rlocus and sgrid in MATLAB: choose intersection with desired ζ
line and read K.
[Link] 11/19
11/30/25, 6:27 PM Solve control system questions
Kp G(s)
T (s) =
1 + Kp G(s)GC (s)
(scale).
s = tf('s');
% Define modal components (replace with actual numbers from your figure)
Gm1 = K1/(s^2 + 2*zeta1*wn1*s + wn1^2);
Gm2 = K2/(s^2 + 2*zeta2*wn2*s + wn2^2);
G = Gm1 + Gm2;
Gc = 0.25*(s+4);
Use DC gain GOL (0) (open-loop forward path evaluated at s=0). Solve:
1 99
ess = < 0.01 ⇒ K>
1 + K ⋅ GOL (0) GOL (0)
[Link] 12/19
11/30/25, 6:27 PM Solve control system questions
sensitivity and move poles to more desirable locations; show a short numerical
comparison of pole locations for low and high K on the root-locus plot (MATLAB
rlocus with markers at sample K values).
% Compute DC gain:
dc_gain = dcgain(G*Gc); % or dcgain(G) depending where K multiplies
% Solve for K to meet e_ss < 0.01 for step input
required_K = (1/0.01 - 1)/dc_gain; % if e_ss = 1/(1+K*dc_gain)
% Check root movement at K small vs large:
Kvals = [0.1, 1, 10, required_K];
for i=1:length(Kvals)
CL = feedback(Kvals(i)*G*Gc, 1);
poles = pole(CL);
disp([Kvals(i), poles'])
end
s = tf('s');
G = ... % fill from PDF
rlocus(G)
sgrid % shows zeta lines
[Link] 13/19
11/30/25, 6:27 PM Solve control system questions
% Choose point on rlocus that gives maximum achievable damping (largest zeta for w
2. Write down the selected K, show the plot with dominant poles, and compute
overshoot, settling time:
S = stepinfo(CL)
What to hand in: root-locus plot with chosen K annotated, step response screenshot, and
table with K , dominant pole locations, ζ, ω_n, rise time, settling time, overshoot (from
stepinfo ).
− ln(0.10)
ζ= ≈ 0.5912.
π 2 + (ln 0.10)2
1
2. On the root-locus of G0 (s) = find the closed-
(s + 4)(s + 8)(s2 + 10s + 100)
loop pole pair that lies on the constant damping line ζ ≈ 0.5912. Use sgrid and
rlocfind to pick the point; rlocfind returns K and pole locations.
MATLAB commands:
s = tf('s');
G0 = 1/((s+4)*(s+8)*(s^2+10*s+100));
rlocus(G0)
zeta = 0.5912;
sgrid(zeta,[])
[Link] 14/19
11/30/25, 6:27 PM Solve control system questions
CL = feedback(K*G0,1);
S = stepinfo(CL);
disp(['K = ', num2str(K)])
disp(S)
1 1
ess = lim =
s→0 1 + G(s) 1 + KG0 (0)
2
Compute G0 (0) = 1/(4 ⋅ 8 ⋅ 100) = 1/3200 = 0.0003125 (because (s +
10s + 100) at s=0 is 100). So:
1
ess = .
1 + K ⋅ 0.0003125
(c) Design a Lag compensator to improve steady-state error by factor 10 while keeping
MP same
s + zc
Glag (s) = , with pc = zc /α, α ≫ 1.
s + pc
Design target: reduce e_ss by 10 ⇒ increase DC loop gain by factor 10 (i.e., add approx 20
dB of gain at low frequency). But ensure that at the frequency of dominant poles the
magnitude and phase are not significantly changed (so MP remains ≈ same). Typical steps:
1. Determine required DC gain increase ≈ 10.
2. Choose zero zc at a decade below dominant pole frequency ωd , choose pc
= zc /10
= 10); this places extra gain at low frequency but small effect at ωd .
(i.e., α
remains ~10%.
MATLAB sketch:
[Link] 15/19
11/30/25, 6:27 PM Solve control system questions
% Loop TF
L = K * Gc_lag * G0;
rlocus(L)
% Use sisotool(L,1) to design, or tune zc/alpha so step(CL) shows MP~10%, and e_ss
CL = feedback(L,1);
S = stepinfo(CL); e_ss = 1/(1+dcgain(L));
What to hand in: Show calculation of ζ , show rlocus with sgrid, show rlocfind
determination of K, compute e_ss numerically, then show lag compensator design with
values of zc and pc and resulting step response & numerical e_ss (show step plot
before/after).
Part II Q3. Pilot crane control (figure in PDF) — root locus and closed-
loop poles for K=0.2,2,20,100
General recipe (since the exact numeric plant is in PDF figure):
1. Extract plant transfer G(s) from the PDF (Figure 6). Suppose plant from figure is
N (s)
G(s) = D(s)
.
s = tf('s');
G0 = N(s)/D(s);
rlocus(G0)
p_values = [0.2, 2, 20, 100];
for K = p_values
CL = feedback(K*G0,1);
disp(['K=', num2str(K)])
disp(pole(CL)')
end
3. Copy the pole lists into the assignment and paste screenshots of the root locus with
pole markers.
% Uncompensated open-loop
[mag,ph,w] = bode(G, {0.01,1000});
[GM, PM, wgm, wpm] = margin(G);
disp(['Uncompensated GM (dB): ', num2str(20*log10(GM)), ' PM (deg): ', num2str(PM
% With PD in feedback: combine per block diagram (if series with G use G*Gc)
Gc = 0.25*(s+4);
Gcomp = G*Gc;
[GMc, PMc, wgm_c, wpm_c] = margin(Gcomp);
disp(['Compensated GM (dB): ', num2str(20*log10(GMc)), ' PM (deg): ', num2str(PM
% Bode plots
figure; bode(G, {0.01,1000}); title('Uncompensated Bode'); grid on;
figure; bode(Gcomp, {0.01,1000}); title('Compensated Bode'); grid on;
What to hand in: Bode magnitude and phase plots (screenshots) before and after
compensation; report numeric PM and GM values from margin .
[Link] 17/19
11/30/25, 6:27 PM Solve control system questions
Q3: Show derivation of ζ from overshoot spec and ω_n from settling-time spec.
Use angle & magnitude criteria to get K; paste rlocfind numeric result.
Q4: Show modal TF (symbolic), root-locus sketches for GC=1 and with PD
compensator, compute value of K for steady-state error <1% using DC gain
formula; comment on sensitivity.
2. Part II (MATLAB results to include in PDF/Word)
Paste the exact MATLAB commands I gave for each question, run them, save the
Bode/Root-locus/Step-response screenshots, and include those figures in your
PDF/Word submission. Also paste numerical values (K, poles, stepinfo outputs,
gain/phase margins).
− ln(Mp )
Damping from MP → ζ = .
2
π2 + ln (Mp )
4
Settling time (2%) → Ts .
≈
ζωn
(2q+1)180∘
Root locus asymptote angles: ϕa = np −nz .
∑p − ∑z
RL centroid: σa = .
np − nz
[Link] 18/19
11/30/25, 6:27 PM Solve control system questions
(B) Extract the images from your PDF and use them to produce the numeric
answers without you running MATLAB (this is Option 1 you rejected earlier).
You said you wanted the symbolic/generic complete solution — done. If you want me to
produce one fully worked numeric example (e.g., compute Part II Q2(a) completely and
numerically), say which question and I will compute numeric values symbolically here and
show the arithmetic steps. (I will not re-ask for the PDF images; only if you want me to
extract them I will switch to that mode.)
Run numeric for: <list of question numbers> — I’ll compute numeric answers
symbolically here where possible (note: I can’t run actual MATLAB but I can compute
arithmetic / algebra and give final numeric values and exact MATLAB outputs you can
expect).
Otherwise, you can start running the MATLAB code snippets I gave and paste any numeric
[Link] 19/19