Python计算平方根

Python计算平方根

用Match包


import math

math.sqrt( x )

自己实现

二分法

  • 步骤:
    • ①low = 0;high = x;
    • ②guess = (low + high) / 2
    • ③如果guess² == x,则输出guess,程序结束;
    • ④如果guess² > x,则high = guess,继续执行步骤②
    • ⑤如果guess² < x,则low = guess,继续执行步骤②
def dichotomy_sqrt(x):
    if x > 1:   #在0到1之间的数,我们知道0到1之间的任何一个数平方后的结果都小于原值(0,1除外),因此如果要沿用上面的程序达不到“逼近”的作用,反而扩大了
        a = 1.0
        b = x
    else:
        a = x
        b = 1.0
    y = (a + x)/2
    while abs(y * y - x) > 1e-6:
        if y * y > x:
            b = y
            y = (y + a) /2
        else:
            a = y
            y = (y + b) /2
    return y

牛顿迭代法 百度百科

#牛顿迭代法
def Newton_sqrt(x,y=1):
    z = x/y
    if abs(z - y) < 0.000001:
        return z
    else:
        y = (y + z)/2
        return Newton_sqrt(x,y)
  

def sqrt1(x, y=1):
    return x / y if abs(x/y - y) < 0.000001 else sqrt(x, (x/y + y)/2)

sqrt2 = lambda x, y=1:x / y if abs(x/y - y) < 0.000001 else sqrt2(x, (x/y + y)/2)

思路

牛顿迭代

仔细思考一下就能发现,我们需要解决的问题可以简单化理解。

从函数意义上理解:我们是要求函数f(x)=x²,使f(x)=num的近似解,即x²-num=0的近似解。

从几何意义上理解:我们是要求抛物线g(x)=x²-num与x轴交点(g(x)=0)最接近的点。

我们假设g(x0)=0,即x0是正解,那么我们要做的就是让近似解x不断逼近x0,这是函数导数的定义:

image.png

可以由此得到

image.png

从几何图形上看,因为导数是切线,通过不断迭代,导数与x轴的交点会不断逼近x0。

image.png

对于一般情况:

image.png

将m=2代入:

image.png

利用“将长方形变得更像正方形”的思路也可以得到求 A

的算数平方根的迭代公式

相关文献
image.png

image.png

image.png

你可能感兴趣的:(Python计算平方根)