Python牛顿法求平方根 - 求任意方根
程序员文章站
2022-04-02 11:52:37
...
原理
求?的值,也就是求 a 开方的值。随机定一个点 x,可以算出点 x 处的导数 dy_dy = n
⋅
\cdot
⋅ x
n
−
1
^{n-1}
n−1,而点 x 处的导数可以近似的等于要求的点与 x 点的
Δ
\Delta
Δy /
Δ
\Delta
Δx,从而可以算出
Δ
\Delta
Δx,x +
Δ
\Delta
Δx 就是?的值;但是如果随机的 x 和要求的 ? 相差比较大时,这个近似的导数值就会差别很大,所以需要多次迭代去让 x +
Δ
\Delta
Δx 的值靠近?的真实值,越靠近,导数的近似误差就越小。
def root(a, n=2):
y = lambda x: x ** n
dy_dx = lambda x: n * x ** (n - 1) # x点的导数y'
dx = lambda x: (a - y(x)) / dy_dx(x) # ∆x ≈ ∆y / y'
x = 1 # 随机定的x点,也可以是其他数值
for _ in range(10): # 迭代次数
x += dx(x) # ? = x + ∆x, 再用更新后的值继续迭代逼近
return x
if __name__ == '__main__':
for i in range(1, 11):
print('root(%d) = %.5f' % (i, root(i, n=3)))
输出:
root(1) = 1.00000
root(2) = 1.25992
root(3) = 1.44225
root(4) = 1.58740
root(5) = 1.70998
root(6) = 1.81712
root(7) = 1.91293
root(8) = 2.00000
root(9) = 2.08008
root(10) = 2.15443
上一篇: JAVA简单模拟DVD功能
下一篇: .NET MVC传值