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|.