Talk:Muller's method

Its about time we have a discussion in here.

The recurrance relation for Müller's method is the following:
 * $$q = \frac{x_i - x_{i-1}}{x_{i-1} - x_{i-2}}$$
 * $$A = q f(x_i) - q (1 + q) f(x_{i-1}) + q^2 f(x_{i-2}) \,\!$$
 * $$B = (2q + 1) f(x_i) - (1+q)^2 f(x_{i-1}) + q^2 f(x_{i-2}) \,\!$$
 * $$C = (1 + q) f(x_i) \,\!$$
 * $$x_{i+1} = x_i - (x_i - x_{i-1}) \left[\frac{2 C}{B \pm \sqrt{B^2 - 4 A C}}\right]$$

I would add this except I don't want to do so without listing the source. The problem is I don't know how to cite something I found through Google Print.

There are two books to choose from. One is "Numerical Recipes in Fortran: The Art of Scientific Computing" by William H Press, et al. (page 364, ISBN 052143064X) and the second is "Numerical Recipes in C: The Art of Scientific Computing" also by William H Press, et al. (page 371, ISBN 0521431085).

Also, it would be good if someone with the time would derive the relation. Then Wikipedia would be a step ahead of everyone else. :-D 127 22:29, 29 October 2005 (UTC)


 * You need not say that you found the sources through Google Print (if you found it at the library, you also wouldn't mention the library catalogue). Just give it your best shot; I've put this page on my watchlist so I can correct you if you're doing something wrong. You might want to look at Cite your sources for more guidance.
 * I don't think the derivation of the recurrence relation is sufficiently encyclopaedic to be included in Wikipedia, but others may have a different opinion. -- Jitse Niesen (talk) 16:05, 31 October 2005 (UTC)


 * Thanks for the response. My confusion followed from MLA's wierd citing requirements for online resources.
 * Other articles have the derivation for their methods. It could yield insight into the method for a slightly more advanced peruser. 127 17:43, 1 November 2005 (UTC)

Müller's method: a variation
Suppose one has three points (x1,y1), (x2, y2) and (x3,y3), where the interval [x1,x3] is known to contain the root. Then, instead of interpolating using a parabola, use Thiele's interpolation formula for the three points.

Briefly, write h1=x2-x1 and h2=x3-x2; then a better approximation for the root is:

h1*h2*y2*(y1-y3)/(h1*y1*y2+h2*y2*y3-(h1+h2)*y1*y3)+x2

and this is, in practice, better than using Müller's method (unless, that is, h1*y1*y2+h2*y2*y3-(h1+h2)*y1*y3=0; this is related to the colinearity condition). (If the three points have equally-spaced abscissae, as will often be the case, the simplification is obvious.)

The interesting point about this formula is that, in effect, it is solving a _linear_ equation, in spite of there being three points rather than two. This is because, in this case, Thiele's interpolation formula uses a rectangular hyperbola of the form:

1/(a*x+b)+c

to interpolate the function through the three points. Similarly, 4 or 5 points imply (a reciprocal containing) a quadratic equation, 6 or 7 points (a reciprocal containing) a cubic equation; and so on.

I have never seen these written down anywhere - but have used formulae such as these - successfully - for years ...

Curiously, they work if the y_i are complex, too - in which case the "interval condition" is irrelevant, and merely needs to be replaced by one of "sufficient closeness to the root"!

It's Muller, not Müller
David E. Muller is an American computer scientist whose name has always been spelled without an umlaut. Not sure where Wikipedia picked up the umlaut from. Somebody should change the page title and change the text in several places. — Preceding unsigned comment added by 192.12.184.6 (talk) 20:12, 12 August 2011 (UTC)
 * ✅ Qwfp (talk) 16:55, 2 March 2012 (UTC)

Probably this confusion has its origin in the documentation of the IMSL routine ZANLY. The name Muller stems from the German name Müller.Marcuszengl (talk) 15:44, 11 November 2012 (UTC)

Error in python code
The code line "w = div_diff(f, (x2, x1)) + div_diff(f, (x2, x0)) - div_diff(f, (x2, x1))" is erroneous. The first and last terms cancel out. The last term should be smething like "div_diff(f, (x1, x0)" Peter.schild (talk) 22:17, 22 August 2023 (UTC)