Enter the coefficients of a control system's characteristic equation and the tool builds the Routh array automatically, counts the sign changes in the first column, and judges whether the system is stable or unstable. See how stability is determined without solving for roots, alongside an s-plane plot and the step response.
Parameters
Order of the characteristic equation
A 4th-order system uses a₀; a 3rd-order system ignores a₀
Coefficient a₃ (one below the leading term)
Coefficient a₂
Coefficient a₁
Coefficient a₀ (constant term, 4th order only)
a₀ is not used in the calculation when 3rd order is selected
Results
—
Unstable poles (right half-plane)
—
Stability verdict
—
First-column sign changes
—
Routh first column b₁
—
Routh first column c₁
—
Rightmost pole real part
—
Complex s-plane — pole placement of the characteristic equation
The imaginary axis is the stability boundary. Poles in the left half-plane (green) mean stable; poles in the right half-plane (red) mean unstable. The dots are the roots of the characteristic equation.
Routh array — first column
Unit step response y(t)
Theory & Key Formulas
$$P(s)=s^4+a_3 s^3+a_2 s^2+a_1 s+a_0$$
The 4th-order characteristic polynomial. The leading coefficient is normalised to 1. A 3rd-order system drops a₀ and uses $P(s)=s^3+a_3 s^2+a_2 s+a_1$.
The leading entries of the s² and s¹ rows of the Routh array. Each is a 2×2 determinant of the two rows above, divided by the leading entry of the previous row.
If this first column is entirely positive the system is stable (all poles in the left half-plane). The number of sign changes equals the number of right-half-plane poles.
What is the Routh-Hurwitz Stability Criterion?
🙋
The "Routh-Hurwitz stability criterion" came up in my controls class — but what is it actually checking?
🎓
In plain terms, it answers "left to itself, will this feedback loop blow up, or settle down?" Every control system has a characteristic equation — a denominator polynomial — and its roots (the poles) decide everything. If all the poles sit in the left half of the complex plane the response decays and the system is stable; if even one is in the right half it grows over time and is unstable. Routh-Hurwitz makes that judgement using only the coefficients.
🙋
Wait — you don't have to find the roots? Solving a quartic by hand is brutal.
🎓
That is exactly the trick. You line up the coefficients and build a table called the Routh array. For the example on the left, P(s)=s⁴+10s³+35s²+50s+24. Put [1,35,24] in the s⁴ row and [10,50,0] in the s³ row, then fill the rows below with a cross calculation. You get b₁=(10·35−50)/10=30 and c₁=(30·50−10·24)/30=42. The first column comes out as [1,10,30,42,24].
🙋
Once I have that first column, what do I look at?
🎓
Just read the signs of the first column from top to bottom. The [1,10,30,42,24] above is all positive, so there are zero sign changes — meaning zero right-half-plane poles, i.e. stable. Try raising the a₁ slider, or lowering a₃ toward 1: b₁ or c₁ goes negative and the signs flip "plus → minus → ...". The number of flips is exactly the number of unstable poles.
🙋
It feels almost magical that the count of sign changes is the count of unstable poles. Why does that work?
🎓
It is Routh's theorem, and it follows from Cauchy's argument principle. Intuitively, remember it as "the number of times the first column flips sign = the number of roots that crossed the imaginary axis to the right side." So for a system of any order, building the first column alone tells you the right-half-plane pole count. Check the s-plane plot below — the number of poles in the red region matches the sign-change count.
🙋
If exactly 0 lands partway down the first column, can't you no longer divide?
🎓
Good question. A zero in the first column is a sign that a pole is sitting right on the imaginary axis — a "marginally stable" state that neither decays nor grows, just oscillates forever. Numerically you replace the zero with a small positive epsilon and carry on. In practice marginal stability is treated almost like instability; you nudge the gain to add some margin. When this tool detects it, the verdict turns yellow as "possible marginal stability".
Frequently Asked Questions
It is a method that judges whether a system is stable or unstable using only the coefficients of the characteristic equation (the closed-loop denominator polynomial) — without solving for a single root. From the coefficients you build a table called the Routh array; if every entry of its first column has the same sign the system is stable, and if there is even one sign change it is unstable. The number of sign changes in the first column equals the number of roots in the right half-plane, i.e. the number of unstable poles. Because the result holds for any degree without finding roots, it is widely used for early design checks.
It rests on Routh's theorem: the number of sign changes in the first column of the Routh array equals the number of right-half-plane roots of the characteristic polynomial. This follows from Cauchy's argument principle and holds exactly for real-coefficient polynomials. So building only the first column tells you, for a system of any order, how many poles lie in the right half-plane — zero means stable, one or more means unstable. To make the reasoning visible, this tool also computes the actual roots with the Durand-Kerner method and displays them.
For a 4th-order system P(s)=s⁴+a₃s³+a₂s²+a₁s+a₀, the s³ row is [a₃, a₁] and the s⁴ row is [1, a₂]. The leading entry of the s² row is b₁ = (a₃a₂ − a₁)/a₃. The leading entry of the next s¹ row is c₁ = (b₁a₁ − a₃a₀)/b₁. The s⁰ row is simply a₀. The first column is therefore [1, a₃, b₁, c₁, a₀], and if all five entries are positive the system is stable. Each entry is a 2×2 determinant divided by the leading entry of the row above (a cross calculation).
If a zero appears partway down the first column, the next row cannot be computed directly (division by zero). The standard fix is to replace it with a small positive number epsilon and continue. If a sign change remains as epsilon goes to zero the system is unstable; if none remains there is a pole on the imaginary axis and the system is marginally stable (sustained oscillation). Marginal stability oscillates forever without decaying, so in design it is treated like instability. When this tool detects the situation it shows the verdict 'possible marginal stability' in yellow.
Real-World Applications
Gain design for feedback control: When choosing PID gains or the feedback gain of a motor drive, the coefficients of the characteristic equation are functions of the gain. The Routh-Hurwitz criterion lets you keep the gain as a symbol and derive the stable range as inequalities. Solving b₁>0 and c₁>0 for the gain, for instance, directly yields the upper and lower bounds on a stable gain — exactly what you need to set the design range before running simulations.
Servo and robot-joint control: In position servos and multi-joint robot control, mechanical resonance and sensor lag push the closed-loop order up to third or fourth. Once you have felt the link between sign changes and pole placement on a low-order system like this one, the field phenomenon "I raised the gain and it started oscillating" becomes intuitively clear — it is a pole that moved into the right half-plane.
Power systems and power-supply circuits: The control loops of grid-tied inverters and switching power supplies also hinge on the stability of the characteristic equation. Because the coefficients change with the load condition, you check that the first column stays positive under the worst case. Routh-Hurwitz is computationally light and quick to apply even in embedded-design reviews.
Control-engineering education and pre-CAE sanity checks: It is also useful for getting a first read on the answer before computing roots numerically. Glancing at the sign of the first column tells you stable or unstable immediately, before MATLAB even returns the roots. Conversely, if numerically computed roots contradict the Routh verdict, it is a sanity check that points to a coefficient-entry mistake or a modelling error.
Common Misconceptions and Pitfalls
The most common one is assuming "all coefficients positive means stable". All coefficients being positive is only a necessary condition for stability, not a sufficient one. For systems of third order and above, every coefficient can be positive yet b₁ or c₁ in the Routh array turns negative and the system is unstable. For example s³+s²+s+6 has all positive coefficients, but b₁=(1·1−6)/1=−5<0, so it is unstable. Do not stop at the necessary condition — always build the first column and check the signs. With this tool you can watch exactly this happen as you lower a₃ toward 1.
Next, the misconception that Routh-Hurwitz only says "stable or unstable". The verdict is indeed binary, but the number of sign changes in the first column also tells you how many poles lie in the right half-plane. More importantly, the criterion says nothing about response speed or damping (stability margin). A system can be stable yet have poles hugging the imaginary axis, so that the slightest disturbance pushes it unstable. In practice, alongside the stability verdict you must always check gain margin, phase margin, and the pole locations (damping ratio).
Finally, how to treat marginal stability. A zero in the first column, marginal stability, is mathematically a boundary state that is "neither stable nor unstable", but in design it should be treated like instability. With zero damping, even a small model error or nonlinearity can easily tip it toward divergence. Judging "it is just barely stable, so it is safe" is dangerous; design with margin so the first column holds firmly positive values. Watching the step response oscillate without decaying in this tool makes it clear that marginal stability is unsuitable for practical use.
How to Use
Enter polynomial coefficients for your characteristic equation in descending order (a₃s³ + a₂s² + a₁s + a₀). For a DC motor control loop, typical values are a₃=1, a₂=5, a₁=8, a₀=3.
The simulator constructs the Routh array automatically, computing intermediate values b₁ and c₁ from division operations between adjacent rows.
Examine the first-column sign changes: zero changes indicates all poles in the left half-plane (stable); each sign change predicts one pole in the right half-plane (unstable).
Review the s-plane pole plot and step response visualization to confirm stability verdict and transient behavior.
Worked Example
Consider a third-order servo system: s³ + 6s² + 11s + 6. Building the Routh array yields first row [1, 11], second row [6, 6], third row (b₁) = (6×11 - 1×6)/6 = 10, fourth row (c₁) = (10×6 - 6×0)/10 = 6. First column: [1, 6, 10, 6]—all positive, zero sign changes, confirming three left-half-plane poles at s = -1, -2, -3. The system is stable with settling time approximately 5 seconds.
Practical Notes
Marginal stability occurs when b₁ = 0 (or any first-column element approaches zero); use auxiliary polynomial from the row above to find imaginary-axis poles for oscillatory boundary cases.
For industrial PID tuning, adjust gain Kp systematically and recompute—sign changes in the Routh first column reveal the stability margin before system destabilization.
Right-half-plane pole count equals the number of first-column sign changes; this directly predicts overshoot severity and ringing in step response plots.