01
设 r 是f(x) = 0的根,选取 作为r的初始近似值,过点 做曲线 的切线L,L的方程为 ,求出L与x轴交点的横坐标 , 称 是 的一次近似。
过点 做曲线 定位切线,并求该切线与x轴交点的横坐标,也就是当 时, ,称为r的二次近似值
重复以上过程,得r的近似值序列,其中, 是r的n+1次近似根,这个式子也称作牛顿迭代公式。
已经证明,如果是连续的,并且待求的零点是孤立的,那么在零点周围存在一个区域,只要初始值位于这个邻近区域内,那么牛顿法必定收敛。
02 Python实现
def newton(x0, niter,threshold, f, f_grade):
iter = 0
while niter>0:
x1 = x0 - f(x0)/f_grade(x0)
if f(x1)<threshold:
break
x0 = x1
iter +=1
print(str(iter)+"x="+str(x1))
niter-=1
return x1
s = newton(50, 100, 1e-10, lambda x:x*x-11*x+10, lambda x: 2*x - 11)
print('solve = '+ str(s))
结果为:
1x=27.97752808988764
2x=17.189213932471937
3x=12.210790103826884
4x=10.364159272422459
5x=10.013631541265838
6x=10.000020584192082
7x=10.000000000047079
solve = 10.0
方程为
依次求导后公式为:
r = 10
致谢:公众号