機器學習日常2 牛頓迭代法原理與程式設計

2021-08-19 06:55:24 字數 1205 閱讀 2028

牛頓迭代法(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 因為這是利用...