欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python牛顿法求平方根 - 求任意方根

程序员文章站 2022-04-02 11:52:37
...

原理

Python牛顿法求平方根 - 求任意方根
求?的值,也就是求 a 开方的值。随机定一个点 x,可以算出点 x 处的导数 dy_dy = n ⋅ \cdot x n − 1 ^{n-1} n1,而点 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