附錄 C 計算數學中的關鍵符號與公理體系#
計算數學的符號大多沿用自十九世紀的分析學與線性代數,但其中一些記號——尤其是範數 \(\|x\|\)、梯度 \(\nabla\) 與漸進記號 \(\mathcal{O}\)——有著各自的歷史。另一方面,計算數學在實數公理之外,另有一套「浮點數公理」:IEEE 754 標準(1985 年首版,主導者 William Kahan 獲 1989 年圖靈獎)定義的算術並不滿足實數的結合律與分配律,理解這套「公理」的邊界,是本書貫穿始終的主題。本附錄先列出關鍵符號表,再說明浮點數與數值分析的基礎假設。
C.1 關鍵符號表#
| 符號 | 讀法 / 名稱 | 意義 | 常見出現場合 |
|---|---|---|---|
| \(\|x\|_p\) | \(p\)-範數 | $(\sum_i | x_i |
| \(\|A\|_F\) | Frobenius 範數 | \(\sqrt{\sum_{ij} a_{ij}^2}\) | 矩陣逼近、PCA 誤差 |
| \(\|A\|_2\) | 譜範數 | \(A\) 的最大奇異值 \(\sigma_1\) | 矩陣擾動分析 |
| \(\kappa(A)\) | 條件數 | \(\kappa(A) = \|A\| \|A^{-1}\| = \sigma_1/\sigma_n\)(譜範數下) | 捨入誤差放大、CG 收斂率 |
| \(\mathcal{O}(f)\) | 大 O(Landau 記號) | $ | g |
| \(\Omega(f)\) | 大 Omega | $ | g |
| \(\Theta(f)\) | Theta | 同時為 \(\mathcal{O}\) 與 \(\Omega\) | 緊確複雜度 |
| \(o(f)\) | 小 o | \(g/f \to 0\) | 漸近比較 |
| \(\nabla f\) | 梯度(gradient) | \(\left(\frac{\partial f}{\partial x_1}, \dots, \frac{\partial f}{\partial x_n}\right)^\top\) | 最佳化、微分方程 |
| \(\nabla^2 f\) 或 \(H_f\) | Hessian | 二階偏導數矩陣 | 牛頓法 |
| \(J_F\) | Jacobian | \([J]_{ij} = \partial F_i / \partial x_j\) | 非線性系統、座標變換 |
| \(\mathbb{R}^n, \mathbb{C}^n\) | — | 實/複 \(n\) 維向量空間 | 各處 |
| \(A^\top, A^*, A^{-1}\) | — | 轉置、共軛轉置、反矩陣 | 線性代數 |
| \(A^\dagger\) | Moore–Penrose 偽反矩陣 | 滿足四個 Penrose 條件的廣義反矩陣 | 最小平方、SVD |
| \(\sigma_i(A), \lambda_i(A)\) | — | 奇異值、特徵值 | SVD、譜分析 |
| \(\langle x, y \rangle\) | 內積 | 滿足正定性、線性、對稱(或共軛對稱)的雙線性形式 | CG、正交性 |
| \(\approx, \simeq\) | — | 近似等於 | 數值結果 |
| \(\varepsilon\) | epsilon | 精度參數或機器 epsilon | 收斂準則 |
| \(\mathrm{fl}(x)\) | 浮點化 | \(x\) 經捨入後的浮點表示 | 誤差分析 |
C.2 浮點數的「公理」——IEEE 754#
IEEE 754 定義的浮點數不是實數:它是一個有限集合 \(\mathbb{F}\) 加上一組特定的捨入規則。以下性質可視為浮點算術的「公理」,並與實數公理對照:
| 性質 | 實數 | IEEE 754 浮點數 |
|---|---|---|
| 封閉性 | \(\mathbb{R}\) 對四則運算封閉(除以 0 除外) | 溢出得 \(\pm\infty\),下溢得次正規數或 0;運算結果總是被捨入回 \(\mathbb{F} \cup \{\pm\infty, \text{NaN}\}\) |
| 加法結合律 \((a+b)+c = a+(b+c)\) | 成立 | 一般不成立(捨入順序影響結果) |
| 分配律 \(a(b+c) = ab+ac\) | 成立 | 一般不成立 |
| 加法交換律 | 成立 | 成立(捨入是對稱的) |
| 存在單位元素 0 與 1 | 成立 | 成立(但 \(-0 \ne 0\) 依比較、\(-0 = 0\) 依相等判斷,微妙) |
| 稠密性 | 任意兩實數間有第三實數 | 不成立;相鄰浮點數之間有間距 \(\mathrm{ulp}\) |
| 基本保證 | — | 每次加、減、乘、除、開根號的結果等於精確結果經捨入(正確捨入,correctly rounded);IEEE 754 (2008) 亦將 FMA(fused multiply-add)納入標準 |
| 特殊值 | — | \(\pm\infty\)、\(\pm 0\)、NaN(Not a Number);NaN 與任何值比較皆為 false |
推論:因為結合律不成立,平行求和的順序會改變結果;因為單次運算正確捨入,誤差分析才能以 \(\mathrm{fl}(a \oplus b) = (a \oplus b)(1+\delta)\),\(|\delta| \le u\)(\(u\) 為單位捨入誤差)這一「標準模型」展開——這是本書誤差分析章節的基礎。
C.3 數值分析的基本定理假設#
數值分析的幾乎所有收斂定理,都建立在對函數光滑性或凸性的假設上。下表列出常用假設與其扮演的角色:
| 假設 | 定義 | 典型用途 |
|---|---|---|
| 連續性 | \(f(x_k) \to f(x)\) 當 \(x_k \to x\) | 中間值定理、根的存在性 |
| 可微性(\(C^1\)、\(C^2\)) | 一階/二階導數存在且連續 | 梯度法、牛頓法收斂 |
| Lipschitz 連續 | \(\|f(x)-f(y)\| \le L\|x-y\|\) | Picard 迭代、ODE 解的存在唯一性(Lipschitz–Picard 定理)、梯度法速率 |
| 強凸性 | \(\langle \nabla f(x)-\nabla f(y), x-y\rangle \ge \mu \|x-y\|^2\) | 梯度法線性收斂率中的 \(\mu\)、唯一最小值 |
| 對稱正定(SPD) | \(A = A^\top\) 且 \(x^\top A x > 0\)(\(x \ne 0\)) | Cholesky 分解、CG 的適用條件 |
| 對角佔優 | $ | a_{ii} |
| 壓縮映射 | \(T\) 為 Lipschitz 常數 \(< 1\) 的映射 | 不動點迭代、Banach 不動點定理 |
C.4 收斂速度的定義#
設迭代序列 \(\{x_k\} \to x^\ast\),令誤差 \(e_k = \|x_k - x^\ast\|\)。
- 線性收斂(linear):\(e_{k+1} \le C e_k\),\(0 < C < 1\)。\(C\) 越小越快;CG 的收斂率 \(\left(\frac{\sqrt{\kappa}-1}{\sqrt{\kappa}+1}\right)^k\) 屬於此類。
- 超線性收斂(superlinear):\(\lim_{k\to\infty} e_{k+1}/e_k = 0\);擬牛頓法(BFGS)通常屬此類。
- 二次收斂(quadratic):\(e_{k+1} \le C e_k^2\);牛頓法在良好初始點附近屬此類(誤差位數每步翻倍)。
- \(p\) 階收斂:\(e_{k+1} \le C e_k^p\);\(p=1\) 需 \(C<1\),\(p>1\) 時 \(C\) 只需有限即可。
注意「收斂速度」是迭代法誤差遞減的性質,與附錄 B 的「計算複雜度」互為表裡:達到精度 \(\varepsilon\) 的總成本等於每步成本乘以迭代數,而迭代數由收斂率決定。
C.5 符號的歷史#
Landau 記號#
大 O 記號由德國數學家 Edmund Landau 於 1894 年在解析數論論文中首次使用(以符號 \(\mathcal{O}\) 表示「Ordnung」,即階),並在其 1909 年的質數分佈著作中系統化;\(\Omega\) 與 \(\Theta\) 則是後人(Knuth 1976 年的文章推廣了這套記號)為了區分上界、下界與緊確界而補充的。這套記號從數論傳入演算法分析,成為今日計算機科學的通用語言。
範數記號 \(\|\cdot\|\)#
雙豎線記號的普及與泛函分析的發展同步:Banach(1932)與 Wiener(同時代)在建立賦範空間理論時都使用了某種範數記號,現代通用的 \(\|x\|\) 寫法經 Riesz 等人的教科書而標準化。\(p\)-範數家族則源自 Hölder 與 Minkowski 不等式的研究(十九世紀末至二十世紀初),Minkowski 於 1896 年的幾何數論工作中已使用 \(\ell_p\) 距離的幾何詮釋。
梯度記號 \(\nabla\):Nabla 與蘇格蘭豎琴#
倒三角記號 \(\nabla\) 因形似古希臘—希伯來的豎琴 nabla 而得名。Hamilton 在四元數理論(1837 年前後)中使用了這個記號的錐形;其推廣主要歸功於 Oliver Heaviside 在 1880 年代發展向量分析時的用法,他將 \(\nabla\) 同時用於梯度、散度(\(\nabla \cdot\))與旋度(\(\nabla \times\))。Heaviside 的寫法起初受到 Maxwell 學派部分人士的質疑,但向量記法最終勝出;「nabla」這個暱稱據說出自 1890 年代愛丁堡的 Peter Guthrie Tait 等蘇格蘭數學家的玩笑——nabla 是古代西亞的豎琴名稱,而 Tait 正是蘇格蘭人。今日我們讀 \(\nabla f\) 為「nabla f」或「grad f」,正是這段歷史的痕跡。
條件數 \(\kappa\)#
條件數的概念在 Turing(1948 年關於矩陣過程的論文)與 von Neumann–Goldstine(1947 年誤差分析)中已現雛形,名稱「condition number」由 Turing 提出。希臘字母 \(\kappa\) 的使用則隨 Wilkinson 的著作(1960 年代)而標準化。它把「問題本身的病態」與「演算法的好壞」分開,是數值穩定性理論的基石。