The Routh–Hurwitz Stability Criterion
Chapter 10 reduced stability to the location of the characteristic roots but left us with no way to find them; the Routh–Hurwitz criterion closes that gap by counting the right-half-plane roots of any polynomial from a short table of cross-multiplications, so that stability — and the exact gain range that preserves it — can be decided without solving for a single root.
- Why a test that counts right-half-plane roots is worth more than a root-finder.
- How to build the Routh array from the coefficients of \(D(s)\), row by row.
- The criterion itself: the number of sign changes in the first column equals the number of RHP roots.
- Why that count is correct — verified exactly for \(n=2\) and \(n=3\), and argued in general.
- The two special cases: a zero in the first column and an entire row of zeros, and what each one means physically.
- How to extract a stabilising gain range, the critical gain, the frequency of oscillation, and a relative-stability margin.
A Test Without Roots
Chapter 10 finished with a clean statement and an awkward practical problem. The statement: a closed loop is stable if and only if every root of its characteristic equation \(1+G(s)H(s)=0\) lies in the left half-plane. The problem: for a third-order polynomial the roots are already painful to compute by hand, and Abel's theorem guarantees that from the fifth degree onwards no formula in radicals exists at all. A criterion that requires the roots is no criterion.
What saves the situation is that we never actually wanted the roots. We wanted one integer — how many of them lie in the right half-plane — and, in design problems, the values of a parameter that keep that integer at zero. In 1877 Edward Routh produced a procedure that delivers exactly that integer using nothing but the coefficients of the polynomial and a sequence of two-by-two cross-multiplications. Adolf Hurwitz arrived independently at an equivalent determinant test in 1895, and the combined result carries both names.
What the Coefficients Already Tell Us
Write the characteristic polynomial in descending powers, always with a positive leading coefficient — if \(a_n\) is negative, multiply the whole polynomial by \(-1\), which changes no root:
Section 10-6 established the necessary condition: if all roots are in the left half-plane then \(D(s)\) is a product of factors \((s+\sigma)\) and \((s^2+2\zeta\omega_n s+\omega_n^2)\) with every coefficient positive, and such a product cannot produce a zero or a negative coefficient. So a missing power, or a coefficient of the wrong sign, settles the matter instantly — the system is unstable and no array need be built.
The reverse does not hold. Chapter 10's example \(s^3+s^2+2s+8=(s+2)(s^2-s+4)\) has four positive coefficients and two right-half-plane roots. Routh's contribution is precisely to supply the missing sufficiency: a test that decides the cases the coefficient scan cannot.
One exception is worth remembering: when a parameter such as \(K\) appears in the coefficients, the scan produces necessary conditions on \(K\) (for instance \(K>0\)) that the array's conditions must then be intersected with. Both sets must hold.
Building the Routh Array
The array has \(n+1\) rows, labelled \(s^n\) down to \(s^0\). The first two rows are just the coefficients of \(D(s)\), dealt out alternately: the \(s^n\) row takes \(a_n, a_{n-2}, a_{n-4},\dots\) and the \(s^{n-1}\) row takes \(a_{n-1}, a_{n-3}, a_{n-5},\dots\). Missing entries at the end of a row are treated as zero.
| Row | Column 1 | Column 2 | Column 3 |
|---|---|---|---|
| \(s^n\) | \(a_n\) | \(a_{n-2}\) | \(a_{n-4}\) |
| \(s^{n-1}\) | \(a_{n-1}\) | \(a_{n-3}\) | \(a_{n-5}\) |
| \(s^{n-2}\) | \(b_1\) | \(b_2\) | \(b_3\) |
| \(s^{n-3}\) | \(c_1\) | \(c_2\) | |
| \(\vdots\) | \(\vdots\) | ||
| \(s^0\) | \(a_0\) |
Every later entry comes from the two rows immediately above it. To compute an entry, take the two-by-two block formed by the first column of those two rows and the column one place to the right of the entry being computed, evaluate its determinant, and divide by the first-column element of the row directly above — with a minus sign in front:
The pattern continues downwards, each row one entry shorter than the pair above it, until the \(s^0\) row is reached with a single element — which always turns out to be \(a_0\) itself. Two conveniences make the arithmetic lighter. Any row may be multiplied or divided by a positive constant without affecting anything that follows, since the recursion is homogeneous and the signs are what matter. And missing entries are zeros, so a determinant with a zero in it simply loses a term.
The Criterion, and Why It Works
Only the first column is read. The remaining columns exist solely to feed the recursion, and their signs carry no meaning.
A rule this convenient invites suspicion, so it is worth verifying rather than accepting. Take the quadratic \(D(s)=a_2s^2+a_1s+a_0\) with \(a_2>0\). The array is short:
The two roots satisfy \(p_1+p_2=-a_1/a_2\) and \(p_1p_2=a_0/a_2\). Those two relations decide everything, and the four sign combinations can be checked one by one against the first column \((a_2,a_1,a_0)\).
| \(a_1\) | \(a_0\) | What the root relations force | RHP roots | Sign changes |
|---|---|---|---|---|
| \(>0\) | \(>0\) | Sum negative, product positive → both roots in LHP | 0 | 0 |
| \(<0\) | \(>0\) | Sum positive, product positive → both roots in RHP | 2 | 2 \((+,-,+)\) |
| \(>0\) | \(<0\) | Product negative → one real root of each sign | 1 | 1 \((+,+,-)\) |
| \(<0\) | \(<0\) | Product negative → one real root of each sign | 1 | 1 \((+,-,-)\) |
The count matches in every case, so for \(n=2\) the criterion is not a rule of thumb but a theorem we have just proved. Now the cubic \(D(s)=a_3s^3+a_2s^2+a_1s+a_0\), which is where the array first does real work:
With \(a_3>0\), all four first-column entries share that sign exactly when \(a_2>0\), \(a_0>0\), and \(a_2a_1 > a_3a_0\). The last of these is the condition the coefficient scan cannot see, and it is the whole content of the cubic case. Hurwitz's formulation writes the same three conditions as determinants \(\Delta_1=a_2\), \(\Delta_2=a_2a_1-a_3a_0\), \(\Delta_3=a_0\Delta_2\), all required positive; in general Routh's first-column entries are precisely the ratios \(\Delta_k/\Delta_{k-1}\), which is why the two criteria are one criterion.
For arbitrary \(n\) the count follows from a continuity argument. Imagine the coefficients of \(D(s)\) varying smoothly. The roots move smoothly with them, and a root can pass from the left half-plane to the right only by crossing the imaginary axis. Section 11-6 shows that at exactly the moment of such a crossing an entire row of the array vanishes — the array registers the event. Between crossings no first-column entry can pass through zero without that happening, so the sign pattern is frozen while the root count is frozen, and both change together. Anchoring the correspondence at a polynomial whose roots we know, such as a product of factors \((s+1)\), fixes the count as zero there and propagates it everywhere else.
Special Case I: A Zero in the First Column
The recursion divides by the first-column entry of the row above. If that entry is zero while the rest of its row is not, the next row cannot be computed and the array stalls. This is a computational accident, not a physical one, and there are two standard ways past it.
The epsilon method replaces the offending zero with a small positive number \(\varepsilon\), continues the array symbolically, and then takes the limit \(\varepsilon\to 0^{+}\) when reading the signs. It works because the array's entries are continuous functions of the coefficients away from the singularity, so the sign pattern of the perturbed polynomial is the sign pattern of the original one. In practice only the leading behaviour matters: an entry like \((4\varepsilon-12)/\varepsilon\) tends to \(-12/\varepsilon\), which is large and negative, and that sign is all we record.
The reciprocal-polynomial method avoids the limit altogether. Reversing the order of the coefficients of \(D(s)\) produces the polynomial whose roots are the reciprocals \(1/p_i\) of the original roots. Since \(\operatorname{Re}\{1/p\}\) has the same sign as \(\operatorname{Re}\{p\}\), reversal preserves which half-plane each root sits in, and therefore preserves the RHP count — but it usually reshuffles the arithmetic enough that the zero does not reappear. Example 3 works one polynomial both ways and gets the same answer.
The perturbed entry is large and of one sign on the way in and of the other on the way out, which is exactly what a pair of sign changes looks like. A first column that stalls is never the first column of a stable system.
Special Case II: An Entire Row of Zeros
Occasionally a whole row comes out zero. This is not an accident of arithmetic; it carries information. A row of zeros appears exactly when \(D(s)\) contains a factor whose roots are symmetrically placed about the origin of the \(s\)-plane — a pair \(\pm j\omega\) on the imaginary axis, a real pair \(\pm\sigma\), or a full quadruplet \(\pm\sigma\pm j\omega\). Each of these patterns is invariant under \(s\to -s\), which is what makes it an even polynomial in \(s\), and an even factor is what stops the recursion.
The procedure is fixed. Form the auxiliary polynomial \(A(s)\) from the row immediately above the row of zeros, reading its entries as coefficients of descending even powers of \(s\). Differentiate \(A(s)\) with respect to \(s\), place the coefficients of \(dA/ds\) in the vanished row, and continue the array as usual. The roots of \(A(s)\) are themselves roots of \(D(s)\) — the symmetric set — and can be found explicitly, since \(A(s)\) is always even and therefore quadratic in \(s^2\).
Why differentiation? The row of zeros appears because the remaining polynomial from that point down is exactly \(A(s)\), and Routh's recursion applied to an even polynomial has nothing left to eliminate. Replacing the row by the coefficients of \(A'(s)\) supplies the missing odd powers without disturbing the sign information: \(A'(s)\) has one root between each adjacent pair of roots of \(A(s)\) along any ray, so it interlaces them and the completed array continues to count correctly.
Reading the result requires both halves of the array. The sign changes below the auxiliary row count the right-half-plane members of the symmetric set; the sign changes over the whole first column count all right-half-plane roots of \(D(s)\). If there are no sign changes anywhere, the symmetric set is a pure imaginary pair (or several), and the system is marginally stable — oscillating for ever at the frequencies given by the roots of \(A(s)\).
This is why a design problem's critical gain is found by making a row vanish: the row of zeros is the crossing of the imaginary axis, and the auxiliary polynomial hands over the oscillation frequency for free.
Designing with Routh
The criterion earns its place in design, not in classification. Two applications matter.
Gain ranges. When the loop gain \(K\) is unknown, it enters the characteristic polynomial linearly and therefore appears in the array's entries. Demanding that every first-column entry keep the sign of \(a_n\) turns into a set of inequalities in \(K\), and their intersection is the stabilising range. The endpoints of that range are the critical gains, and at each endpoint a row vanishes, so the auxiliary polynomial delivers the frequency at which the loop would oscillate there. This single calculation answers the two questions a designer actually asks: how much gain may I use, and what will go wrong when I use too much.
Relative stability. Section 10-7 defined the degree of relative stability \(\sigma_1\) and showed that the substitution \(s=z-\sigma_1\) slides the line \(\operatorname{Re}\{s\}=-\sigma_1\) onto the imaginary axis of the \(z\)-plane. Routh's criterion applied to \(D(z-\sigma_1)\) therefore answers the sharper design question: are all poles at least \(\sigma_1\) deep in the left half-plane, so that the settling time is no worse than \(4/\sigma_1\)? Nothing about the procedure changes; only the polynomial fed into it does. Example 5 works this through, and it is the standard way a settling-time specification is converted into a test.
Worked Examples
Problem. How many roots of \(D(s)=s^4+2s^3+3s^2+4s+5\) lie in the right half-plane?
Solution. All coefficients are present and positive, so the scan is passed and the array must be built. Deal the coefficients into the first two rows and apply the recursion.
The first column reads \(1,\;2,\;1,\;-6,\;5\). Going down, the sign goes positive, positive, positive, negative, positive: two sign changes, so two roots lie in the right half-plane and the system is unstable. Direct root-finding confirms it — the roots are \(-1.288\pm j0.858\) and \(0.288\pm j1.416\) — but note that the array reached the answer using only additions and multiplications.
Problem. For \(G(s)=\dfrac{K}{s(s+1)(s+5)}\) with unity feedback, find all \(K\) for which the closed loop is stable, and the frequency of oscillation at the upper limit.
Solution. The characteristic equation is \(s^3+6s^2+5s+K=0\), the same polynomial treated by trial substitution in Section 10-6. Build the array, leaving \(K\) as a symbol.
Every first-column entry must be positive. The \(s^0\) row gives \(K>0\); the \(s^1\) row gives \(30-K>0\). Intersecting them:
At \(K=30\) the \(s^1\) row vanishes, which by Section 11-6 means roots symmetric about the origin. The auxiliary polynomial comes from the \(s^2\) row: \(A(s)=6s^2+30\), whose roots are \(s=\pm j\sqrt5\). The loop oscillates at \(\sqrt5\approx 2.24\) rad/s at the critical gain — the answer obtained in Chapter 10 by separating real and imaginary parts, now produced automatically.
Problem. Determine the number of right-half-plane roots of \(D(s)=s^5+2s^4+2s^3+4s^2+11s+10\).
Solution. The scan is passed. The first two rows are \((1,2,11)\) and \((2,4,10)\), and the \(s^3\) row is
The first entry is zero but the row is not, so replace it by \(\varepsilon>0\) and continue.
Now take \(\varepsilon\to0^{+}\). The \(s^2\) entry behaves as \(-12/\varepsilon\), a large negative number. The \(s^1\) entry tends to \(6\), positive, because the correction term vanishes with \(\varepsilon\). The first column is therefore \(+,\,+,\,+,\,-,\,+,\,+\): two sign changes, two right-half-plane roots.
The reciprocal method confirms it. Reversing the coefficients gives \(10s^5+11s^4+4s^3+2s^2+2s+1\), whose array has first column \(10,\;11,\;\tfrac{24}{11},\;-3.5,\;1.714,\;1\) — again two sign changes, and no zero to work around.
Problem. Classify the system with \(D(s)=s^5+7s^4+6s^3+42s^2+8s+56\).
Solution. The first two rows are \((1,6,8)\) and \((7,42,56)\); divide the second by \(7\) to give \((1,6,8)\). The \(s^3\) row then comes out entirely zero:
Take the auxiliary polynomial from the \(s^4\) row above it and differentiate:
The first column is entirely positive, so no roots lie in the right half-plane. But the vanished row means roots symmetric about the origin, and factoring the auxiliary polynomial identifies them:
Four simple poles sit on the imaginary axis and the fifth root is at \(s=-7\). The system is marginally stable, ringing indefinitely at both \(\sqrt2\approx1.41\) rad/s and \(2\) rad/s. A first column with no sign changes was not, by itself, a certificate of stability.
Problem. Do all roots of \(D(s)=s^3+10s^2+31s+30\) lie to the left of \(s=-1\)? What settling time does the answer guarantee?
Solution. Substitute \(s=z-1\) so that the line \(\operatorname{Re}\{s\}=-1\) becomes the imaginary axis of the \(z\)-plane, and expand.
Apply the criterion to the shifted polynomial:
No sign changes, so every root of the shifted polynomial is in the left half of the \(z\)-plane, and therefore every root of \(D(s)\) lies to the left of \(s=-1\). The natural response is bounded by an envelope \(Me^{-t}\), giving \(t_s \le 4/1 = 4\) s. (The roots happen to be \(-2,-3,-5\), so the true settling time is nearer \(4/2=2\) s; the shift test gives a guarantee, not an exact value.)
Problem. A unity-feedback loop has characteristic polynomial \(D(s)=s^4+6s^3+11s^2+6s+K\). Find the range of \(K\) for stability, and the frequency at which the loop oscillates at the critical gain.
Solution. Build the array with \(K\) carried through.
Positivity of the \(s^1\) entry requires \(K<10\), and positivity of the \(s^0\) entry requires \(K>0\), so the loop is stable for \(0 < K < 10\). At \(K=10\) the \(s^1\) row vanishes; the auxiliary polynomial from the \(s^2\) row is
So the critical gain is \(K=10\) and the loop then oscillates at \(\omega=1\) rad/s. A check confirms the pair: at \(K=10\) the remaining roots are \(-3\pm j1\), and substituting \(s=j\) into \(D(s)\) gives \(1-11+10 + j(-6+6) = 0\) exactly.
Chapter Summary
A missing power or a sign disagreement in \(D(s)\) proves instability with no arithmetic.
Two rows of alternating coefficients, then cross-multiplication down to the \(s^0\) row.
Sign changes in the first column = number of roots in the right half-plane.
Replace by \(\varepsilon\to0^{+}\) or reverse the coefficients; either way the system is not stable.
Symmetric roots. Use \(dA/ds\) to continue; \(A(s)=0\) gives the oscillation frequency.
First-column inequalities give the gain range; the shift \(s=z-\sigma_1\) tests settling.
Problems
Scan the coefficients before building anything, and state the number of right-half-plane roots explicitly rather than only the verdict. Assume unity feedback where a loop is described by \(G(s)\) alone. Difficulty rises down the list.
- Build the Routh array for \(D(s)=s^4+3s^3+3s^2+2s+1\) and state how many roots lie in the right half-plane.
- Show by the array that \(D(s)=s^3+s^2+2s+24\) has two right-half-plane roots, and verify by factoring out its real root at \(s=-3\).
- For \(G(s)=\dfrac{K}{(s+1)(s+2)(s+3)}\), find the range of \(K>0\) for which the closed loop is stable.
- Determine the number of right-half-plane roots of \(D(s)=s^5+2s^4+3s^3+6s^2+2s+1\), handling the first-column zero by the epsilon method.
- Classify the system with \(D(s)=s^4+2s^3+6s^2+8s+8\) and give the frequency of any sustained oscillation.
- Use the shift \(s=z-1\) to decide whether every root of \(D(s)=s^3+8s^2+19s+12\) lies to the left of \(s=-1\), and interpret the result you obtain.
- The plant \(G(s)=\dfrac{K(s+1)}{s(s-1)(s+6)}\) is open-loop unstable. Show that the characteristic polynomial is \(s^3+5s^2+(K-6)s+K\), find the values of \(K\) that stabilise the loop, and give the frequency at which the loop oscillates at the critical gain.
- A row of zeros appears in the array of a sixth-order polynomial, and the completed first column shows exactly two sign changes below the auxiliary row. Describe the symmetric root pattern this implies and classify the system.