求根與非線性方程

收縮映射條件(contraction-mapping condition)

為什麼反覆按 cos 會穩定下來,而某些別的規則卻飛散?決定性的因素在於每一步是把點「拉近」還是「推遠」。一個總是縮短任意兩個輸入之間距離的規則,稱為收縮(contraction),而收縮正是讓不動點迭代收斂的關鍵。

把它說精確。在 x = g(x) 的不動點 x* 附近,記誤差 e_n = x_n - x*。因為 g(x*) = x*,泰勒展開給出 e_{n+1} = g(x_n) - g(x*) 約等於 g'(x*) * e_n。所以每一步把誤差大約乘上 g'(x*)。若 |g'(x*)| < 1,誤差幾何級數地縮小,迭代收斂(線性收斂,速率為 |g'(x*)|);若 |g'(x*)| > 1,誤差變大,迭代發散;若 |g'(x*)| = 0,便得到超線性收斂(這就是牛頓法二次速度的祕密)。完整的定理(巴拿赫不動點定理)說:若在一個被 g 映回自身的區間上 |g'(x)| <= L < 1,則 g 在其中有「唯一」不動點,且從區間內任一起點迭代都收斂到它。

由此得到兩個實用教訓。第一,對於簡單的 |g'(x*)| 檢驗,條件是根附近的「局部」性質,所以好的起始猜測很重要;全域的巴拿赫版本還額外要求 g 把你留在區間內。第二,|g'(x*)| 的大小決定速度:接近 0.99 的值收斂得令人痛苦地慢(要多得十位數約需 2300 步),而接近 0 的值飛快。這就是為什麼我們努力把 f(x) = 0 改寫成根處 g' 很小的 x = g(x),也是為什麼把 g'(x*) 逼到零的牛頓法,比一般的不動點方案快得多。

對 g(x) = cos(x),不動點為 x* = 0.739,g'(x*) = -sin(0.739) = -0.674,|g'| = 0.674 < 1——所以迭代收斂,但僅線性:每步保留約前一誤差的 0.674,大約六步多得一個十進位有效位。對 g(x) = x^2 - 1 在 x* = 1.618,g'(x*) = 2 * 1.618 = 3.24 > 1,故迭代發散。

|g'(x*)| < 1 即收斂;越接近 0,收斂越快。

|g'(x*)| < 1 只在你起步夠近時保證收斂(且就全域定理而言,g 要把區間映回自身)。恰好 |g'(x*)| = 1 時檢驗無法判定——迭代可能緩爬、振盪或停滯。

又稱
contraction condition|g'| < 1 condition壓縮映射收縮條件