Polynomial root-finding
From Wikipedia, the free encyclopedia
Finding the roots of polynomials is a long-standing problem that has been extensively studied throughout the history and substantially influenced the development of mathematics. It involves determining either a numerical approximation or a closed-form expression of the roots of a univariate polynomial, i.e., determining approximate or closed form solutions of in the equation
![]() | This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|
where are either real or complex numbers.
Despite of being historically important, finding the roots of higher degree polynomials no longer play a central role in mathematics and computational mathematics, with one major exception in computer algebra.[1]
Overview
Summarize
Perspective
Closed form formulas
Closed-form formulas of exist only when the degree of the polynomial is less than 5. The quadratic formula has been known since antiquity, and the cubic and quartic formulas were discovered in full generality during the 16th century.
When the degree of polynomial is at least 5, a closed-form expression for the roots by the polynomial coefficients does not exist if we only uses additions, subtractions, multiplications, divisions, and radicals (taking n-th roots). This is due to the celebrated Abel-Ruffini theorem. On the other hand, fundamental theorem of algebra shows that all nonconstant polynomials have at least one root. Therefore, root-finding algorithms consists of finding numerical solutions in most cases.
Different types of root-finding problems
Root-finding algorithms can be broadly categorized according to the goal of the computation. Some methods aim to find a single root, while others are designed to find all complex roots at once. In certain cases, the objective may be to find roots within a specific region of the complex plane. It is often desirable and even necessary to select algorithms specific to the computational task due to efficiency and accuracy reasons. See Root Finding Methods for a summary of the existing methods available in each case.
History
Summarize
Perspective
Antiquity - 1500
The root-finding problem of polynomials was first recognized by the Sumerians and then the Babylonians. The Babylonions and Egyptians were able to solve specific quadratic equations in the second millennium B.C., and their solutions essentially correspond to the quadratic formula.[2] [3]
However, it took a millennia of effort to state the quadratic formula in an explicit form similar to the modern formulation, provided by Indian Mathematician Brahmagupta in his book Brāhmasphuṭasiddhānta 625 A.D. The full recognition of the quadratic formula requires the introduction of complex numbers, which took another a millennia.
Finding a closed-form formula of higher degree polynomials is significantly harder. Fibonacci even wrongly conjectured that closed-form formulas of polynomials with degree higher than 2 do not exist.[2] Different from the case of quadratic, the earliest attempts to solve cubic equations are mostly numerical. The Ancient Greeks were able to solve a few reducible cubic polynomials by reducing the problem to the quadratic case. In the 7th century, the Chinese mathematician Wang Xiaotong established the numerical solutions of 25 cubic equations in his treatise Jigu Suanjing. In the 11th century, the Persian poet-mathematician Omar Khayyam made significant progress in the theory of cubic equations, providing a geometric solution. In the 12th century, another Persian mathematician, Sharaf al-Dīn al-Tūsī, proposed a root-finding numerical method in his treatise Al-Muʿādalāt (Treatise on Equations) and applied it to certain types of cubic equations.
Root-finding methods
Summarize
Perspective
Finding one root
The most widely used method for computing a root of any differentiable function is Newton's method, which consists of the iterations of the computation of
by starting from a well-chosen value . Then will converge to a root of in general.
In particular, the method can be applied to compute a root of polynomial functions. In this case, the computations in Newton's method can be accelerated using Horner's method or evaluation with preprocessing for computing the polynomial and its derivative in each iteration.
Though the rate of convergence of Newton's method is generally quadratic, it might converge much slowly or even not converge at all. In particular, if the polynomial has no real root, and is chosen to be a real number, then Newton's method cannot converge. However, if the polynomial has a real root, which is larger than the larger real root of its derivative, then Newton's method converges quadratically to this largest root if is larger than this larger root (there are easy ways for computing an upper bound of the roots, see Properties of polynomial roots). This is the starting point of Horner's method for computing the roots.
Closely related to Newton's method are Halley's method and Laguerre's method. Both use the polynomial and its two first derivations for an iterative process that has a cubic convergence. Combining two consecutive steps of these methods into a single test, one gets a rate of convergence of 9, at the cost of 6 polynomial evaluations (with Horner's rule). On the other hand, combining three steps of Newtons method gives a rate of convergence of 8 at the cost of the same number of polynomial evaluation. This gives a slight advantage to these methods (less clear for Laguerre's method, as a square root has to be computed at each step).
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.
Finding all complex roots
Methods using complex-number arithmetic
Both the Aberth method and the similar yet simpler Durand–Kerner method simultaneously find all of the roots using only simple complex number arithmetic. The Aberth method is presently the most efficient method. 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.
A free implementation of Aberth's method is available under the name of MPSolve. This is a reference implementation, which can find routinely the roots of polynomials of degree larger than 1,000, with more than 1,000 significant decimal digits.
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.
Methods using linear algebra
Arguably, the most reliable method to find all roots of a polynomial is to find the eigenvalues of the companion matrix of monic polynomial, which coincides with the roots of the polynomial. There are plenty of algorithms for computing the eigenvalue of matrices. The standard method for finding all roots of a polynomial in MATLAB uses the Francis QR algorithm to compute the eigenvalues of the corresponding companion matrix of the polynomial.[4]
In principle, 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 algorithm and gives it its numerical stability. Additionally, it has fast convergence with order (where is the golden ratio) even in the presence of clustered roots. This fast convergence comes with a cost of three polynomial evaluations per step, resulting in a residual of O(|f(x)|2+3φ), that is a slower convergence than with three steps of Newton's method.
Limitations of iterative methods for finding all roots
The oldest method of finding all roots is to start by finding a single root. When a root r has been found, it can be removed from the polynomial by dividing out the binomial x – r. The resulting polynomial contains the remaining roots, which can be found by iterating on this process. This idea, despite being common in theoretical deriviations, does not work well in numerical computations because of the phenomenon of numerical instability: Wilkinson's polynomial shows that a very small modification of one coefficient may change dramatically not only the value of the roots, but also their nature (real or complex). Also, even with a good approximation, when one evaluates a polynomial at an approximate root, one may get a result that is far to be close to zero. For example, if a polynomial of degree 20 (the degree of Wilkinson's polynomial) has a root close to 10, the derivative of the polynomial at the root may be of the order of this implies that an error of on the value of the root may produce a value of the polynomial at the approximate root that is of the order of
Finding all real roots
Finding the real roots of a polynomial with real coefficients is a problem that has received much attention since the beginning of 19th century, and is still an active domain of research.
Methods for finding all complex roots can provide the real roots. However, because of the numerical instability of polynomials, it may need arbitrary-precision arithmetic to decide whether a root with a small imaginary part is real or not. Moreover, as the number of the real roots is, on the average, proportional to the logarithm of the degree,[5] it is a waste of computer resources to compute the non-real roots when one is interested in real roots.
The standard way of computing real roots is to compute first disjoint intervals, called isolating intervals, such that each one contains exactly one real root, and together they contain all the roots. This computation is called real-root isolation. Having an isolating interval, one may use fast numerical methods, such as Newton's method for improving the precision of the result.
The oldest complete algorithm for real-root isolation results from Sturm's theorem. However, it appears to be much less efficient than the methods based on Descartes' rule of signs and its extensions—Budan's and Vincent's theorems. These methods divide into two main classes, one using continued fractions and the other using bisection. Both method have been dramatically improved since the beginning of 21st century. With these improvements they reach a computational complexity that is similar to that of the best algorithms for computing all the roots (even when all roots are real).
These algorithms have been implemented and are available in Mathematica (continued fraction method) and Maple (bisection method), as well as in other main computer algebra systems (SageMath, PARI/GP) . Both implementations can routinely find the real roots of polynomials of degree higher than 1,000.
Finding roots in a restricted domain
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 involve finding the coefficients of shifted and scaled versions of the polynomial. For large degrees, FFT-based accelerated methods become viable.
The Lehmer–Schur algorithm uses the Schur–Cohn test for circles; a variant, 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.[citation needed]
Finding complex roots in pairs
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 multidimensional Newton's method to this task results in Bairstow's method.
The real variant of Jenkins–Traub algorithm is an improvement of this method.
Finding multiple roots of polynomials
Summarize
Perspective
Numerical computation of multiple roots
Multiple roots are highly sensitive, known to be ill-conditioned and inaccurate in numerical computation in general. A method by Zhonggang Zeng (2004), implemented as a MATLAB package, computes multiple roots and corresponding multiplicities of a polynomial accurately even if the coefficients are inexact.[6][7][8]
The method can be summarized in two steps. Let be the given polynomial. The first step determines the multiplicity structure by applying square-free factorization with a numerical greatest common divisor algorithm.[8] This allows writing as
where are the multiplicities of the distinct roots. This equation is an overdetermined system for having variables on equations matching coefficients with (the leading coefficient is not a variable). The least squares solution is no longer ill-conditioned in most cases. The second step applies the Gauss-Newton algorithm to solve the overdetermined system for the distinct roots.
The sensitivity of multiple roots can be regularized due to a geometric property of multiple roots discovered by William Kahan (1972) and the overdetermined system model maintains the multiplicities .
Square-free factorization
For polynomials whose coefficients are exactly given as integers or rational numbers, there is an efficient method to factorize them into factors that have only simple roots and whose coefficients are also exactly given. This method, called square-free factorization, is based on the multiple roots of a polynomial being the roots of the greatest common divisor of the polynomial and its derivative.
The square-free factorization of a polynomial p is a factorization where each is either 1 or a polynomial without multiple roots, and two different do not have any common root.
An efficient method to compute this factorization is Yun's algorithm.
References
Wikiwand - on
Seamless Wikipedia browsing. On steroids.