§23-4  收縮映射的不動點

一個把所有距離都拉短的函數,會不會一定有某一點被送回它自己?如果有,那一點唯一嗎、找得到嗎?走到第 n 步時,離答案還有多遠?

被送回自己的那一點

把一張這座城市的地圖攤在這座城市的地面上。地圖比實地小得多,可是圖上一定有某一個點,恰好落在它所代表的那個實際位置正上方。不管地圖怎麼擺、怎麼轉、怎麼歪,這個點都存在,而且只有一個。

「縮小」在數學上就是上一篇的 contraction:任何兩點的距離都被拉短。「落在自己所代表的位置上」就是 f(u) = u。本篇證明這件事對每一個 contraction 都成立,而且證明本身就是一套求解的算法——它不只說「有」,還告訴你怎麼一步一步逼近,以及走到第 n 步時離答案還有多遠。

DEFINITION
Let f have domain D(f) ⊆ ℝᵖ and values in the same space ℝᵖ. A point u ∈ D(f) is a fixed point of f in case f(u) = u.
定義域與值域在同一個空間裡,「輸入等於輸出」才有意義。解方程式與找不動點是同一件事:要解 h(x) = 0,把它改寫成 x = x − h(x),右邊那個函數的不動點就是原方程式的根。
正例:f(x) = (x + 3)/4 的不動點是 x = 1——解 x = (x + 3)/4 得 4x = x + 3。反例:g(x) = x + 1 沒有任何不動點——x = x + 1 無解。要留意 g 保持每一對點的距離不變(Lipschitz 倍率恰為 1),可見倍率必須嚴格小於 1。
23.5  FIXED POINT THEOREM FOR CONTRACTIONS
Let f be a contraction with domain ℝᵖ and values in ℝᵖ. Then f has exactly one fixed point.
存在與唯一一次到位。證明是建構式的:從任何一點出發反覆代入,得到的數列一定收斂,而極限就是那個不動點。出發點可以隨便挑,因為答案唯一,走哪條路都到同一處。
正例:f(x) = (x + 3)/4 是 contraction(倍率 ¼),從 x₁ = 0 出發得 0, 0.75, 0.9375, 0.984375, ⋯,逼近唯一的不動點 1。反例:定理要求倍率嚴格小於 1——平面上的旋轉保持所有距離(倍率恰為 1),除了轉軸那一點之外沒有別的不動點,而 g(x) = x + 1 連一個都沒有。
PROOF  1/2 · 存在

設 C 滿足 0 < C < 1 且 ‖f(x) − f(y)‖ ≤ C‖x − y‖ 對所有 x, y 成立。任取 x₁ ∈ ℝᵖ,並遞迴定義 x_{n+1} = f(xₙ)。

證明計畫 · 由所求想起
所求是一個滿足 f(u) = u 的點,而手上沒有任何候選人。就用迭代數列自己造一個:先證相鄰兩項的距離以 Cⁿ 的速度崩塌,再把這些距離加起來壓住任意兩項的距離——等比級數的和有現成的上界。距離既然一致地趨向零,數列就是 Cauchy,完備性交出極限。最後讓連續性把遞迴式的兩邊同時取極限,等式立刻變成不動點方程式。

Proof.  Applying the contraction condition to the recursion gives
  ‖x_{n+1} − xₙ‖ = ‖f(xₙ) − f(x_{n−1})‖ ≤ C‖xₙ − x_{n−1}‖,
and hence, by induction, ‖x_{n+1} − xₙ‖ ≤ C^{n−1}‖x₂ − x₁‖ for every n.
這一步的所求:量出相鄰兩項的距離。遞迴式讓「第 n+1 與第 n 項」正好是「第 n 與第 n−1 項」的像,於是 contraction 條件每往回走一格就乘一次 C,走到底就是 C^{n−1} 乘上最初那一步的長度。這也是 §23-3 那條合成引理的具體樣貌:第 n 項是 f 作用 n−1 次的結果。拿 f(x) = (x + 3)/4 從 x₁ = 0 驗:‖x₂ − x₁‖ = 0.75,而 ‖x₃ − x₂‖ = 0.1875 = 0.75/4,吻合。
If m > n, inserting the intermediate terms and summing the estimates gives
  ‖x_m − x_n‖ ≤ (C^{n−1} + ⋯ + C^{m−2})‖x₂ − x₁‖,
and since 0 < C < 1 the bracket is at most C^{n−1}/(1 − C). Hence
  ‖x_m − x_n‖ ≤ [C^{n−1}/(1 − C)] ‖x₂ − x₁‖.
這一步的所求:把「相鄰項靠近」升級成「任意兩項靠近」,這是 Cauchy 定義要的形狀。做法是把 x_m 到 x_n 的路程拆成一段一段相鄰的跳躍,用三角不等式相加;而右邊那串等比和不管加多少項都不超過 C^{n−1}/(1 − C)——上界只跟起點編號 n 有關,與 m 無關,這一點是下一步的關鍵。
Because 0 < C < 1, the sequence (C^{n−1}) converges to 0; so given ε > 0 the right-hand side is smaller than ε for all large n. Thus (xₙ) is a Cauchy sequence and, by 16.10, converges to some u ∈ ℝᵖ.
這一步兌現完備性。Cauchy 判準在這裡不可替代——我們手上根本沒有極限的候選人,所以任何需要先寫出極限的判準都用不上,而 §16-5 的 16.10 恰好不需要。上一步「上界與 m 無關」在這裡見效:Cauchy 的定義要求編號都夠大的任意兩項靠近,而我們的上界只看較小的那個編號。
Finally, a contraction is continuous (it satisfies a Lipschitz condition), so letting n → ∞ in x_{n+1} = f(xₙ) and using 20.2(c) gives u = f(u).
這一步收網。左邊 (x_{n+1}) 是 (xₙ) 去掉第一項,極限仍是 u(15.3:極限只認尾巴);右邊 (f(xₙ)) 依 20.2(c) 收斂到 f(u),而同一條數列的極限唯一(14.5),兩邊只好相等。整個遞迴式在極限之下變成了不動點方程式。
不動點不只存在,還是一條可以實際走的路徑的終點。∎
PROOF  2/2 · 唯一

存在已經到手,剩下的是排除第二個。這一段完全不用迭代,只用一次 contraction 條件。

Proof.  Suppose u and v are both fixed points. Then
  ‖u − v‖ = ‖f(u) − f(v)‖ ≤ C‖u − v‖.
If u ≠ v then ‖u − v‖ > 0 and dividing by it gives 1 ≤ C, contrary to C < 1. Hence u = v.
這一步的所求:讓兩個不動點自相矛盾。左邊那個等號是全部的機關——不動點讓 u 與 f(u) 是同一個東西,於是「兩點的距離」與「兩個像的距離」變成同一個數,而 contraction 說後者嚴格小於前者(距離不為零時)。一個正數不可能小於自己,所以距離只能是零。這裡看得出 C = 1 為什麼不行:那時不等式變成 ‖u − v‖ ≤ ‖u − v‖,永遠成立,什麼都推不出來。
倍率嚴格小於 1 同時買下存在與唯一。∎
x₁ u 每走一步,跨距乘上 C

這張圖在說 23.5 的建構:從任意一點 x₁ 出發反覆代入,相鄰兩步的跨距每次乘上同一個小於 1 的倍率,於是路徑的總長有限,點列被迫聚攏。圖上的路線可以繞、可以來回,收斂與方向無關——真正起作用的只有跨距的等比崩塌。終點 u 不隨出發點改變,因為第二段證明排除了第二個不動點。

23.6  COROLLARY
With f, C and (xₙ) as above, the sequence converges to the unique fixed point u with the estimate
  ‖u − xₙ‖ ≤ [C^{n−1}/(1 − C)] ‖x₂ − x₁‖.
走到第 n 步時離答案還有多遠,只看兩樣東西:倍率 C 與第一步的長度,完全不必知道答案是什麼。這正是這條定理在實際計算裡的價值——它自帶一份誤差保證,可以拿來決定要迭代幾輪。
正例:f(x) = (x + 3)/4 從 x₁ = 0 出發,C = ¼、‖x₂ − x₁‖ = 0.75。第 4 步的估計是 (0.25³/0.75) · 0.75 = 0.015625,而實際誤差是 1 − 0.984375 = 0.015625——恰好相等,因為這個函數每一步都貼著倍率走。反例:估計是上界,一般會鬆——例 6 的實際誤差就比估計小約 4%。
PROOF

要證的估計與上一條證明第二步那個估計只差一件事:那裡的左邊是 ‖x_m − xₙ‖,這裡要換成 ‖u − xₙ‖。

Proof.  Fix n and let m → ∞ in the inequality ‖x_m − xₙ‖ ≤ [C^{n−1}/(1 − C)] ‖x₂ − x₁‖. The left side tends to ‖u − xₙ‖ and the right side does not depend on m, so 15.8 gives the stated estimate.
這一步是例行核對,可是兩個細節不能省。左邊要能取極限,靠的是 norm 本身連續(§22-3 剛用過的反向三角不等式);右邊之所以不動,正是上一條證明刻意把上界寫成「只跟 n 有關」的用意。最後 §15-4 的 15.8 保證非嚴格不等式過得了極限——嚴格不等式過不了,這也是估計寫成 ≤ 的理由。
誤差上界只用得到出發點與倍率,不必先知道答案。∎
例 6兩個未知數,十輪進到千分之一
解聯立方程式通常用消去法。可是換成迭代,會發生什麼事——而且事先知道要算幾輪嗎?
  1. 要解的是 x = 0.4y + 1、y = 0.4x + 2。把右邊看成一個函數:
      f(x, y) = (0.4y + 1,  0.4x + 2),
    解就是它的不動點。
  2. 先驗它是 contraction:兩點的像之差是 (0.4Δy, 0.4Δx),長度是 0.4√(Δy² + Δx²) = 0.4‖Δ‖。恰好等於 0.4 倍,所以 C = 0.4 < 1,23.5 適用。
  3. 從 x₁ = (0, 0) 開始代:
      x₂ = (1, 2),x₃ = (1.8, 2.4),x₄ = (1.96, 2.72),
      x₅ = (2.088, 2.784),x₆ = (2.1136, 2.8352)。
  4. 真正的答案是 u = (15/7, 20/7) ≈ (2.142857, 2.857143)(把第一式代入第二式解出來)。x₅ 的實際誤差是 ‖(0.054857, 0.073143)‖ ≈ 0.0914。
  5. 對照 23.6 的估計:‖x₂ − x₁‖ = √5 ≈ 2.2361,於是 n = 5 的上界是
      (0.4⁴/0.6) · 2.2361 ≈ 0.0954。
    實際的 0.0914 確實在它之下,而且只差約 4%——估計相當緊。
  6. 反過來用它決定輪數:想讓誤差小於 0.001,需要 3.727 · 0.4^{n−1} < 0.001,也就是 0.4^{n−1} < 0.000268,取 n = 10 即可。這件事在開始迭代之前就算得出來。
第 6 步是這條定理最實用的一面:誤差上界只用到出發點與倍率,所以「要算幾輪」是可以事先決定的,不必邊算邊猜。第 2 步值得留意——這個 f 的倍率恰好等於 0.4 而不只是不超過,因為它把兩個座標的差整組交換再縮小,長度的變化因此完全可控。
x₁ x₂ u 每一步的跨距乘上 0.4

這張圖在說例 6 的路徑:第一步跨得很遠(從原點到 x₂ = (1, 2)),之後每一步的跨距只剩前一步的 0.4 倍,五步之後點列已經幾乎壓在終點上。整條折線的總長不超過第一步的 1/(1 − 0.4) 倍,這正是 23.6 的估計在幾何上的意思——剩下的路程被首步長度與倍率一起框住。

—— 第四階段到此結束 ——

本篇把上一篇的距離崩塌兌現成一個點:contraction 在全空間上恰有一個不動點(23.5),而證明本身就是算法——從任意一點反覆代入,相鄰跨距以 C^{n−1} 崩塌,等比和把任意兩項壓在一起,Cauchy 判準交出極限,連續性讓遞迴式在極限之下變成不動點方程式。唯一性只用一次 contraction 條件。23.6 附上誤差保證,例 6 用一組二維的方程式驗證它相當緊,而且可以事先算出要迭代幾輪。喝口水、動一動——下一篇要處理一個現實得多的情形:函數常常只定義在一顆球上,而不是整個空間。