牛頓迭代法(newton』s method)又稱為牛頓-拉夫遜(拉弗森)方法(newton-raphson method),它是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。
既然牛頓迭代法可以用來求解方程的根,那麼不妨以方程 x2=nx2=n 為例,來試著求解它的根。為此。令f(x)=x2−nf(x)=x2−n, 也就是相當於求解 f(x)=0f(x)=0 的解,如上圖所示。
首先隨便找乙個初始值 x0x0,如果 x0x0不是解,做乙個經過 (x0,f(x0))(x0,f(x0)) 這個點的切線,與xx軸的交點為x1x1。同樣的道理,如果 x1x1不是解,做乙個經過(x1,f(x1))(x1,f(x1))這個點的切線,與xx軸的交點為x2x2。 以此類推。以這樣的方式得到的xixi會無限趨近於 f(x)=0f(x)=0 的解。
判斷xixi是否是f(x)=0f(x)=0的解有兩種方法: 一是直接計算f(xi)f(xi)的值判斷是否為00,二是判斷前後兩個解xixi和xi−1xi−1是否無限接近。
經過(xi,f(xi))(xi,f(xi))這個點的切線方程為
f(x)=f(xi)+f′(xi)(x−xi)f(x)=f(xi)+f′(xi)(x−xi)
其中,f′(x)f′(x)為f(x)f(x)的導數,本題中為2x2x。令切線方程等於 00,即可求出
xi+1=xi−f(xi)f′(xi)xi+1=xi−f(xi)f′(xi)
繼續化簡
xi+1=xi−x2i−n2xi=xi−xi2+n2xi=xi2+n2xixi+1=xi−xi2−n2xi=xi−xi2+n2xi=xi2+n2xi
基於上述迭代公式,我們其實給出了乙個求平方根的演算法。事實上,這也的確是很多語言中內建的開平方函式的實現方法。
leetcode上也有一道經典面試題目涉及到開平方函式的實現,如下
基於我們已經給出的牛頓迭代法,下面就可來程式設計解決該問題了,示例**如下
class solution while (abs(cur - pre) > 0.00001);
return int(cur); }};
學習筆記 牛頓迭代法
牛頓迭代法 ne wton sme thod n ew ton smet ho d 一般用於求函式的乙個零點。牛頓迭代法三個步驟 隨機 猜乙個 p p 值求x p role presentation x p x p時的切線,即求導數令p p 切線零點,返回步驟 2 2 重複若干次.即 x n 1 x...
學習筆記 牛頓迭代法
假設我們有函式 f x x 在 x 0 處有 infty 階導數。我們知道 f x 0 的值 我們希望構造乙個多項式 g 使它盡可能逼近函式 f beging x xi 0 f x 0 frac x 0 x x 0 1 frac x 0 x x 0 2 frac x 0 x x 0 n xi 0 f...
Hession矩陣與牛頓迭代法
1 求解方程。並不是所有的方程都有求根公式,或者求根公式很複雜,導致求解困難。利用牛頓法,可以迭代求解。原理是利用泰勒公式,在x0處展開,且展開到一階,即f x f x0 x x0 f x0 求解方程f x 0,即f x0 x x0 f x0 0,求解x x1 x0 f x0 f x0 因為這是利用...