牛頓迭代法求平方根和立方根:
(作者初學,文章有些粗略,請諒解。)
1 #include2using
namespace
std;
3doublen;4
double sqrt(double x)
13return
x;14}15
intmain()
1 #include//立方根2 #include3
求平方根:
為了方便理解,就先以本題為例:
計算x2 = n的解,令f(x)=x2-n,相當於求解f(x)=0的解,如左圖所示。
首先取x0,如果x0不是解,做乙個經過(x0,f(x0))這個點的切線,與x軸的交點為x1。
同樣的道理,如果x1不是解,做乙個經過(x1,f(x1))這個點的切線,與x軸的交點為x2。
以此類推。(迭代的起點要恰當)。
以這樣的方式得到的xi會無限趨近於f(x)=0的解。
判斷xi是否是f(x)=0的解有兩種方法:
一是直接計算f(xi)的值判斷是否為0,二是判斷前後兩個解xi和xi-1是否無限接近。
經過(xi, f(xi))這個點的切線方程為f(x) = f(xi) + f』(xi)(x - xi),其中f'(x)為f(x)的導數,本題中為2x。令切線方程等於0,即可求出xi+1=xi - f(xi) / f'(xi)。
繼續化簡,xi+1=xi - (xi2
- n) / (2xi) = xi - xi / 2 + n / (2xi) = xi / 2 + n / 2xi = (xi + n/xi) / 2。
(xi + n/xi) / 2尤其重要。
求立方根:
對於求a的立方根,可以設f(x)=x^3-a,從而轉換成求解f(x)=0,即求方程的根。
f(x)展開泰勒公式:f(x)=f(x0)+(x-x0)*f'(x0)=0,得出的x=x0-f(x0)/f'(x0)=g(x0),此時遞迴呼叫該式子可以逐步接近於最終結果。
為什麼會接近於最終結果?當然,牛頓迭代並不是無條件收斂的。
首先,要保證f'(x0)!=0,這樣f(x)=0將等價於x=x-f(x)/f'(x)。而x_k+1=xk-f(xk)/f'(xk)=g(xk),由迭代過程收斂性定理可得abs(g'(xk))<=l<1(具體證明請讀者自行查詢)。
g'(x*)=f(x*)*f''(x*)/[f'(x)]^2,x*為f(x)的乙個根,所以g『(x*)=0,g''(x*)=f''(x*)/f'(x*)!=0,只要f』『(x*)!=0,則牛頓迭代法收斂。
牛頓迭代法相比起二分收斂快,**量少,但內容要深入理解。
(感謝qlky的解釋)
牛頓迭代法
創新工廠的筆試題 不用庫函式sqrt 求乙個整型數n的開方,要求精度達到0.001即可。在這裡首先介紹一下牛頓迭代法 假設乙個方程為 f x 0 那麼假設其解為x0,則用泰勒級數展開之後可得 f x f x0 f x0 x x0 0 其中x為其近似解。根據上式推導出 x x0 f x0 f x0 這...
牛頓迭代法
目前接觸到的牛頓迭代法主要應用於兩個方面 1 方程求根問題 2 最優化問題。1 求解方程。並不是所有的方程都有求根公式,或者求根公式很複雜,導致求解困難。利用牛頓法,可以迭代求解。原理是利用泰勒公式,在x0處展開,且展開到一階,即f x f x0 x x0 f x0 求解方程f x 0,即f x0 ...
牛頓迭代法
欲求某方程 f x 0 的根,按照以下步驟進行求解 令x0 1 也可以選擇其他值 i 0,1,2 1 求出 f xi 和 導數f xi 2 令 x i 1 xi f xi f xi 3 將 x i 1 帶入方程 f x 計算方程值,當方程值與目標值的誤差小於預定值時,退出演算法輸出 x i 1 即為...