求根與非線性方程

割線法(secant method)

牛頓法很快,卻在每一步都要求導數 f'(x)——而有時你沒有它的公式,或計算它代價高昂。割線法是自然的補救:用通過最近兩個點的直線取代精確切線,沿「它」走到軸。它是把導數換成有限差分估計的牛頓法,保留了牛頓法大部分的速度,卻完全不需要導數。

保留最近的兩個猜測 x_{n-1} 與 x_n 及其函數值。通過 (x_{n-1}, f(x_{n-1})) 與 (x_n, f(x_n)) 的直線是一條割線;它穿越零的位置就是下個猜測:x_{n+1} = x_n - f(x_n) * (x_n - x_{n-1}) / (f(x_n) - f(x_{n-1}))。注意那個分數 (x_n - x_{n-1}) / (f(x_n) - f(x_{n-1})) 不過是用兩點建出的近似 1/f'(x_n)——導數以估計取代微分後的牛頓公式。每次迭代只花「一次」新的函數計算(牛頓法要 f 與 f' 兩者),這在真實成本上往往使割線法每步更便宜。

它的收斂階是黃金比例 p = 1.618——超線性:比二分法的線性緩爬快,比牛頓法的二次飛躍慢,但因為不必提供導數、每步只算一個函數值,割線法整體上常是更划算的選擇。誠實的提醒:它「不是」夾根法(兩點未必跨越根),所以像牛頓法一樣,從糟糕起點可能發散或跳開;而當兩點極度接近時,差商 f(x_n) - f(x_{n-1}) 會遭受災難性抵消,污染斜率。它的夾根表親(regula falsi、Brent)以一點速度換取保證的安全。

用 x_0 = 1、x_1 = 2 解 x^2 - 2 = 0。斜率估計 (4 - (-1))/(2 - 1) = 5,給出 x_2 = 2 - 2*(2-1)/(4-(-1)) = 1.6。接著 x_3 = 1.4118、x_4 = 1.41421...——以黃金比例速率收斂到 sqrt(2),全程不曾算過導數。

用有限差分斜率的牛頓法:階數 1.618,每步一個新 f 值,不需導數。

割線法不夾住根,所以從糟糕起點會像牛頓法一樣發散。而當 x_n 與 x_{n-1} 變得很接近時,f(x_n) - f(x_{n-1}) 因抵消而失去精度,所以斜率估計恰好在你接近答案時退化。

又称
secant iterationderivative-free Newton割線法弦線法