Integer type:** int32**** int64**** nag_int** show int32 show int32 show int64 show int64 show nag_int show nag_int

C02 — Zeros of Polynomials

This chapter is concerned with computing the zeros of a polynomial with real or complex coefficients.

Let f(z)$f\left(z\right)$ be a polynomial of degree n$n$ with complex coefficients a_{i}${a}_{i}$:

A complex number z_{1}${z}_{1}$ is called a **zero** of f(z)$f\left(z\right)$ (or equivalently a **root** of the **equation**
f(z) = 0$f\left(z\right)=0$), if

If z_{1}${z}_{1}$ is a zero, then f(z)$f\left(z\right)$ can be divided by a factor (z − z_{1})$(z-{z}_{1})$:

where f_{1}(z)${f}_{1}\left(z\right)$ is a polynomial of degree n − 1$n-1$. By the Fundamental Theorem of Algebra, a polynomial f(z)$f\left(z\right)$ always has a zero, and so the process of dividing out factors (z − z_{i})$(z-{z}_{i})$ can be continued until we have a complete **factorization** of f(z)$f\left(z\right)$:

Here the complex numbers z_{1},z_{2}, … ,z_{n}${z}_{1},{z}_{2},\dots ,{z}_{n}$ are the zeros of f(z)$f\left(z\right)$; they may not all be distinct, so it is sometimes more convenient to write

with distinct zeros z_{1},z_{2}, … ,z_{k}${z}_{1},{z}_{2},\dots ,{z}_{k}$ and multiplicities m_{i} ≥ 1${m}_{i}\ge 1$. If m_{i} = 1${m}_{i}=1$, z_{i}${z}_{i}$ is called a **simple** or **isolated** zero; if m_{i} > 1${m}_{i}>1$, z_{i}${z}_{i}$ is called a **multiple** or **repeated** zero; a multiple zero is also a zero of the derivative of f(z)$f\left(z\right)$.

f(z) ≡ a _{0}z^{n} + a_{1}z^{n − 1} + a_{2}z^{n − 2} + ⋯ + a_{n − 1}z + a_{n}, a_{0} ≠ 0.
$$f\left(z\right)\equiv {a}_{0}{z}^{n}+{a}_{1}{z}^{n-1}+{a}_{2}{z}^{n-2}+\cdots +{a}_{n-1}z+{a}_{n}\text{, \hspace{1em}}{a}_{0}\ne 0\text{.}$$ |

f(z _{1}) = 0.
$$f\left({z}_{1}\right)=0\text{.}$$ |

f(z) = (z − z _{1})f_{1}(z)
$$f\left(z\right)=(z-{z}_{1}){f}_{1}\left(z\right)$$ | (1) |

f(z) ≡ a _{0}(z − z_{1})(z − z_{2}) … (z − z_{n}).
$$f\left(z\right)\equiv {a}_{0}(z-{z}_{1})(z-{z}_{2})\dots (z-{z}_{n})\text{.}$$ |

f(z) ≡ a _{0}(z − z_{1})^{m1}(z − z_{2})^{m2} … (z − z_{k})^{mk}, k ≤ n,
$$f\left(z\right)\equiv {a}_{0}{(z-{z}_{1})}^{{m}_{1}}{(z-{z}_{2})}^{{m}_{2}}\dots {(z-{z}_{k})}^{{m}_{k}}\text{, \hspace{1em}}k\le n\text{,}$$ |

If the coefficients of f(z)$f\left(z\right)$ are all real, then the zeros of f(z)$f\left(z\right)$ are either real or else occur as pairs of conjugate complex numbers x + iy$x+iy$ and x − iy$x-iy$. A pair of complex conjugate zeros are the zeros of a quadratic factor of f(z)$f\left(z\right)$, (z^{2} + rz + s)$({z}^{2}+rz+s)$, with real coefficients r$r$ and s$s$.

Mathematicians are accustomed to thinking of polynomials as pleasantly simple functions to work with. However, the problem of numerically **computing** the zeros of an arbitrary polynomial is far from simple. A great variety of algorithms have been proposed, of which a number have been widely used in practice; for a fairly comprehensive survey, see Householder (1970). All general algorithms are iterative. Most converge to one zero at a time; the corresponding factor can then be divided out as in equation (1) above – this process is called **deflation** or, loosely, dividing out the zero – and the algorithm can be applied again to the polynomial f_{1}(z)${f}_{1}\left(z\right)$. A pair of complex conjugate zeros can be divided out together – this corresponds to dividing f(z)$f\left(z\right)$ by a quadratic factor.

Whatever the theoretical basis of the algorithm, a number of practical problems arise; for a thorough discussion of some of them see Peters and Wilkinson (1971) and Chapter 2 of Wilkinson (1963). The most elementary point is that, even if z_{1}${z}_{1}$ is mathematically an exact zero of f(z)$f\left(z\right)$, because of the fundamental limitations of computer arithmetic the **computed** value of f(z_{1})$f\left({z}_{1}\right)$ will not necessarily be exactly 0.0$0.0$. In practice there is usually a small region of values of z$z$ about the exact zero at which the computed value of f(z)$f\left(z\right)$ becomes swamped by rounding errors. Moreover, in many algorithms this inaccuracy in the computed value of f(z)$f\left(z\right)$ results in a similar inaccuracy in the computed step from one iterate to the next. This limits the precision with which any zero can be computed. Deflation is another potential cause of trouble, since, in the notation of equation (1), the computed coefficients of f_{1}(z)${f}_{1}\left(z\right)$ will not be completely accurate, especially if z_{1}${z}_{1}$ is not an exact zero of f(z)$f\left(z\right)$; so the zeros of the computed f_{1}(z)${f}_{1}\left(z\right)$ will deviate from the zeros of f(z)$f\left(z\right)$.

A zero is called **ill-conditioned** if it is sensitive to small changes in the coefficients of the polynomial. An ill-conditioned zero is likewise sensitive to the computational inaccuracies just mentioned. Conversely a zero is called **well-conditioned** if it is comparatively insensitive to such perturbations. Roughly speaking a zero which is well separated from other zeros is well-conditioned, while zeros which are close together are ill-conditioned, but in talking about ‘closeness’ the decisive factor is not the absolute distance between neighbouring zeros but their **ratio**: if the ratio is close to one the zeros are ill-conditioned. In particular, multiple zeros are ill-conditioned. A multiple zero is usually split into a cluster of zeros by perturbations in the polynomial or computational inaccuracies.

Householder A S (1970) *The Numerical Treatment of a Single Nonlinear Equation* McGraw–Hill

Peters G and Wilkinson J H (1971) Practical problems arising in the solution of polynomial equations *J. Inst. Maths. Applics.* **8** 16–35

Thompson K W (1991) Error analysis for polynomial solvers *Fortran Journal (Volume 3)* **3** 10–13

Wilkinson J H (1963) *Rounding Errors in Algebraic Processes* HMSO

© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2013