牛頓迭代法

2021-06-18 09:45:46 字數 616 閱讀 8692

創新工廠的筆試題:

不用庫函式sqrt(),求乙個整型數n的開方,要求精度達到0.001即可。

在這裡首先介紹一下牛頓迭代法:

假設乙個方程為

f(x) = 0;

那麼假設其解為x0,則用泰勒級數展開之後可得:

f(x) = f(x0) + f'(x0)(x - x0) = 0

其中x為其近似解。

根據上式推導出:

x = x0 - f(x0) / f'(x0)

這是乙個遞推公式,此處可以假設x0為近似解,遞推無數次之後,都可以得到近似於正確解的值x

現在來看這道筆試題:

f(x) = x * x - n

我們可以假設乙個近似解d = 1.0,根據牛頓迭代法,遞推無數次之後可以得到精確的近似解。

因此:x = d - f(d) / f'(d)

= d - (d * d - n) / (2d)

= (d + n / d) / 2

將上式用函式迭代至精度滿足要求即可。

最終函式相當簡單:

double sqrt(unsigned int n) 

return d;

}

牛頓迭代法

目前接觸到的牛頓迭代法主要應用於兩個方面 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 即為...

牛頓迭代法

今天,沉浸在神犇部落格中的我,看到z姐姐在群裡發的乙個還很有意思的問題 不用庫函式怎麼開根,這題好整啊,頓時感覺到可以從大佬的部落格中解脫一會了 逃 這個問題是很標準的牛頓迭代問題,第一次研究它的時候應該是在大一上學期吧,當時我第一次對一些庫函式的實現產生了好奇 這種好奇止於禽獸的sqrt原始碼 這...