1. 程式人生 > >怎麼用牛頓法解平方根?

怎麼用牛頓法解平方根?

牛頓法求平方根的本質就是在拋物線上任取一點做切線,再把該切線與x軸的交點代入該拋物線方程又得到一根更逼近根的切線,如此迭代最終獲得結果。但是牛頓法求函式根,需要該函式有二階導數,否則牛頓法會在根附近抖動甚至越來越遠。好在拋物線函式符合這個條件,所以可以安全使用牛頓迭代法。
以下是我找到的兩篇講解牛頓法的文章,第一篇通俗講解了牛頓法的思想,第二篇推導了牛頓法求平方根的公式。都是很好的文章,但是都不完美,第一篇沒講怎麼應用在求平方根上,第二篇排版混亂。下文對這兩篇文章做了整理。
https://www.zhihu.com/question/20690553
http://www.voidcn.com/article/p-btcbtpcx-gk.html
(一)形象解釋牛頓迭代法


請參考https://www.zhihu.com/question/20690553,標題為“如何通俗易懂地講解牛頓迭代法求開方?”。此處截圖的目的是留檔,避免連結丟失。

(二)計算機實現牛頓迭代法
1.設函式f(x)的根為r,我們任意選取x_0作為r的初值。
2.過點(x_0,f(x_0))做曲線的切線l,則l的方程為:y=f(x_0)+{f}'(x_0)(x-x_0)
lx軸的交點的x座標為: x_1= x_0 - \frac{f(x_0)}{{f}'(x_0)}
3.計算 \left | x_0 - x_1 \right |的差值,若差值小於一定值,則可認為已經求得解,停止演算法;否則以 x_1 為新的點重複第2步
計算過程中,x_{n+1}稱為rn+1 次近似值,而 x_{n+1} = x_n - \frac{f(x_n)}{{f}'(x_n)} 即稱為牛頓迭代公式。

(三)平方根函式
求數s

的平方根x,則 s = x^{2}。可以定義函式 f(x) = x^2 - s ,最終問題轉換為求方程 f(x) = 0 = x^2 - s的根。
{f}'(x) = 2x,代入牛頓迭代公式得到: x_{n+1} = x_n - \frac{x_n^2-s}{2x_n}
轉換後得到x_{n+1} = \frac{x_n^2 + s}{2x_n}
以此替代上文牛頓迭代法第2步中的公式,迭代計算就得到了平方根。