Copyright (C) 2020 Andreas Kloeckner
import numpy as np
import matplotlib.pyplot as pt
def f(x):
return np.exp(x) - 2
def df(x):
return np.exp(x)
xgrid = np.linspace(-2, 3, 1000)
pt.grid()
pt.plot(xgrid, f(xgrid))
[<matplotlib.lines.Line2D at 0x7fec13f69048>]
What's the true solution of $f(x)=0$?
xtrue = np.log(2)
print(xtrue)
print(f(xtrue))
0.69314718056 0.0
Now let's run Newton's method and keep track of the errors:
errors = []
x = 2
At each iteration, print the current guess and the error.
x = x - f(x)/df(x)
print(x)
errors.append(abs(x-xtrue))
print(errors[-1])
0.69314718056 0.0
for err in errors:
print(err)
0.577523385913 0.13881012318 0.00920340345722 4.22216905669e-05 8.91323015395e-10 0.0
# Doubles number of digits each iteration: probably quadratic.
Let's check:
for i in range(len(errors)-1):
print(errors[i+1]/errors[i]**2)
0.416180751055 0.47764604026 0.498469622214 0.499992953401 0.0