The general idea is to find a root of the polynomial and then apply Horner\'s method to remove
the corresponding factor according to the Ruffini rule.
This iterative scheme is numerically unstable; the approximation errors accumulate during the
successive factorizations, so that the last roots are determined with a polynomial that deviates
widely from a factor of the original polynomial. To reduce this error, it is advisable to find the
roots in increasing order of magnitude.
Wilkinson\'s polynomial illustrates that high precision may be necessary when computing the
roots of a polynomial given its coefficients: the problem of finding the roots from the
coefficients is in general ill-conditioned.
The most simple method to find a single root fast is Newton\'s method. One can use Horner\'s
method twice to efficiently evaluate the value of the polynomial function and its first derivative;
this combination is called Birge–Vieta\'s method. This method provides quadratic convergence
for simple roots at the cost of two polynomial evaluations per step.
Closely related to Newton\'s method are Halley\'s method and Laguerre\'s method. Using one
additional Horner evaluation, the value of the second derivative is used to obtain methods of
cubic convergence order for simple roots. If one starts from a point x close to a root and uses the
same complexity of 6 function evaluations, these methods perform two steps with a residual of
O(|f(x)|9), compared to three steps of Newton\'s method with a reduction O(|f(x)|8), giving a
slight advantage to these methods.
When applying these methods to polynomials with real coefficients and real starting points,
Newton\'s and Halley\'s method stay inside the real number line. One has to choose complex
starting points to find complex roots. In contrast, the Laguerre method with a square root in its
evaluation will leave the real axis of its own accord.
Another class of methods is based on translating the problem of finding polynomial roots to the
problem of finding eigenvalues of the companion matrix of the polynomial. In principle, one can
use any eigenvalue algorithm to find the roots of the polynomial. However, for efficiency
reasons one prefers methods that employ the structure of the matrix, that is, can be implemented
in matrix-free form. Among these methods are the power method, whose application to the
transpose of the companion matrix is the classical Bernoulli\'s method to find the root of greatest
modulus. The inverse power method with shifts, which finds some smallest root first, is what
drives the complex (cpoly) variant of the Jenkins–Traub method and gives it its numerical
stability. Additionally, it is insensitive to multiple roots and has fast convergence with order
1
+
2.6
{\\displaystyle 1+\\Phi \\approx 2.6}
even in the presence of clustered roots. This fast convergence comes with a cost of three Horner
evaluations per step, resulting in a residual of O(|f(x)|2+3), which is slower than three steps of
New.
The general idea is to find a root of the polynomial and then apply .pdf
1. The general idea is to find a root of the polynomial and then apply Horner's method to remove
the corresponding factor according to the Ruffini rule.
This iterative scheme is numerically unstable; the approximation errors accumulate during the
successive factorizations, so that the last roots are determined with a polynomial that deviates
widely from a factor of the original polynomial. To reduce this error, it is advisable to find the
roots in increasing order of magnitude.
Wilkinson's polynomial illustrates that high precision may be necessary when computing the
roots of a polynomial given its coefficients: the problem of finding the roots from the
coefficients is in general ill-conditioned.
The most simple method to find a single root fast is Newton's method. One can use Horner's
method twice to efficiently evaluate the value of the polynomial function and its first derivative;
this combination is called Birge–Vieta's method. This method provides quadratic convergence
for simple roots at the cost of two polynomial evaluations per step.
Closely related to Newton's method are Halley's method and Laguerre's method. Using one
additional Horner evaluation, the value of the second derivative is used to obtain methods of
cubic convergence order for simple roots. If one starts from a point x close to a root and uses the
same complexity of 6 function evaluations, these methods perform two steps with a residual of
O(|f(x)|9), compared to three steps of Newton's method with a reduction O(|f(x)|8), giving a
slight advantage to these methods.
When applying these methods to polynomials with real coefficients and real starting points,
Newton's and Halley's method stay inside the real number line. One has to choose complex
starting points to find complex roots. In contrast, the Laguerre method with a square root in its
evaluation will leave the real axis of its own accord.
Another class of methods is based on translating the problem of finding polynomial roots to the
problem of finding eigenvalues of the companion matrix of the polynomial. In principle, one can
use any eigenvalue algorithm to find the roots of the polynomial. However, for efficiency
reasons one prefers methods that employ the structure of the matrix, that is, can be implemented
in matrix-free form. Among these methods are the power method, whose application to the
transpose of the companion matrix is the classical Bernoulli's method to find the root of greatest
modulus. The inverse power method with shifts, which finds some smallest root first, is what
drives the complex (cpoly) variant of the Jenkins–Traub method and gives it its numerical
stability. Additionally, it is insensitive to multiple roots and has fast convergence with order
2. 1
+
2.6
{displaystyle 1+Phi approx 2.6}
even in the presence of clustered roots. This fast convergence comes with a cost of three Horner
evaluations per step, resulting in a residual of O(|f(x)|2+3), which is slower than three steps of
Newton's method.
Finding roots in pairs[edit]
If the given polynomial only has real coefficients, one may wish to avoid computations with
complex numbers. To that effect, one has to find quadratic factors for pairs of conjugate complex
roots. The application of the multi-dimensional Newton's method to this task results in
Bairstow's method. In the framework of inverse power iterations of the companion matrix, the
double shift method of Francis results in the real (rpoly) variant of the Jenkins–Traub method.
Finding all roots at once[edit]
The simple Durand–Kerner and the slightly more complicated Aberth methods simultaneously
find all of the roots using only simple complex number arithmetic. Accelerated algorithms for
multi-point evaluation and interpolation similar to the fast Fourier transform can help speed them
up for large degrees of the polynomial. It is advisable to choose an asymmetric, but evenly
distributed set of initial points.
Another method with this style is the Dandelin–Gräffe method (sometimes also ascribed to
Lobachevsky), which uses polynomial transformations to repeatedly and implicitly square the
roots. This greatly magnifies variances in the roots. Applying Viète's formulas, one obtains easy
approximations for the modulus of the roots, and with some more effort, for the roots
themselves.
Exclusion and enclosure methods[edit]
Several fast tests exist that tell if a segment of the real line or a region of the complex plane
contains no roots. By bounding the modulus of the roots and recursively subdividing the initial
region indicated by these bounds, one can isolate small regions that may contain roots and then
apply other methods to locate them exactly.
All these methods require to find the coefficients of shifted and scaled versions of the
polynomial. For large degrees, FFT-based accelerated methods become viable.
3. For real roots, Sturm's theorem and Descartes' rule of signs with its extension in the
Budan–Fourier theorem provide guides to locating and separating roots. This plus interval
arithmetic combined with Newton's method yields robust and fast algorithms.
The Lehmer–Schur algorithm uses the Schur–Cohn test for circles, Wilf's global bisection
algorithm uses a winding number computation for rectangular regions in the complex plane.
The splitting circle method uses FFT-based polynomial transformations to find large-degree
factors corresponding to clusters of roots. The precision of the factorization is maximized using a
Newton-type iteration. This method is useful for finding the roots of polynomials of high degree
to arbitrary precision; it has almost optimal complexity in this setting.
Method based on the Budan–Fourier theorem or Sturm chains[edit]
The methods in this class give for polynomials with rational coefficients, and when carried out
in rational arithmetic, provably complete enclosures of all real roots by rational intervals. The
test of an interval for real roots using Budan's theorem is computationally simple but may yield
false positive results. However, these will be reliably detected in the following transformation
and refinement of the interval. The test based on Sturm chains is computationally more involved
but gives always the exact number of real roots in the interval.
The algorithm for isolating the roots, using Descartes' rule of signs and Vincent's theorem, had
been originally called modified Uspensky's algorithm by its inventors Collins and Akritas.[1]
After going through names like "Collins–Akritas method" and "Descartes' method" (too
confusing if ones considers Fourier's article[2]), it was finally François Boulier, of Lille
University, who gave it the name Vincent–Collins–Akritas (VCA) method,[3] p. 24, based on
"Uspensky's method" not existing[4] and neither does "Descartes' method".[5] This
algorithm has been improved by Rouillier and Zimmerman,[6] and the resulting implementation
is, to date,[when?] the fastest bisection method. It has the same worst case complexity as the
Sturm algorithm, but is almost always much faster. It is the default algorithm of Maple root-
finding function fsolve. Another method based on Vincent's theorem is the
Vincent–Akritas–Strzeboski (VAS) method;[7] it has been shown[8] that the VAS (continued
fractions) method is faster than the fastest implementation of the VCA (bisection) method,[6]
which was independently confirmed elsewhere;[9] more precisely, for the Mignotte polynomials
of high degree, VAS is about 50,000 times faster than the fastest implementation of VCA. VAS
is the default algorithm for root isolation in Mathematica, Sage, SymPy, Xcas. See Budan's
theorem for a description of the historical background of these methods. For a comparison
between Sturm's method and VAS, use the functions realroot(poly) and time(realroot(poly)) of
Xcas. By default, to isolate the real roots of poly realroot uses the VAS method; to use Sturm's
method, write realroot(sturm, poly). See also the External links for a pointer to an
iPhone/iPod/iPad application that does the same thing.
4. Solution
The general idea is to find a root of the polynomial and then apply Horner's method to remove
the corresponding factor according to the Ruffini rule.
This iterative scheme is numerically unstable; the approximation errors accumulate during the
successive factorizations, so that the last roots are determined with a polynomial that deviates
widely from a factor of the original polynomial. To reduce this error, it is advisable to find the
roots in increasing order of magnitude.
Wilkinson's polynomial illustrates that high precision may be necessary when computing the
roots of a polynomial given its coefficients: the problem of finding the roots from the
coefficients is in general ill-conditioned.
The most simple method to find a single root fast is Newton's method. One can use Horner's
method twice to efficiently evaluate the value of the polynomial function and its first derivative;
this combination is called Birge–Vieta's method. This method provides quadratic convergence
for simple roots at the cost of two polynomial evaluations per step.
Closely related to Newton's method are Halley's method and Laguerre's method. Using one
additional Horner evaluation, the value of the second derivative is used to obtain methods of
cubic convergence order for simple roots. If one starts from a point x close to a root and uses the
same complexity of 6 function evaluations, these methods perform two steps with a residual of
O(|f(x)|9), compared to three steps of Newton's method with a reduction O(|f(x)|8), giving a
slight advantage to these methods.
When applying these methods to polynomials with real coefficients and real starting points,
Newton's and Halley's method stay inside the real number line. One has to choose complex
starting points to find complex roots. In contrast, the Laguerre method with a square root in its
evaluation will leave the real axis of its own accord.
Another class of methods is based on translating the problem of finding polynomial roots to the
problem of finding eigenvalues of the companion matrix of the polynomial. In principle, one can
use any eigenvalue algorithm to find the roots of the polynomial. However, for efficiency
reasons one prefers methods that employ the structure of the matrix, that is, can be implemented
in matrix-free form. Among these methods are the power method, whose application to the
transpose of the companion matrix is the classical Bernoulli's method to find the root of greatest
modulus. The inverse power method with shifts, which finds some smallest root first, is what
drives the complex (cpoly) variant of the Jenkins–Traub method and gives it its numerical
stability. Additionally, it is insensitive to multiple roots and has fast convergence with order
5. 1
+
2.6
{displaystyle 1+Phi approx 2.6}
even in the presence of clustered roots. This fast convergence comes with a cost of three Horner
evaluations per step, resulting in a residual of O(|f(x)|2+3), which is slower than three steps of
Newton's method.
Finding roots in pairs[edit]
If the given polynomial only has real coefficients, one may wish to avoid computations with
complex numbers. To that effect, one has to find quadratic factors for pairs of conjugate complex
roots. The application of the multi-dimensional Newton's method to this task results in
Bairstow's method. In the framework of inverse power iterations of the companion matrix, the
double shift method of Francis results in the real (rpoly) variant of the Jenkins–Traub method.
Finding all roots at once[edit]
The simple Durand–Kerner and the slightly more complicated Aberth methods simultaneously
find all of the roots using only simple complex number arithmetic. Accelerated algorithms for
multi-point evaluation and interpolation similar to the fast Fourier transform can help speed them
up for large degrees of the polynomial. It is advisable to choose an asymmetric, but evenly
distributed set of initial points.
Another method with this style is the Dandelin–Gräffe method (sometimes also ascribed to
Lobachevsky), which uses polynomial transformations to repeatedly and implicitly square the
roots. This greatly magnifies variances in the roots. Applying Viète's formulas, one obtains easy
approximations for the modulus of the roots, and with some more effort, for the roots
themselves.
Exclusion and enclosure methods[edit]
Several fast tests exist that tell if a segment of the real line or a region of the complex plane
contains no roots. By bounding the modulus of the roots and recursively subdividing the initial
region indicated by these bounds, one can isolate small regions that may contain roots and then
apply other methods to locate them exactly.
6. All these methods require to find the coefficients of shifted and scaled versions of the
polynomial. For large degrees, FFT-based accelerated methods become viable.
For real roots, Sturm's theorem and Descartes' rule of signs with its extension in the
Budan–Fourier theorem provide guides to locating and separating roots. This plus interval
arithmetic combined with Newton's method yields robust and fast algorithms.
The Lehmer–Schur algorithm uses the Schur–Cohn test for circles, Wilf's global bisection
algorithm uses a winding number computation for rectangular regions in the complex plane.
The splitting circle method uses FFT-based polynomial transformations to find large-degree
factors corresponding to clusters of roots. The precision of the factorization is maximized using a
Newton-type iteration. This method is useful for finding the roots of polynomials of high degree
to arbitrary precision; it has almost optimal complexity in this setting.
Method based on the Budan–Fourier theorem or Sturm chains[edit]
The methods in this class give for polynomials with rational coefficients, and when carried out
in rational arithmetic, provably complete enclosures of all real roots by rational intervals. The
test of an interval for real roots using Budan's theorem is computationally simple but may yield
false positive results. However, these will be reliably detected in the following transformation
and refinement of the interval. The test based on Sturm chains is computationally more involved
but gives always the exact number of real roots in the interval.
The algorithm for isolating the roots, using Descartes' rule of signs and Vincent's theorem, had
been originally called modified Uspensky's algorithm by its inventors Collins and Akritas.[1]
After going through names like "Collins–Akritas method" and "Descartes' method" (too
confusing if ones considers Fourier's article[2]), it was finally François Boulier, of Lille
University, who gave it the name Vincent–Collins–Akritas (VCA) method,[3] p. 24, based on
"Uspensky's method" not existing[4] and neither does "Descartes' method".[5] This
algorithm has been improved by Rouillier and Zimmerman,[6] and the resulting implementation
is, to date,[when?] the fastest bisection method. It has the same worst case complexity as the
Sturm algorithm, but is almost always much faster. It is the default algorithm of Maple root-
finding function fsolve. Another method based on Vincent's theorem is the
Vincent–Akritas–Strzeboski (VAS) method;[7] it has been shown[8] that the VAS (continued
fractions) method is faster than the fastest implementation of the VCA (bisection) method,[6]
which was independently confirmed elsewhere;[9] more precisely, for the Mignotte polynomials
of high degree, VAS is about 50,000 times faster than the fastest implementation of VCA. VAS
is the default algorithm for root isolation in Mathematica, Sage, SymPy, Xcas. See Budan's
theorem for a description of the historical background of these methods. For a comparison
between Sturm's method and VAS, use the functions realroot(poly) and time(realroot(poly)) of
Xcas. By default, to isolate the real roots of poly realroot uses the VAS method; to use Sturm's
7. method, write realroot(sturm, poly). See also the External links for a pointer to an
iPhone/iPod/iPad application that does the same thing.