Müller's Method and zeros of Polynomial
``Hamming's motto, `the purpose of computing is insight, not numbers', is particularly apt in the area of finding roots. You should repeat this motto aloud whenever your program converges, with ten-digit accuracy, to the wrong root of a problem, or whenever it fails to converge because there is actually no root, or because there is a root but your initial estimate was not sufficiently close to it.'' From Numerical Recipes in C
Summary
Theorem 2.15 (Fundamental Theorem of Algebra): If P(x) is a polynomial
of degree with real or complex coefficients, then P(x)=0 has at
least one (possibly complex) root.
(Ironically - embarrassingly, for the algebraists- the easiest proof comes via complex analysis.)
Corollary 2.16 If P is of degree n, then P(x) can be expressed as
where the are distinct roots, and
Corollary 2.17 If P and Q are polynomials of degree at most n,
then if , with k>n, are distinct numbers with
for
, then P=Q.
In other words, if degree polynomials agree on n+1 points, then they
are equal.
Horner's Method: computes values of polynomials efficiently. The idea is
pretty simple: we simply evaluate the terms of the nested form of the
polynomial P successively, from the inside out, where we've expanded about
the point at which we wish to evaluate P. This is the Taylor series
expansion of P about
.
Given , evaluate
starting from the Taylor
series expansion as follows:
Factoring a term of , we have that
where we have defined . The question is how to compute
.
then we can write (1) as
and, solving for in terms of
for
,
Then .
If we're using Newton's method with for roots of P, then we're in luck,
because we can perform the same operation with polynomial Q. Why would we
want to evaluate ? Because
! Therefore
When we've found an approximate root, , then we will have that
(since ), so that further roots of P could be
determined by switching focus to Q. This process is called deflation
(because we're letting the air out of our
degree polynomial to get an
degree polynomial). As roots are found, continue deflating until
you're down to a linear polynomial, whose solution can be written down
instantly.
Errors will creep in as this process continues. It's best to start with the small roots, and work up to the big roots, if possible. When all is said and done, you might use a few iterations of Newton's method on the roots with the original polynomial to refine the approximate roots obtained by deflation.
This process of deflation works even when the function f we're dealing with is not a polynomial. The next technique is a good general root finder, with nearly quadratic convergence.
Müller's method: is a generalization of the secant method, where rather than a secant line using two points, we create a parabolic fit to three points. Other than that, there's really no difference. So what's the big deal?
we can solve for a, b, and c, and then choose to be the
corresponding root of f: if the coefficients of f are real, then
i.e.,
If the coefficients are complex, then you want to choose the sign so as to maximize the modulus of
that is, the size of |z|.