目前接觸到的牛頓迭代法主要應用於兩個方面:(1)方程求根問題(2)最優化問題。
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),因為這是利用泰勒公式的一階展開,f(x) = f(x0)+(x-x0)f'(x0)處並不是完全相等,而是近似相等,這裡求得的x1並不能讓f(x)=0,只能說f(x1)的值比f(x0)更接近f(x)=0,於是乎,迭代求解的想法就很自然了,可以進而推出x(n+1)=x(n)-f(x(n))/f'(x(n)),通過迭代,這個式子必然在f(x*)=0的時候收斂。整個過程如下圖:
2、牛頓法用於最優化
在最優化的問題中,線性最優化至少可以使用單純行法求解,但對於非線性優化問題,牛頓法提供了一種求解的辦法。假設任務是優化乙個目標函式f,求函式f的極大極小問題,可以轉化為求解函式f的導數f'=0的問題,這樣求可以把優化問題看成方程求解問題(f'=0)。剩下的問題就和第一部分提到的牛頓法求解很相似了。
這次為了求解f'=0的根,把f(x)的泰勒展開,展開到2階形式:
這個式子是成立的,當且僅當 δx 無線趨近於0。此時上式等價與:
求解:
得出迭代公式:
一般認為牛頓法可以利用到曲線本身的資訊,比梯度下降法更容易收斂(迭代更少次數),如下圖是乙個最小化乙個目標方程的例子,紅色曲線是利用牛頓法迭代求解,綠色曲線是利用梯度下降法求解。
在上面討論的是2維情況,高維情況的牛頓迭代公式是:
其中h是hessian矩陣,定義為:
高維情況依然可以用牛頓迭代求解,但是問題是hessian矩陣引入的複雜性,使得牛頓迭代求解的難度大大增加,但是已經有了解決這個問題的辦法就是quasi-newton methond,不再直接計算hessian矩陣,而是每一步的時候使用梯度向量更新hessian矩陣的近似.
3、牛頓迭代法應用
應用牛頓迭代法求解方根,只需要迭代幾次便可以得到相當精確的結果。
首先設x^m=a,
因此應用牛頓迭代法我們可以快速尋找平方根,下面的這種方法可以很有效地求出根號a的近似值:首先隨便猜想乙個近似值x,然後不斷令x等於x和a/x的平均數即(x+a/x)/2,迭代個六七次後x的值就已經相當精確了。(x+a/x)/2的迭代公式我們可以利用牛頓迭代法求解f(x)=x^2-a的0點的迭代公式推導出。
const double eps = 1e-6;
double sqrt(double x)
牛頓迭代法
創新工廠的筆試題 不用庫函式sqrt 求乙個整型數n的開方,要求精度達到0.001即可。在這裡首先介紹一下牛頓迭代法 假設乙個方程為 f x 0 那麼假設其解為x0,則用泰勒級數展開之後可得 f x f x0 f x0 x x0 0 其中x為其近似解。根據上式推導出 x x0 f x0 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 即為...
牛頓迭代法
今天,沉浸在神犇部落格中的我,看到z姐姐在群裡發的乙個還很有意思的問題 不用庫函式怎麼開根,這題好整啊,頓時感覺到可以從大佬的部落格中解脫一會了 逃 這個問題是很標準的牛頓迭代問題,第一次研究它的時候應該是在大一上學期吧,當時我第一次對一些庫函式的實現產生了好奇 這種好奇止於禽獸的sqrt原始碼 這...