Müller's Method is a iterative root finding method that is somewhat similar to the to "regula falsi" method, also known as the secant method. Whereas the secant method estimates a root by projecting a straight line through two points, Müller's method takes three points, and projects a quadratic polynomial through them, estimating the root at the point where this intersects the x-axis.

The derivation for Müller's method goes something along these lines.

Assume that the polynomial through the points x_{0}, x_{1}, and x_{2} can be written in the form:

f(x) = a(x - x_{2})^{2} + b(x - x_{2}) + c

Then, when we evaluate this function at the points x_{0}, x_{1}, and x_{2} to get:

f(x_{0}) = a(x_{0} - x_{2})^{2} + b(x_{0} - x_{2}) + c
f(x_{1}) = a(x_{1} - x_{2})^{2} + b(x_{1} - x_{2}) + c
f(x_{2}) = a(x_{2} - x_{2})^{2} + b(x_{2} - x_{2}) + c

Knowing that f(x_{2}) = c, we can then do a bit of subtraction to find that:

f(x_{0}) - f(x_{2}) = a(x_{0} - x_{2})^{2} + b(x_{0} - x_{2})
f(x_{1}) - f(x_{2}) = a(x_{1} - x_{2})^{2} + b(x_{1} - x_{2})

Now comes the fun part, we get to manipulate this to find values of a and b.

h_{0} = x_{1} - x_{0}
h_{1} = x_{2} - x_{1}
d_{0} = (f(x_{1}) - f(x_{0}))/h_{0}
d_{1} = (f(x_{2}) - f(x_{1}))/h_{1}

Toss this into the two equations above, do a little algebra, and you come up with:

a = (d_{1} - d_{0})/(h_{1} + h_{0})
b = ah_{1} + d_{1}
c = f(x_{2})

Fun, eh! We're not done yet! We can then find that the new estimate for the root, x_{3}, is at:

x_{3} = x_{2} - 2c/(b +-√(b^{2} - 4ac))

We want to use the sign of √(b^{2} - 4ac) that agrees with the sign of b. If b is positive, add the square root, if b is negative, subtract the square root.

Now that we have the new guess for the root of the function, we get to do it all again! But which of the old guesses do we throw out? That depends. If you know that the function only has real roots, keep the two values that are closest to x_{3}. If you are trying to find complex roots as well, use a sequential approach. Toss out the old value of x_{0}, for the next iteration, x_{0 new} is x_{1 old}, x_{1 new} is x_{2 old}, and x_{2 new} is x_{3}.

**Repeat Until Dead.**

Or keep going until the guess is close enough to the actual root to suit your purposes. How close you want it is up to you, or whoever's marking your assignment in my case.

The fact that this method can be used to find complex roots is one of the main advantages of Müller's method, since that's what it was designed for. Otherwise, you'd probably want to just stick to something with less calculations, like the "regula falsi" method.

**Node Your Homework!**