使用牛頓迭代法求平方根

2021-07-07 05:40:37 字數 1171 閱讀 8645

前段時間去面試,被問到「如何在不呼叫庫函式的前提下最快速地求出根號2,結果保留6位有效數字?」

方法一:簡單暴力的逼近法

x = 0.0

count = 0

while 1:

count += 1

x += 0.00001

if x*x >= a:

break

print x

print count

思路就是:x先取0,步長取0.00001,使得x^2逐步逼近2;

使用此方法求得的結果為1.41422,但是此方法迴圈竟然執行了141422次,實在是不快;

回去之後想了下又在網上查了下,了解到下面的方法二

方法二:牛頓迭代法

(1)先設f(x)=x^2 - a;

(2)求f(x)的一階導數,即斜率;

(3)得到xn+1與xn的迭代關係式

化簡上述斜率公式,即得到:

xn+1=1/2*(xn+a/xn);

(4)**實現

def sqrt(a):

x=0.0

y=a/2

count = 0

while(x!=y):

print 'x=',x,'y=',y

count += 1

x=yy=(x+a/x)/2

print count

return x

此方法計算出的結果為:1.41421356237,且只迭代了6次;

總結:

牛頓迭代法的本質是求出xn與xn+1的迭代關係式,此方法可以推廣至求任意次方根,例如求立方根:xn+1=1/3*(2*xn+a/xn^2);

def sqrt_3(a):

x=0.0

y=a/2

count = 0

while(x!=y):

print 'x=',x,'y=',y

count += 1

x=yy=(2*x+a/(x*x))/3

print count

return x

參考資料:

牛頓迭代法求平方根

sqrt 方法 public static double sqrt double c 什麼是牛頓迭代法 多數方程不存在求根公式,牛頓提出了一種用迭代來求方程近似根的方法。思路就是不斷取切線,用線性方程的根逼近非線性方程f x 0的根x 過程簡介 過點 xk,f xk 作函式的切線,切線方程是 切線與...

牛頓迭代法 求平方根

牛頓迭代法 求出根號a的近似值 首先隨便猜乙個近似值x,然後不斷令x等於x和a x的平均數,迭代個六七次後x的值就已經相當精確了。例如,我想求根號2等於多少。假如我猜測的結果為4,雖然錯的離譜,但你可以看到使用牛頓迭代法後這個值很快就趨近於根號2了 這種演算法的原理很簡單,我們僅僅是不斷用 x,f ...

牛頓迭代法求平方根

牛頓迭代法 newton s method 又稱為牛頓 拉夫遜 拉弗森 方法 newton raphson method 它是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。多數方程不存在求根公式,因此求精確根非常困難,甚至不可能,從而尋找方程的近似根就顯得特別重要。方法使用函式f x...