如何用牛頓迭代法求平方根

2021-09-10 14:52:43 字數 2858 閱讀 4861

設函式y=f(x)在點x0的某個鄰域內有定義,當自變數x在x0處有增量δx,(x0+δx)也在該鄰域內時,相應地函式取得增量δy=f(x0+δx)-f(x0);如果δy與δx之比當δx→0時極限存在,則稱函式y=f(x)在點x0處可導,並稱這個極限為函式y=f(x)在點x0處的導數記作①f』(x0) ;②y』│x=x0 ;③ │x=x0, 即

導函式如果函式y=f(x)在開區間內每一點都可導,就稱函式f(x)在區間內可導。這時函式y=f(x)對於區間內的每乙個確定的x值,都對應著乙個確定的導數,這就構成乙個新的函式,稱這個函式為原來函式y=f(x)的導函式,記作y』、f』(x)、dy/dx或df(x)/dx,簡稱導數。

導數是微積分的乙個重要的支柱。牛頓及萊布尼茨對此做出了卓越的貢獻。

幾何意義

函式y=f(x)在x0點的導數f』(x0)的幾何意義:表示函式曲線在點p0(x0,f(x0))處的切線的斜率(導數的幾何意義是該函式曲線在這一點上的切線斜率)。

(二)牛頓迭代法

牛頓迭代法(newton』s method)又稱為牛頓-拉夫遜方法(newton-raphson method),它是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。多數方程不存在求根公式,因此求精確根非常困難,甚至不可能,從而尋找方程的近似根就顯得特別重要。方法使用函式f(x)的泰勒級數的前面幾項來尋找方程f(x) = 0的根。牛頓迭代法是求方程根的重要方法之一,其最大優點是在方程f(x) = 0的單根附近具有平方收斂,而且該法還可以用來求方程的重根、復根。另外該方法廣泛用於計算機程式設計中。

設r是f(x) = 0的根,選取x0作為r初始近似值,過點(x0,f(x0))做曲線y = f(x)的切線l,l的方程為y = f(x0)+f』(x0)(x-x0),求出l與x軸交點的橫座標 x1 = x0-f(x0)/f』(x0),稱x1為r的一次近似值。

過點(x1,f(x1))做曲線y = f(x)的切線,並求該切線與x軸交點的橫座標 x2 = x1-f(x1)/f』(x1),稱x2為r的二次近似值。重複以上過程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f』(x(n)),稱為r的n+1次近似值,上式稱為牛頓迭代公式。

根據牛頓迭代的原理,可以得到以下的計算sqrt(n)的迭代公式:x(n+1)=[x(n)+p/xn]/2。詳細解釋見下文。

一般性的程式設計方法如下:

複製**

1 double sqr(double n)

6 return k;

7 }複製**

(三)利用牛頓迭代法計算開平方根

這種演算法的原理很簡單,我們僅僅是不斷用(x,f(x))的切線來逼近方程x2-a=0的根。根號a實際上就是x2-a=0的乙個正實根,這個函式的導數是2x。也就是說,函式上任一點(x,f(x))處的切線斜率是2x。那麼,x-f(x)/(2x)就是乙個比x更接近的近似值。代入f(x)=x2-a得到x-(x2-a)/(2x),也就是(x+a/x)/2。

過程如下:

首先隨便猜乙個近似值x,然後不斷令x等於x和a/x的平均數,迭代個六七次後x的值就已經相當精確了。

例如,我想求根號2等於多少。假如我猜測的結果為4,雖然錯的離譜,但你可以看到使用牛頓迭代法後這個值很快就趨近於根號2了:

( 4 + 2/ 4 ) / 2 = 2.25

( 2.25 + 2/ 2.25 ) / 2 = 1.56944…

( 1.56944…+ 2/1.56944…) / 2 = 1.42189…

( 1.42189…+ 2/1.42189…) / 2 = 1.41423…

下面用c語言實現一遍:

複製**

1 #include 「stdio.h」

2 #include 「math.h」

34 int main(void)

5 17 printf(「平方根為%f\n」,y);

18 return 0;

19 }

複製**

程式執行結果:

複製**

請輸入乙個需要求其平方根的數:2

y=1.500000

y=1.416667

y=1.414216

平方根為1.414216

請輸入乙個需要求其平方根的數:3

y=2.000000

y=1.750000

y=1.732143

y=1.732051

平方根為1.732051

複製**

更快的方法

2023年12月,美國id software公司發布了名為「雷神之鎚iii」的電子遊戲。它是第乙個支援軟體加速的遊戲,取得了極大成功。(由於影響力過大,文化部於2023年將它列入了非法遊戲名單)

雷神之鎚iii並不是id software公司的第一次成功。早在2023年開始,這家公司就以「毀滅戰士」系列遊戲名聞天下。2023年,「毀滅戰士」的安裝數超過了當年微軟的windows 95。據傳比爾蓋茨才曾經考慮買下id software。(id software公司後來被推出過「上古卷軸」系列的bethesda公司買下)

id software所取得的成功很大程度上要歸功於它的創始人約翰·卡馬克。馬克爾也是乙個著名的程式設計師,他是id software遊戲引擎的主要負責人。 回到剛才提到的雷神之鎚,馬克爾是開源軟體的積極推動者,他於2023年公布了雷神之鎚iii的源**。至此人們得以通過研究這款遊戲引擎的原始檔來檢視它成功的秘密。

在其中乙個名字為q_math.c的檔案中發現了如下**段。

複製**

1 float q_rsqrt( float number )

複製**

這段**的作用就是求number的平方根,並且返回它的倒數。經測試這段**比(float)(1.0/sqrt(x))快4倍。

以雷神之鎚iii程式為藍本可以寫出比sqrt()更強大的求平方根函式:

複製**

1 int sqrt(float 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...