newton.py
import numpy as np
def newton( x0, f, fprime, eps, maxitr ):
x = x0
for i in range(maxitr):
fval = f(x)
s = - fval/fprime(x)
print( i, x, fval )
x += s
if np.abs(s) < eps:
print(i+1,x,f(x))
return x, True
print(i+1,x,f(x))
return x,False
if __name__ == '__main__':
from xsqm2 import xsqm2, xsqm2_prime
print( newton( 1.5, xsqm2, xsqm2_prime, 1.e-10, 10 ) )
'''
$ py newton.py
0 1.5 0.25
1 1.4166666666666667 0.006944444444444642
2 1.4142156862745099 6.007304882871267e-06
3 1.4142135623746899 4.510614104447086e-12
4 1.4142135623730951 4.440892098500626e-16
(1.4142135623730951, True)
'''