Control:
Root Locus
Table of Contents
$$ G(s) = \frac{s^2 + s + 1}{s^3 + 4s^2 + K s + 1} $$
An unknown parameter $K$ appears in the denominator and affects the location of the system's poles.
The poles of the system are the roots of the characteristic equation:
$$ s^3 + 4s^2 + \color{red}{K} s + 1 = 0 $$
How should we choose $K$ to meet specific performance requirements (e.g., stability, damping ratio, or settling time)?
To address this question, we can analyze the effect of $K$ on:
- The location of poles in the complex $s$-plane
- The dominant pole pair affecting the transient response
- Root locus plots, which show how poles move as $K$ varies
By selecting $K$ such that all poles lie in the left half-plane, we ensure stability. To achieve good damping and fast settling, we aim to position dominant poles further left and away from the imaginary axis.
This motivates the use of analytical tools like Routh-Hurwitz, root locus, or numerical root finding to evaluate how different values of $K$ impact the pole locations.
2. Root Locus¶
The root locus technique is a graphical method for examining how the roots (poles) of a closed-loop system move in the complex plane as a system parameter (typically gain $K$) varies.
2.1. Closed-Loop System and Root Locus Equation¶
Given an open-loop transfer function $G(s)$, the standard negative feedback configuration yields a closed-loop transfer function:
$$ T(s) = \frac{K G(s)}{1 + K G(s)} $$
The same denominator system is
$$T(s) = {G(s) \over 1 + KG(s)}$$
The characteristic equation, which determines the poles of the closed-loop system, is:
$$ 1 + K G(s) = 0 $$
The root locus is the plot of all possible closed-loop pole locations in the complex plane as the gain $K$ varies from 0 to $\infty$.
Example
Suppose you are given the following open-loop system:
Then the characteristic equation:
$$ s^3 + 4s^2 + K s + 1 = 0 $$
This equation does not yet appear in the root locus standard form $1 + K G(s) = 0$. To analyze it, we must first isolate the gain term $K$. Rewrite as:
$$ 1 + K \cdot \frac{s}{s^3 + 4s^2 + 1} = 0 $$
Thus, the equivalent open-loop transfer function is:
$$ G(s) = \frac{s}{s^3 + 4s^2 + 1} $$
and the corresponding closed-loop transfer function becomes:
$$ T(s) = \frac{K s}{s^3 + 4s^2 + K s + 1} $$
Now the system is in proper root-locus form.
Key Insight:
To analyze or sketch a root locus, always convert the system’s characteristic equation into the standard form $1 + K G(s) = 0$. Only then can root locus theory and tools (like MATLAB) be correctly applied.
2.2. Definition: Root Locus¶
The root locus is a graphical method used to analyze and design control systems by examining how the closed-loop poles of a system vary as a single parameter - typically the loop gain $K$ - is varied from 0 to $\infty$.
How can we predict or control the movement of closed-loop poles as the gain $K$ changes?
This is a central question in control system design.
The root locus provides a powerful graphical method to answer this question. It allows engineers to:
- Visually assess how the locations of closed-loop poles evolve in the complex plane as the gain $K$ varies from 0 to ∞
- Select an appropriate value of $K$ to achieve desired transient and steady-state performance
- Analyze system stability, damping, and oscillatory behavior without solving high-degree characteristic equations
Advantages of the Root Locus Method
Offers an intuitive, geometric interpretation of how feedback gain affects system dynamics
Enables quick, approximate sketches of root movement for higher-order systems
Provides insight into key system properties such as:
- Stability (whether poles lie in the left or right half-plane)
- Transient response (determined by the distance of poles from the origin)
- Oscillations (related to the imaginary part of complex poles)
- Dominant pole behavior
You may not always need to compute exact closed-loop poles,
but an approximate root locus sketch gives immediate qualitative insight into how the system will behave.
Closed-Loop Transfer Function
For a unity-feedback system with open-loop transfer function $G(s)$, the closed-loop transfer function is:
$$ H(s) = \frac{K G(s)}{1 + K G(s)} $$
The poles of the closed-loop system are the values of $s$ that satisfy the characteristic equation:
$$ 1 + K G(s) = 0 $$
or equivalently:
$$ K G(s) = -1 = 1 \angle (2k + 1)\pi, \quad k = 0, \pm 1, \pm 2, \ldots $$
Root Locus Conditions
A point $s^*$ in the complex plane is on the root locus if and only if:
$$ \begin{cases} \angle KG(s^*) = (2k+1)\pi \quad &\text{(angle condition)} \\\\ |KG(s^*)| = 1 \quad &\text{(magnitude condition)} \end{cases} $$
For any $s^*$ that satisfies the angle condition, the corresponding gain is:
$$ K = \frac{1}{|G(s^*)|} $$
2.3. Root Locus Construction: The Eight Rules¶
To sketch the root locus of a feedback system
$$ H(s) = \frac{KG(s)}{1 + KG(s)} $$
we analyze the characteristic equation:
$$ 1 + K \frac{Q(s)}{P(s)} = 0 \quad \Rightarrow \quad P(s) + K Q(s) = 0 $$
where:
- $P(s)$: denominator of the open-loop transfer function $G(s)$
- $Q(s)$: numerator of the open-loop transfer function $G(s)$
The closed-loop poles are the roots of this equation as the gain $K$ varies from $0$ to $\infty$.
The following eight rules provide the foundation for sketching the root locus by hand.
Rule 1: Number of Branches
The root locus consists of $n$ branches, where:
$$ n = \max(\deg P(s), \deg Q(s)) $$
Each branch represents the trajectory of a closed-loop pole as $K$ varies.
Rule 2: Root Locus Starts at Poles and Ends at Zeros
As the gain $K$ increases from $0$ to $\infty$, the closed-loop poles trace trajectories in the complex plane. These trajectories begin at the poles of the open-loop transfer function $G(s)$ and move toward the zeros of $G(s)$.
This follows from the characteristic equation:
$$ 1 + K \frac{Q(s)}{P(s)} = 0 \quad \Rightarrow \quad P(s) + K Q(s) = 0 $$
Key Observations:
When $K = 0$, the equation reduces to:
$$ P(s) = 0 $$
which gives the open-loop poles.
As $K \to \infty$, we consider the dominant term:
$$ P(s) + K Q(s) \approx K Q(s) = 0 $$
Hence, the closed-loop poles approach the open-loop zeros.
Poles and Zeros at Infinity
If the number of open-loop poles exceeds the number of open-loop zeros, that is, if
$$ \deg P(s) = n > m = \deg Q(s), $$
then the system has $n - m$ zeros at infinity. These are asymptotic destinations for the excess root locus branches.
- A zero at infinity exists if
$$ \lim_{s \to \infty} G(s) = 0 $$
- A pole at infinity exists if
$$ \lim_{s \to \infty} G(s) = \infty $$
The image above illustrates several scenarios of root locus movement depending on the relationship between the number of poles and zeros:
(1) # of poles = # of zeros: each pole goes to a finite zero
(2) # of poles > # of zeros: excess branches go to infinity (zeros at infinity)
(3) # of poles < # of zeros: some branches come in from infinity (poles at infinity)
Example
Let us consider the open-loop transfer function:
$$ KG(s) = \frac{K}{s(s+1)(s+2)} $$
- Poles at: $s = 0,\ -1,\ -2$
- No finite zeros (numerator is constant)
As $s \to \infty$:
$$ KG(s) \approx \frac{K}{s^3} \quad \Rightarrow \quad G(s) \to 0 $$
This implies that the system has three zeros at infinity.
Rule 3: Conjugate Symmetry
The root locus is always symmetric with respect to the real axis.
For systems with real-valued coefficients, complex poles and zeros appear in conjugate pairs.
Consequently, the root locus paths that emerge from these poles must also follow conjugate trajectories.
Rule 4: No Crossings
Each branch of the root locus corresponds to a unique closed-loop pole trajectory as the gain $K$ varies from $0$ to $\infty$.
Therefore, distinct branches of the root locus cannot intersect, cross, or overlap in the complex plane.
Rule 5: Real Axis Segments of the Root Locus
A point on the real axis lies on the root locus if the total number of real open-loop poles and real open-loop zeros to the right of that point is odd.
This rule is derived from the angle condition of the root locus:
$$ \angle KG(s) = (2k+1)\pi $$
Given a rational transfer function
$$ G(s) = \frac{Q(s)}{P(s)} = \frac{\prod (s - z_i)}{\prod (s - p_j)}, $$
(1) For complex conjugate zero and pole pair $\implies \angle G(\cdot) = 0$
(2) The angle of $G(s)$ at any real point $s^*$ is the sum of angles contributed by the vectors from each zero and pole to $s^*$. For real poles and zeros, each such vector contributes either $0$ or $\pi$ (depending on whether $s^*$ is to the right or left of the pole or zero).
Therefore, the angle of $G(s^*)$ is a multiple of $\pi$, and the angle condition is satisfied only when the number of real poles and zeros to the right of $s^*$ is odd. In that case, the angle is $\pm\pi$, and the point lies on the root locus.
Rule 6: Breakaway and Break-in Points
Breakaway and break-in points occur along the real axis when multiple root locus branches either diverge from or converge to the real axis between real poles and/or zeros.
Let the characteristic equation be written as:
$$ 1 + K \frac{Q(s)}{P(s)} = 0 \quad \Longleftrightarrow \quad P(s) + KQ(s) = 0 $$
To determine possible breakaway or break-in points:
(1) Solve for $K$ from the characteristic equation:
$$ K = -\frac{P(s)}{Q(s)} $$
(2) Differentiate with respect to $s$ and solve:
$$ \frac{dK}{ds} = 0 $$
Real solutions of this equation (that lie on segments identified in Rule 5) are candidate breakaway or break-in points.
At a breakaway point:
- Multiple branches depart the real axis and move into the complex plane.
At a break-in point:
- Multiple branches approach the real axis and merge at a single point.
For two branches, the departure or entry angle is typically $90^\circ$ or $270^\circ$, consistent with conjugate symmetry. More generally, the angle of departure depends on the number and configuration of surrounding poles and zeros.
Rule 7: Branches Going to Infinity
If the number of open-loop poles exceeds the number of open-loop zeros, that is:
$$ n = \text{deg}(P(s)) > m = \text{deg}(Q(s)), $$
then:
- There are exactly $n - m$ root locus branches that do not terminate at finite zeros.
- These excess branches extend to infinity in the complex plane.
As $K \to \infty$, these branches follow asymptotic paths determined by:
- Their number: $n - m$
- Their angles and centroid: governed by Rule 8
These asymptotic behaviors allow us to approximate the trajectory of root locus branches without computing exact pole locations.
Rule 8: Asymptotes
If the number of poles exceeds the number of zeros ($n - m > 0$), then some branches of the root locus go to infinity along asymptotes. These asymptotes are determined by their angle and centroid.:
Angle of Asymptotes:
$$ \phi_A = \frac{(2k+1)\pi}{n - m}, \quad k = 0, 1, \ldots, n - m - 1 $$
Centroid of Asymptotes:
$$ \sigma_A = \frac{\sum \text{(finite poles)} - \sum \text{(finite zeros)}}{n - m} $$
(brief proof) Lines go to infinity along asymtotes
$$ \begin{align*} G(s) &= {1 \over (s+1)(s+2)} \approx {1 \over s}\cdot{1 \over s} \\\\ \angle G(s) &= \pi + 2k\pi \\ &\approx 0 - 2\alpha = \begin{cases} \pi\\ -\pi\\ \end{cases}\\\\ \therefore \alpha &= {\pi \over 2} \;\text{ or}\; -{\pi \over 2} \end{align*} $$
$$$$
$$ \phi_A = {(2k+1)\pi \over n - m}$$
(brief proof) The centroid of the asymptotes
$$ \sigma_A = {{\sum \text{finite poles} - \sum \text{finite zeros}}\over {n-m}} $$
Given the system transfer function
$$G(s) = \beta\frac{(s-z_1)(s-z_2)\cdots}{(s-p_1)(s-p_2)\cdots} = \beta \frac{s^m - \left(\sum z_i \right)s^{m-1} + \cdots}{s^n - \left(\sum p_i \right)s^{n-1} + \cdots}, \quad \text{assume }\; n>m$$
For a large value of $s$, $G(s)$ approximately looks like having $n-m$ repeated poles at $\sigma_A$ on the real axis
$$ \begin{align*} G(s) = \beta \frac{s^m - \left(\sum z_i \right)s^{m-1} + \cdots}{s^n - \left(\sum p_i \right)s^{n-1} + \cdots} \; &\approx \;\beta \frac{1}{(s-\sigma_A)^{n-m}} = \beta \frac{1}{s^{n-m} - (n-m) \sigma_A s^{n-m-1} + \cdots}\\\\\\ \left(s^m - \left(\sum z_i \right)s^{m-1} + \cdots \right) \left(s^{n-m} - (n-m) \sigma_A s^{n-m-1} + \cdots \right) \; &\approx \; s^n - \left(\sum p_i \right)s^{n-1} + \cdots \\\\ s^n - \left( \sum z_i + (n-m) \sigma_A \right)s^{n-1} + \cdots \; &\approx \; s^n - \left(\sum p_i \right)s^{n-1} + \cdots \\\\\\ \sum z_i + (n-m) \sigma_A &= \sum p_i \\\\ \therefore \; \sigma_A &= \frac{\sum p_i - \sum z_i}{n-m} \end{align*} $$
- If $n-m = 1$
$$ \phi_{A} = {{2 \centerdot 0 + 1}\over{1}}180 = 180\,^{\circ}$$
- If $n-m = 2$
$$ \begin{align*} \phi_{A1} &= {{2 \centerdot 0 + 1}\over{2}}180 = 90\,^{\circ}\\ \phi_{A2} &= {{2 \centerdot 1 + 1}\over{2}}180 = 270\,^{\circ} \\\\ \sigma_A &= {{(-2 - 1) - (0)}\over{2}}= -1.5 \end{align*} $$
- If $n-m = 3$
$$ \begin{align*} \phi_{A1} &= {{2 \centerdot 0 + 1}\over{3}}180 = 60\,^{\circ}\\ \phi_{A2} &= {{2 \centerdot 1 + 1}\over{3}}180 = 180\,^{\circ}\\ \phi_{A3} &= {{2 \centerdot 2 + 1}\over{3}}180 = 300\,^{\circ}\\\\ \sigma_A &= {{(-1 -2 -3) - (0)}\over{3}}= -2 \end{align*} $$
- If $n-m = 4$
$$ \begin{align*} \phi_{A1} &= {{2 \centerdot 0 + 1}\over{4}}180 = 45\,^{\circ}\\ \phi_{A2} &= {{2 \centerdot 1 + 1}\over{4}}180 = 135\,^{\circ}\\ \phi_{A3} &= {{2 \centerdot 2 + 1}\over{4}}180 = 225\,^{\circ}\\ \phi_{A4} &= {{2 \centerdot 3 + 1}\over{4}}180 = 315\,^{\circ}\\\\ \sigma_A &= {{(1+2-1-2) - (0)}\over{4}}= 0 \end{align*} $$
2.4. Break-away and Break-in Points¶
Break-away and break-in points occur when multiple branches of the root locus meet or separate along the real axis.
- A break-away point is where branches depart from the real axis into the complex plane
- A break-in point is where branches merge back onto the real axis
To find these points, we differentiate the closed-loop gain $K$ with respect to $s$. On the root locus:
$$ K = -\frac{1}{G(s)} $$
Break-away and break-in points occur when:
$$ \frac{dK}{ds} = \frac{d}{ds} \left( -\frac{1}{G(s)} \right) = 0 $$
Example
Let:
$$ G(s) = \frac{1}{(s + 2)(s + 4)} $$
Then the characteristic equation is:
$$ 1 + \frac{K}{(s + 2)(s + 4)} = 0 \quad \Rightarrow \quad s^2 + 6s + 8 + K = 0 $$
Solving for $s$:
$$ s = -3 \pm \sqrt{1 - K} $$
- When $K < 1$: roots are real and distinct (overdamped)
- When $K = 1$: roots are real and repeated (critically damped)
- When $K > 1$: roots are complex (underdamped)
As $K$ varies, the number and nature of the solutions change:
- $K$: small → real roots → break-away occurs as roots coalesce and depart from real axis
To find the exact break-away point:
$$ K = - (s + 2)(s + 4) = - (s^2 + 6s + 8) $$
Differentiate with respect to $s$:
$$ \frac{dK}{ds} = - (2s + 6) = 0 \quad \Rightarrow \quad s = -3 $$
Thus, the break-away point is at $s = -3$.
2.5. Angles of Departure and Arrival for Complex Poles and Zeros¶
When a complex pole or zero exists in a system, the root locus may depart or arrive from/to that point at a specific angle. These angles are determined by analyzing the total phase contributed by the other poles and zeros.
Let:
$$ G(s) = \frac{s}{(s - (-1 + i))(s - (-1 - i))} $$
This system has:
- One zero at the origin: $s = 0$
- Two complex poles: $s = -1 \pm i$
Find the angle of departure from the complex pole at $p = -1 + i$.
The angle of departure from a complex pole $p$ is given by:
$$ \angle G(p) = \pi + 2k\pi, \quad k \in \mathbb{Z} $$
That is:
$$ \angle (\text{vector to zero}) - \sum \angle (\text{vectors to all other poles}) = \pi $$
Let's evaluate $\angle G(p)$ by computing vector angles from the other singularities (poles and zeros) to $p = -1 + i$:
- Vector from the zero at 0 to $p = -1 + i$:
This vector points from the origin to $-1 + i$. The angle is:
$$ \angle_z = \arg(-1 + i) = \frac{3\pi}{4} $$
- Vector from the other pole at $-1 - i$ to $p = -1 + i$:
The vector from $-1 - i$ to $-1 + i$ is vertical and upward. The angle is:
$$ \angle_{\text{pole 2}} = \frac{\pi}{2} $$
- Vector from the pole at $p = -1 + i$ to itself is undefined, so we exclude it from the sum.
Using the departure angle formula:
$$ \angle G(p) = \angle_z - \sum \angle_{\text{other poles}} = \pi $$
Substituting:
$$ \underbrace{\left({3 \over4} \pi + 0 \right)}_{\text{zeros}} - \underbrace{\left( {\pi \over 2} + \theta \right)}_{\text{poles}} = \pi $$
Solving:
$$ \theta = -\frac{3\pi}{4} $$
This means the root locus departs from this pole downward into the complex plane at a $135^\circ$ angle measured clockwise from the positive real axis.
2.6. Root Locus for Stability¶
Consider the open-loop plant:
$$ G(s) = \frac{1}{(s+1)(s - 2)} $$
This system has:
- A stable pole at $s = -1$
- An unstable pole at $s = 2$
Proportional Control
Using a proportional controller $K$:
$$ L(s) = K \cdot G(s) = \frac{K}{(s+1)(s - 2)} $$
Observation:
The root locus starts at the poles ($s = -1,\ 2$) and no matter the value of $K > 0$, at least one pole remains in the right-half plane (RHP).
Therefore, the closed-loop system is always unstable with proportional control only.
Add a Zero with a PD Controller
To modify the root locus, we can add a zero by introducing a derivative term. Consider a PD controller:
$$ C(s) = K(s + z) $$
Try:
$$ C(s) = K(s + 3) $$
Then the open-loop transfer function becomes:
$$ L(s) = \frac{K(s + 3)}{(s+1)(s - 2)} $$
This new root locus, shown on the right in the figure, reveals that:
For some values of $K$, both poles can lie in the left-half plane, making the system stable.
The added zero pulls the locus into the left-half plane and reshapes the trajectory.
This highlights the design power of root locus methods — we can visualize how controller parameters affect system stability and performance.
- A proportional controller alone is not sufficient for stabilizing the system.
- Adding a zero (via a PD controller) reshapes the root locus and enables closed-loop stabilization.
s = tf('s');
G = (s + 7)/(s*(s + 5)*(s + 15)*(s + 20));
[y,tout] = step(G); % unstable
plot(tout,y), axis tight
xlabel('t'), title('Unstable step response')
pole(G)
k = 800;
Gcl = feedback(k*G,1,-1)
pole(Gcl)
[y,tout] = step(Gcl);
plot(tout,y,tout,ones(size(tout)),'k--'), axis tight, ylim([0,1.2])
pzmap(Gcl)
K = 350;
Gcl = feedback(K*G,1,-1);
pzmap(Gcl)
[y,tout] = step(Gcl);
plot(tout,y,tout,ones(size(tout)),'k--'),
axis tight, ylim([0,1.2]), xlabel('t'), title('Step response')
rlocus
in MATALB
rlocus(G)
axis([-22,3,-20,20])
help rlocus
Standard Form of Root Locus
$$s^3 + 4s^2 + Ks + 1 = 0$$
K = 0;
f = [1, 4, K, 1];
p = roots(f)
plot(real(p), imag(p), 'rx', 'linewidth', 2), hold on
ylim([-1, 1])
xlim([-4,1])
line([0 0], ylim, 'LineStyle', '--', 'Color', 'k');
line(xlim, [0 0], 'LineStyle', '--', 'Color', 'k');
K = 2;
f = [1, 4, K, 1];
p = roots(f);
plot(real(p), imag(p), 'rx', 'linewidth', 2);
ylim([-1, 1])
xlim([-4,1])
line([0 0], ylim, 'LineStyle', '--', 'Color', 'k');
line(xlim, [0 0], 'LineStyle', '--', 'Color', 'k');
f = [1, 4, 0, 1];
p = roots(f);
plot(real(p), imag(p), 'rx'), hold on
for K = 0 : 0.1 : 10
f = [1, 4, K, 1];
p = roots(f);
plot(real(p), imag(p), 'r.')
end
hold off
ylim([-1, 1])
xlim([-4,1])
axis equal
line([0 0], ylim, 'LineStyle', '--', 'Color', 'k');
line(xlim, [0 0], 'LineStyle', '--', 'Color', 'k');
Covert it to the stardard form of root locus
$$s^3 + 4s^2 + Ks + 1 = 0 \Rightarrow 1 + K{s \over s^3 + 4s^2 + 1} = 1 + KG(s) = 0 $$
G = tf([1, 0], [1, 4, 0, 1]);
pole(G)
zero(G)
pzmap(G)
ylim([-1, 1])
rlocus(G)
axis equal
xlim([-5,2])
Examples of Root Locus
Example 1: Lines leave the real axis at 90 degrees
$$G(s) = {s + 1 \over s^2 + s - 2}$$
G = tf([1, 3], [1, 1, -2]);
rlocus(G)
axis equal
Example 2: Asymptotes
$$G(s) = {1 \over s^4 + 12s^3 + 64s^2 + 128s} $$
G = tf([1], [1, 12, 64, 128, 0]);
rlocus(G)
axis equal
Example 3: determining the breakaway points
$$G(s) = {1 \over (s+2)(s+4)}$$
G = tf([1], [1, 6, 8]);
rlocus(G)
axis equal
$$G(s) = {(s-3)(s-5) \over (s+1)(s+2)}$$
G = tf([conv([1, -3],[1, -5])], [conv([1, 1], [1, 2])]);
rlocus(G)
axis equal
Example 4: Departure angle
$$G(s) = {s \over (s-(1+i))(s - (1 - i))}$$
G = tf([1, 0], [1, 2, 2]);
rlocus(G)
axis equal
$$G(s) = {s+1 \over (s+2)(s^2+4s+8)}$$
G = tf([1, 1], [conv([1, 2], [1, 4, 8])]);
rlocus(G)
axis equal
xlim([-4,0.5])
from IPython.display import YouTubeVideo
YouTubeVideo('CRvVDoQJjYI', width = "560", height = "315")
from IPython.display import YouTubeVideo
YouTubeVideo('eTVddYCeiKI', width = "560", height = "315")
from IPython.display import YouTubeVideo
YouTubeVideo('jb_FiP5tKig', width = "560", height = "315")
from IPython.display import YouTubeVideo
YouTubeVideo('WLBszzT0jp4', width = "560", height = "315")
from IPython.display import YouTubeVideo
YouTubeVideo('pG3_b7wuweQ', width = "560", height = "315")
%%javascript
$.getScript('https://kmahelona.github.io/ipython_notebook_goodies/ipython_notebook_toc.js')