我敦促您查看 Wikipedia 上有关应用牛顿法求数的平方根的部分。
流程一般是这样工作的,我们的功能是
f(x) = x 2 - a
f'(x) = 2x
a
我们想要求平方根的数字在哪里。
因此,我们的估计将是
x n+1 = x n - (x n 2 - a) / (2x n )
因此,如果您最初的猜测是x<sub>0</sub>
,那么我们的估计是
x 1 = x 0 - (x 0 2 - x) / (2x 0 )
x 2 = x 1 - (x 1 2 - x) / (2x 1 )
x 3 = x 2 - (x 2 2 - x) / (2x 2 )
...
将其转换为代码,将我们最初的猜测作为函数参数本身,我们会得到类似
def newton_sqrt(a):
x = a # initial guess
for i in range(20):
x -= (x*x - a) / (2.0*x) # apply the iterative process once
return x # return 20th estimate
这是一个小演示:
>>> def newton_sqrt(a):
... x = a
... for i in range(20):
... x -= (x*x - a) / (2.0*x)
... return x
...
>>> newton_sqrt(2)
1.414213562373095
>>> 2**0.5
1.4142135623730951
>>>
>>> newton_sqrt(3)
1.7320508075688774
>>> 3**0.5
1.7320508075688772