微積分 · 牛頓法

牛頓法

牛頓法藉由反覆執行同一個步驟來逼近f的根:從猜測值xₙ出發,取(xₙ, f(xₙ))處的切線,再以它與x軸的交點作為下一個猜測值。拖曳起點,觀察快速收斂、循環或越跳越遠的情況。

在這張圖中理解牛頓法

牛頓法反覆執行一個步驟,逼近f的根,也就是滿足f(r)=0f(r) = 0的數r。在目前的猜測值xnx_n處,取曲線上(xn,f(xn))(x_n, f(x_n))這一點的切線,其方程式為L(x)=f(xn)+f′(xn)(x−xn)L(x) = f(x_n) + f'(x_n)(x - x_n)。在xnx_n附近,切線貼近曲線,因此切線與x軸的交點,是曲線交點的更好猜測。解L(x)=0L(x) = 0就得到下一個猜測值。圖上的每一步先沿淡虛線,從xnx_n走到曲線,再沿切線走向軸。

牛頓法的一步,f′(xₙ) ≠ 0時才有定義
xn+1=xn−f(xn)f′(xn)x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}

將誤差寫成en=xn−re_n = x_n - r。若r是單根(f′(r)≠0f'(r) \ne 0),而且f有連續的二階導函數,對步驟做泰勒展開可知,當xnx_n接近r時有en+1≈f′′(r)2f′(r) en2e_{n+1} \approx \frac{f''(r)}{2f'(r)}\,e_n^2。誤差平方大致會讓正確位數加倍。對x² − 2,從x₀ = 1開始,誤差為0.086、0.0025、2.1 × 10⁻⁶和1.6 × 10⁻¹²;讀數顯示en/en−12e_n/e_{n-1}^2逐漸接近1/(22)≈0.3541/(2\sqrt2) \approx 0.354。遠離根時就沒有這項保證。若f′′(r)=0f''(r) = 0,平方項消失,收斂更快:對arctan x,下一個誤差約為−23en3-\tfrac23 e_n^3,每一步變成立方。

這個步驟需要f′(xn)≠0f'(x_n) \ne 0。水平切線不與軸相交,幾乎水平的切線則在遠處相交:x² − 2從0.1出發,第一步落在10.05。方法也可能不往遠處逃,卻仍然失敗。對x³ − 2x + 2,0處的切線落在1,1處的切線又落回0,附近的起點也被拉進此循環:數列有界,卻沒有極限。對arctan x,有一道界線α ≈ 1.3917,它滿足2α=(1+α2)arctan⁡α2\alpha = (1 + \alpha^2)\arctan\alpha。|x₀| < α的起點收斂,超過界線的則每次落到另一側更遠處。「所有起點」依各起點的去向為x軸上色。對x³ − 2x + 2,[−3, 3]約五分之一落入循環,包括聚集在切線水平點±2/3\pm\sqrt{2/3}附近的細帶。起點改用複數時,這些帶就形成牛頓分形。

重根處也有f′(r)=0f'(r) = 0,誤差平方的效果便消失了。對(x−1)2(x - 1)^2,步驟恰好是xn+1=(xn+1)/2x_{n+1} = (x_n + 1)/2,所以誤差每一步減半。這是一次收斂,每多一位正確小數約需3.3步。接近m重根時,比值en+1/ene_{n+1}/e_n趨近(m−1)/m(m - 1)/m。

值得留意

  • 牛頓在1669年討論過x3−2x−5=0x^3 - 2x - 5 = 0。從2出發,今天使用的方法依次給出2.1、2.0945681和2.0945514817,三步後已準確到小數點後九位。
  • 對f(x)=x2−af(x) = x^2 - a,步驟是xn+1=12(xn+a/xn)x_{n+1} = \tfrac12\left(x_n + a/x_n\right):這就是古老的平方根算法,將猜測值與a除以該猜測值的結果取平均。

操作

  • 沿x軸拖曳藍點x₀,或按在軸上把它放到該處。它會吸附在0.5的倍數上。
  • 設定n來顯示相應步數,或按n → ∞逐步走到n = 10。記錄保留各個xₙ及其誤差;到根、碰到水平切線,或超過10⁶時會提前停止。
  • 開啟「所有起點」,依各起點的去向為x軸上色。

相關概念