牛顿迭代法(Newton's method),也叫牛顿-拉夫逊法,是一种求方程f(x) = 0的近似解的数学方法,它的核心思想是:用切线去近似函数,把切线与x轴的交点作为下一次的近似根。
假设我们要解方程f(x) = 0,在方程上取一点(x0, f(x0)),那么这一点上的切线斜率为:
f'(x0)
切线方程为:
y - f(x0) = f'(x0) (x - x0)
我们需要切线方程与X轴的交点,所以令y = 0,可以得到:
0 - f(x0) = f'(x0) (x - x0)
所以可以解出X:
x = x0 - f(x0) / f'(x0)
不断重复这个过程,让新得到的x代入f(x)并求切线以及切线与x轴的交点。我们可以归纳出牛顿迭代公式如下:
xn+1 = xn - f(xn) / f'(xn)
我们以求解√5的值为例,配合图像去深入理解牛顿迭代法。
首先,要求解√5的值,我们就是在解方程x2 = 5,也就是求解x2 - 5 = 0
绘制f(x) = x2 - 5的图像:

f(x)的导数为:f'(x) = 2x
我们在图像上随机地取一个点A(3.047, 4.28421)
似乎有点太随机了,小数位好多。不过不用担心,计算过程交给计算器了,实际应用可以取一个距离√5最近的整数。
在A点的切线斜率为:2 * 3.047 = 6.094
在A点的切线表达式为:y - 4.28421 = 6.094(x - 3.047)
绘制A点的切线:

可以看到,第一条切线与x轴的交点为(2.34398, 0)
绘制x = 2.34394,得到f(2.34398) = 0.49424,点B(2.34398, 0.49424)

在点B的斜率为4.68796,在B点处的切线表达式为y - 0.49424 = 4.68796(x - 2.34398),绘制切线。

第二条切线与X轴的交点为(2.23855, 0)

可以发现,每当我们进行一次迭代,切线与x轴的交点都会向函数的零点接近一步,我们可以反复进行这个过程,直到精度符合要求。
上文中推导出了牛顿迭代法的通用公式:
xn+1 = xn - f(xn) / f'(xn)
在求解任意正实数的平方根案例中,f(xn) = x2n - a,f'(xn) = 2xn,所以该公式在本案例中可以化简为:
xn+1 = (xn + a / xn) / 2
接下来给出牛顿迭代法计算正实数平方根的Python3语言实现:
def sqrt_newton(n):
eps = 1e-15
x = 1
while True:
nx = (x + n / x) / 2
if abs(x - nx) < eps:
break
x = nx
return x以上就是本文的全部内容,如有谬误欢迎在评论区指正。
评论 (3)