Example 1
Suppose we wish to find a root of the polynomial f(x) = x7 + 3x6 + 7x5 + x4 + 5x3 + 2x2 + 5x + 5. There exist closed form solutions to the roots of polynomials for quartics and below, and this is a degree seven polynomial, so thus we must use a numerical technique. We will use x0 = 0, x1 = -0.1, and x2 = -0.2 as our three initial approximations. We will let the two values εstep = 0.0001 and εabs = 0.0001 and we will halt after N = 100 iterations.
We will use six decimal digit arithmetic to find a solution.
The easiest way to present such information is in tabular format:
| n | xn - 2 | xn - 1 | xn | xn + 1 | |f(xn + 1)| | |xn + 1 - xn| |
|---|---|---|---|---|---|---|
| 2 | 0.0 | -0.1 | -0.2 | -1.14874 | 13.6910 | 0.94874 |
| 3 | -0.1 | -0.2 | -1.14874 | -0.568100 | 1.65995 | 0.580640 |
| 4 | -0.2 | -1.14874 | -0.568100 | -0.669622 | 0.51613 | 0.101522 |
| 5 | -1.14874 | -0.568100 | -0.669622 | -0.702849 | 0.05806 | 0.033227 |
| 6 | -0.568100 | -0.669622 | -0.702849 | -0.706858 | 0.00047 | 0.004009 |
| 7 | -0.669622 | -0.702849 | -0.706858 | -0.706826 | 0.00001 | 0.000032 |
Thus, with the last step, both halting conditions are met, and therefore, after six iterations, our approximation to the root is -0.706826 .
Example 2
The following demonstrates the first six iterations of Müller's method in Matlab. Suppose we wish to find a root of the same polynomial
starting with the same three initial approximations x0 = 0, x1 = -0.1, and x2 = -0.2.
The first formula in red is the root of the quadratic polynomial which is added onto the middle approximation x(2).
>> p = [1 3 7 1 5 2 5 5]
p =
1 3 7 1 5 2 5 5
>> x = [0.0 -0.1 -0.2]' % first three approximations
x =
0.00000
-0.10000
-0.20000
>> % 1st iteration ---------------------------------------
>> M = [(x(1) - x(2))^2, x(1) - x(2), 1
0, 0, 1
(x(3) - x(2))^2, x(3) - x(2), 1]
M =
0.01000 0.10000 1.00000
0.00000 0.00000 1.00000
0.01000 -0.10000 1.00000
>> y = polyval( p, x )
y =
5.00000
4.51503
4.03954
>> c = M \ y
c =
0.47367
4.80230
4.51503
>> x = [x(2), x(3), x(2) - 2*c(3)/(c(2) + sqrt(c(2)^2 - 4*c(1)*c(3)))]'
x =
-0.10000
-0.20000
-1.14864
>> % 2nd iteration ---------------------------------------
>> M = [(x(1) - x(2))^2, x(1) - x(2), 1
0, 0, 1
(x(3) - x(2))^2, x(3) - x(2), 1]
M =
0.01000 0.10000 1.00000
0.00000 0.00000 1.00000
0.89992 -0.94864 1.00000
>> y = polyval( p, x )
y =
4.5150
4.0395
-13.6858
>> c = M \ y
c =
-13.2838
6.0833
4.0395
>> x = [x(2), x(3), x(2) - 2*c(3)/(c(2) + sqrt(c(2)^2 - 4*c(1)*c(3)))]'
x =
-0.20000
-1.14864
-0.56812
>> % 3rd iteration ---------------------------------------
>> M = [(x(1) - x(2))^2, x(1) - x(2), 1
0, 0, 1
(x(3) - x(2))^2, x(3) - x(2), 1]
M =
0.89992 0.94864 1.00000
0.00000 0.00000 1.00000
0.33701 0.58052 1.00000
>> y = polyval( p, x )
y =
4.0395
-13.6858
1.6597
>> c = M \ y
c =
-21.0503
38.6541
-13.6858
>> x = [x(2), x(3), x(2) - 2*c(3)/(c(2) + sqrt(c(2)^2 - 4*c(1)*c(3)))]'
x =
-1.14864
-0.56812
-0.66963
>> % 4th iteration ---------------------------------------
>> M = [(x(1) - x(2))^2, x(1) - x(2), 1
0, 0, 1
(x(3) - x(2))^2, x(3) - x(2), 1]
M =
0.33701 -0.58052 1.00000
0.00000 0.00000 1.00000
0.01030 -0.10151 1.00000
>> y = polyval( p, x )
y =
-13.6858
1.6597
0.5160
>> c = M \ y
c =
-31.6627
8.0531
1.6597
>> x = [x(2), x(3), x(2) - 2*c(3)/(c(2) + sqrt(c(2)^2 - 4*c(1)*c(3)))]'
x =
-0.56812
-0.66963
-0.70285
>> % 5th iteration ---------------------------------------
>> M = [(x(1) - x(2))^2, x(1) - x(2), 1
0, 0, 1
(x(3) - x(2))^2, x(3) - x(2), 1]
M =
0.01030 0.10151 1.00000
0.00000 0.00000 1.00000
0.00110 -0.03322 1.00000
>> y = polyval( p, x )
y =
1.65973
0.51602
0.05802
>> c = M \ y
c =
-18.6991
13.1653
0.5160
>> x = [x(2), x(3), x(2) - 2*c(3)/(c(2) + sqrt(c(2)^2 - 4*c(1)*c(3)))]'
x =
-0.66963
-0.70285
-0.70686
>> % 6th iteration ---------------------------------------
>> M = [(x(1) - x(2))^2, x(1) - x(2), 1
0, 0, 1
(x(3) - x(2))^2, x(3) - x(2), 1]
M =
0.00110 0.03322 1.00000
0.00000 0.00000 1.00000
0.00002 -0.00401 1.00000
>> y = polyval( p, x )
y =
0.51602
0.05802
-0.00046
>> c = M \ y
c =
-21.8018
14.5107
0.0580
>> x = [x(2), x(3), x(2) - 2*c(3)/(c(2) + sqrt(c(2)^2 - 4*c(1)*c(3)))]'
x =
-0.70285
-0.70686
-0.70683
The list of all iterations using Matlab are:
0.000000000000000 -0.100000000000000 -0.200000000000000 -1.148643697414111 -0.568122032631211 -0.669630566165950 -0.702851144883234 -0.706857484921269 -0.706825973130949 -0.706825980788168 -0.706825980788170
Note how convergence speeds up after none of the first three initial approximations are used to calculate the next iterate?
Copyright ©2005 by Douglas Wilhelm Harder. All rights reserved.


