python平方根計算 Python計算平方根

2021-10-17 00:25:34 字數 1512 閱讀 9413

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

快速計算平方根

在3d圖形程式設計中,經常要求平方根或平方根的倒數,例如 求向量的長度或將向量歸一化。c數學函式庫中的sqrt具有理想的精度,但對於3d遊戲程式來說速度太慢。我們希望能夠在保證足夠的精度的同時,進一步提高速度。carmack在quake3中使用了下面的演算法,它第一次在公眾場合出現的時候,幾乎震住了...

計算平方根的演算法

總結一下一些常用的計算平方根的方法 1.牛頓法 具體的做法如下 計算公式如下 具體的計算程式如下 double sqrt double x return g 2.利用級數進行逼近 微積分中的泰勒級數如下 這樣,有了這個公式我們可以得到求平方根公式的展開式 這樣我們可以進行在一定精度內的逼近。但是這兒...

平方根問題

考慮定義在兩正整數上的函式ssr 平方根之和的平方 ssr a,b sqrt a sqrt b 2。牛牛對函式值為整數的情況很感興趣。現在給定整數n和m,請幫助牛牛計算有序對 a,b 的數量,滿足1 a n,1 b m而且ssr a,b 是乙個整數。這道題本質上是要求sqrt ab 是整數,也就是要...