牛頓法(Newton's method)
/ NOO-tunz /
假設你站在曲線上的某點,想走到它穿越零的地方,卻看不遠。一個合理的賭注:就在你站的地方把曲線當成一條直線——它的切線——沿著這條線滑到「它」碰到零的位置,跨過去。從新的點再做一次。牛頓法正是這條「沿切線走到 x 軸截距」的規則,而在單根附近它以驚人的速度逼近。
推導一行就夠。在 x_n 處切線為 y = f(x_n) + f'(x_n)(x - x_n)。令 y = 0 解 x,得下一個猜測:x_{n+1} = x_n - f(x_n) / f'(x_n)。你計算函數與其導數,跨出大小為 -f(x_n)/f'(x_n) 的一步,重複到 f 很小為止。幾何上,每個迭代值就是當前點切線與軸的交點;陡峭的曲線(大的 |f'|)小心地走一小步,平緩的曲線一躍而過。在「單根」附近(f = 0 但 f' 不為零),誤差服從 e_{n+1} 約等於 C * e_n^2——正確位數大致每步「加倍」,3 位變 6 位、再變 12 位。這就是二次收斂。
牛頓法是無數求解器背後的主力,從硬體計算平方根與倒數,到訓練神經網路、求解龐大的非線性系統(以雅可比矩陣取代 f')。但它的速度是「局部」的恩賜,不是保證:它需要好的起始猜測、不為零的導數、表現良好的函數。離根遠時它可能劇烈過衝、陷入循環,或在 f' 接近零時遊蕩離去;在重根處它退化為僅線性。這就是為什麼穩健的程式會夾住根,在牛頓法失常時退回二分法。
要求 sqrt(2),解 f(x) = x^2 - 2 = 0,f'(x) = 2x,故 x_{n+1} = x_n - (x_n^2 - 2)/(2 x_n) = (x_n + 2/x_n)/2——這就是古老的「把猜測與 2/猜測 取平均」規則。從 x_0 = 1:1.5、1.41667、1.414216、1.4142135623747——正確位數大約每步加倍,四次迭代即達機器精度。
x_{n+1} = x_n - f(x_n)/f'(x_n):沿切線走到軸;單根附近位數加倍。
二次收斂是單根附近、起點良好時的「局部」承諾——並非無條件。糟糕的猜測、接近零的 f',或重根,都可能讓牛頓法發散、循環或緩爬,所以正式求解器一定為它配上保護措施。