NAG Library Function Document
nag_zeros_complex_poly (c02afc) finds all the roots of a complex polynomial equation, using a variant of Laguerre's method.
||nag_zeros_complex_poly (Integer n,
const Complex a,
attempts to find all the roots of the
th degree complex polynomial equation
The roots are located using a modified form of Laguerre's method, originally proposed by Smith (1967)
The method of Laguerre (see Wilkinson (1965)
) can be described by the iterative scheme
The sign in the denominator is chosen so that the modulus of the Laguerre step at , viz. , is as small as possible. The method can be shown to be cubically convergent for isolated roots (real or complex) and linearly convergent for multiple roots.
The function generates a sequence of iterates
and ensures that
‘roughly’ lies inside a circular region of radius
known to contain a zero of
; that is,
denotes the Fejér bound (see Marden (1966)
) at the point
. Following Smith (1967)
is taken to be
is an upper bound for the magnitude of the smallest zero given by
is the zero
of smaller magnitude of the quadratic equation
and the Cauchy lower bound
for the smallest zero is computed (using Newton's Method) as the positive root of the polynomial equation
Starting from the origin, successive iterates are generated according to the rule
is ‘adjusted’ so that
. The iterative procedure terminates if
is smaller in absolute value than the bound on the rounding error in
and the current iterate
is taken to be a zero of
. The deflated polynomial
is then formed, and the above procedure is repeated on the deflated polynomial until
, whereupon the remaining roots are obtained via the ‘standard’ closed formulae for a linear (
) or quadratic (
Marden M (1966) Geometry of polynomials Mathematical Surveys 3 American Mathematical Society, Providence, RI
Smith B T (1967) ZERPOL: a zero finding algorithm for polynomials using Laguerre's method Technical Report Department of Computer Science, University of Toronto, Canada
Wilkinson J H (1965) The Algebraic Eigenvalue Problem Oxford University Press, Oxford
On entry: the degree of the polynomial, .
– const ComplexInput
On entry: and must contain the real and imaginary parts of (i.e., the coefficient of ), for .
: indicates whether or not the polynomial is to be scaled. The recommended value is Nag_TRUE. See Section 9
for advice on when it may be preferable to set
and for a description of the scaling strategy.
On exit: the real and imaginary parts of the roots are stored in and respectively, for .
– NagError *Input/Output
The NAG error argument (see Section 3.7
in How to Use the NAG Library and its Documentation).
Error Indicators and Warnings
Dynamic memory allocation failed.
On entry, argument had an illegal value.
On entry, the complex variable has zero real and imaginary parts.
On entry, .
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG
The iterative procedure has failed to converge. This error is very unlikely to occur. If it does, please contact NAG
immediately, as some basic assumption for the arithmetic has been violated.
The function cannot evaluate
near some of its zeros without overflow. Please contact NAG
The function cannot evaluate
near some of its zeros without underflow. Please contact NAG
All roots are evaluated as accurately as possible, but because of the inherent nature of the problem complete accuracy cannot be guaranteed.
Parallelism and Performance
nag_zeros_complex_poly (c02afc) is not threaded in any implementation.
, then a scaling factor for the coefficients is chosen as a power of the base
of the machine so that the largest coefficient in magnitude approaches
. You should note that no scaling is performed if the largest coefficient in magnitude exceeds
, even if
are defined in Chapter x02
, overflow may be encountered when the input coefficients
vary widely in magnitude, particularly on those machines for which
overflows. In such cases, scale
should be set to Nag_FALSE and the coefficients scaled so that the largest coefficient in magnitude does not exceed
Even so, the scaling strategy used in nag_zeros_complex_poly (c02afc) is sometimes insufficient to avoid overflow and/or underflow conditions. In such cases, you are recommended to scale the independent variable so that the disparity between the largest and smallest coefficient in magnitude is reduced. That is, use the function to locate the zeros of the polynomial for some suitable values of and . For example, if the original polynomial was , then choosing and , for instance, would yield the scaled polynomial , which is well-behaved relative to overflow and underflow and has zeros which are times those of .
If the function fails with NE_POLY_NOT_CONV
, then the real and imaginary
parts of any roots obtained before the failure occurred are stored in
in the reverse order in which they were found. More
contain the real and imaginary parts of the 1st root found,
contain the real and imaginary parts of the 2nd root found, and so on. The real and imaginary parts of any roots not found will be set to a large negative number, specifically
To find the roots of the polynomial , where , , , , and .
Program Text (c02afce.c)
Program Data (c02afce.d)
Program Results (c02afce.r)