用牛顿法求算术平方根python

用牛顿法求算术平方根

要求

不用数学库函数sqrt()函数求一个数的平方根

解法

采用牛顿迭代法也就是牛顿法求解

通过迭代公式来求得f(x)=0的解

x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1}=x_n- \frac{f(x_n)} {f'(x_n)} xn+1=xnf(xn)f(xn)

这个公式源于泰勒展开式
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + 1 2 f ′ ′ ( x 0 ) ( x − x 0 ) 2 + ⋯ + 1 n ! f n ( x 0 ) ( x − x 0 ) n f(x)=f(x_0)+f'(x_0)(x-x_0)+\frac{1}{2}f''(x_0)(x-x_0)^2+\cdots+\frac{1}{n!}f^n(x_0)(x-x_0)^n f(x)=f(x0)+f(x0)(xx0)+21f(x0)(xx0)2++n!1fn(x0)(xx0)n
如果只考虑前两项的话,那么就可以得到一个近似的等式
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f(x)=f(x_0)+f'(x_0)(x-x_0) f(x)=f(x0)+f(x0)(xx0)
令f(x)=0,对x求解,就可以得到一个近似解
x = x 0 − f ( x 0 ) f ′ ( x 0 ) x=x_0-\frac{f(x_0)}{f'(x_0)} x=x0f(x0)f(x0)
得到迭代公式后,就可以进行求解了

求一个数m的算术平方根,也就是对 x 2 − m = 0 x^2-m=0 x2m=0 求解

将f(x)和f’(x)=2x代入上面的迭代公式,可以得到
x n + 1 = x n − x n 2 − m 2 x n = x n 2 − m 2 x n x_{n+1}=x_n-\frac{x_n^2-m}{2x_n}=\frac{x_n}{2}-\frac{m}{2x_n} xn+1=xn2xnxn2m=2xn2xnm

python实现

def newton(m):
    x0=m/2           #初始化初始点,任意点即可
    x1=x0/2+m/(x0*2)   
    while abs(x1-x0)>1e-5:   #精确到小数点后四位,近似解十分接近的时候停止迭代
        x0=x1
        x1 = x0 / 2 + m / (x0 * 2)
    return x1
print('%.4f'%newton(2))

运行结果

1.4142

你可能感兴趣的:(算法,python,算法)