Durand-Kerner Polynomial Root Finder
March 25, 2026 · View on GitHub
Overview & Motivation
Given a polynomial , finding all roots (real and complex) is a fundamental problem in control theory, signal processing, and numerical analysis. Analytical formulas exist only for degree ; beyond that, iterative methods are required.
The Durand-Kerner method (also known as the Weierstrass iteration) simultaneously refines approximations to all roots at once. Each root estimate is updated using Newton's method, but instead of computing the derivative of , the other root estimates are used to factor out known roots. This avoids polynomial deflation — a process that accumulates errors as roots are extracted sequentially.
The method is elegant, easy to implement, and works for polynomials with complex coefficients and complex roots.
Mathematical Theory
Update Rule
Given current root estimates , each is updated simultaneously:
Relationship to Newton's Method
For a polynomial , the derivative is:
So the Durand-Kerner update is exactly Newton's: , but with approximated using the current root estimates rather than computed from coefficients.
Initial Root Placement
Roots are initialized on a circle of radius:
with angular positions offset by 0.4 radians to break symmetry. If , it defaults to 1.0.
Convergence
- Quadratic convergence when roots are well-separated.
- Linear convergence near repeated (multiple) roots.
- Terminates when all corrections satisfy .
Complexity Analysis
| Case | Time | Space | Notes |
|---|---|---|---|
| Per iteration | Evaluating and the denominator product for all roots | ||
| Total | iterations until convergence (typically ) |
Why : For each of the roots, computing the denominator product requires multiplying terms.
Step-by-Step Walkthrough
Polynomial:
Step 1 — Initialize on radius :
Step 2 — Iteration 1 (for ):
- Evaluate P(z_0) = z_0^{3} - 6z_0^{2}
- Compute denominator:
- Update:
Step 3 — Repeat for and (using the latest values).
Step 4 — Iterate until .
After ~15–20 iterations the roots converge to (imaginary parts ).
Pitfalls & Edge Cases
- Repeated roots. Convergence degrades from quadratic to linear. Higher tolerance or more iterations may be needed.
- Near-degenerate denominators. When two root estimates are very close (), the denominator product approaches zero. The implementation excludes such terms to avoid division by near-zero.
- Leading coefficient must be non-zero. The polynomial degree is determined by the first coefficient.
- Complex arithmetic required. This algorithm operates entirely in , so it is limited to floating-point types (
float,double). Fixed-point types are not supported. - No convergence guarantee for all polynomials. Wilkinson's polynomial and other pathological cases may require higher precision or alternative methods.
- Root ordering. Results are sorted by real part (ascending), which may not correspond to meaningful branch ordering in applications like Root Locus.
Variants & Generalizations
| Variant | Key Difference |
|---|---|
| Aberth-Ehrlich method | Similar simultaneous iteration but includes a correction term that improves convergence for clustered roots |
| Jenkins-Traub | Sequential algorithm (one root at a time) with superior convergence for difficult polynomials; standard in numerical libraries |
| Companion matrix + eigenvalues | Converts to an eigenvalue problem; robust but |
| Laguerre's method | Converges cubically for simple roots; sequential (extracts one root at a time, then deflates) |
| Muller's method | Uses quadratic interpolation; works for non-polynomial equations too |
Applications
- Root locus analysis — The Root Locus algorithm calls Durand-Kerner at each gain step to find the closed-loop poles.
- Stability analysis — Determining whether all roots of a characteristic polynomial lie inside the unit circle (discrete) or left half-plane (continuous).
- Filter design — Finding pole and zero locations of transfer functions.
- Control system design — Evaluating characteristic equations to check stability margins.
Connections to Other Algorithms
graph LR
DK["Durand-Kerner"]
RL["Root Locus"]
GE["Gaussian Elimination"]
RL --> DK
GE -.->|"companion matrix alternative"| DK
| Algorithm | Relationship |
|---|---|
| Root Locus | Primary consumer — calls Durand-Kerner to find characteristic polynomial roots at each gain step |
| Gaussian Elimination | Alternative approach: form the companion matrix and compute eigenvalues (requires a different solver) |
References & Further Reading
- Durand, E., Solutions numériques des équations algébriques, Masson, 1960.
- Kerner, I.O., "Ein Gesamtschrittverfahren zur Berechnung der Nullstellen von Polynomen", Numerische Mathematik, 8, 1966.
- Aberth, O., "Iteration methods for finding all zeros of a polynomial simultaneously", Mathematics of Computation, 27(122), 1973.
- Press, W.H. et al., Numerical Recipes, 3rd ed., Cambridge University Press, 2007 — Section 9.5.