Python計算平方根
用Match包
import math
math.sqrt( x )
自己實現(xiàn)
二分法
- 步驟:
- ①low = 0;high = x;
- ②guess = (low + high) / 2
- ③如果guess2 == x,則輸出guess,程序結(jié)束;
- ④如果guess2 > x,則high = guess,繼續(xù)執(zhí)行步驟②
- ⑤如果guess2 < x,則low = guess,繼續(xù)執(zhí)行步驟②
def dichotomy_sqrt(x):
if x > 1: #在0到1之間的數(shù),我們知道0到1之間的任何一個數(shù)平方后的結(jié)果都小于原值(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ā)現(xiàn),我們需要解決的問題可以簡單化理解。
從函數(shù)意義上理解:我們是要求函數(shù)f(x)=x2,使f(x)=num的近似解,即x2-num=0的近似解。
從幾何意義上理解:我們是要求拋物線g(x)=x2-num與x軸交點(g(x)=0)最接近的點。
我們假設g(x0)=0,即x0是正解,那么我們要做的就是讓近似解x不斷逼近x0,這是函數(shù)導數(shù)的定義:

image.png
可以由此得到

image.png
從幾何圖形上看,因為導數(shù)是切線,通過不斷迭代,導數(shù)與x軸的交點會不斷逼近x0。

image.png
對于一般情況:

image.png
將m=2代入:

image.png
利用“將長方形變得更像正方形”的思路也可以得到求 A
的算數(shù)平方根的迭代公式
相關(guān)文獻

image.png

image.png

image.png