1843 — Hamilton 四元數#
案件摘要#
1843 年 10 月 16 日傍晚,William Rowan Hamilton 與妻子沿都柏林皇家運河散步。行至 Broombridge(Brougham 橋)時,一個靈感擊中了他:三維旋轉的代數需要放棄乘法交換律。他當場用小刀在橋石上刻下:
四元數(quaternion)就此誕生。這是數學史上第一次有人系統地放棄一條看似神聖的運算律——交換律——卻仍得到一個自洽而強大的代數系統。
前因 -- 為什麼會有這個案子#
- 複數 \(a+bi\) 完美表示平面上的旋轉與伸縮:乘以 \(e^{i\theta}\) 就是旋轉 \(\theta\) 角。Hamilton 稱複數為「二元數的有序對」並給出嚴格理論(1837 年論文)。
- Hamilton 的執念:既然二元數如此優雅,那麼三元數 \((a, b, c)\) 應該能表示三維空間的旋轉。他花了十幾年(約 1830–1843)試圖讓三元數滿足除法與模長規則,全部失敗。
- 失敗的癥結:三維向量 \(a\mathbf{i}+b\mathbf{j}+c\mathbf{k}\) 的乘法無法同時滿足 (1) 每個非零元有逆、(2) 模長相乘 \(|uv|=|u||v|\) 、(3) 交換律。這正是後世 Frobenius 定理(1878)會證明的結論: \(\mathbb{R}\) 上的結合可除代數只有 \(\mathbb{R},\mathbb{C},\mathbb{H}\) 三種——三元數根本不存在。
- 同時代背景:Gauss 1819 年左右在私人手稿中也得到過四元數(未發表);Grassmann 1844 年的擴張論走的是另一條路。
- 案件核心疑問:三維旋轉的「代數兇器」究竟是什麼?為什麼十年的追捕一無所獲?
線索與推理 -- 數學式、程式、理論#
線索一:橋上的刻痕#
Hamilton 的靈感是把「三元」改為「四元」:一個實部加三個虛部:
乘法由刻痕的關係式定義(配合 \(ij=k,\ jk=i,\ ki=j\) 與 \(ji=-k,\ kj=-i,\ ik=-j\) ——注意不交換):
檢驗模長律: \(\bar{q} = a - bi - cj - dk\) (共軛), \(q\bar{q} = a^2+b^2+c^2+d^2\) ,故
這正是著名的四平方和恆等式(Euler 1748 年已發現),Hamilton 當場看穿:它就是四元數乘法的模長律。十年追捕失敗的原因也水落石出——他一直在錯誤的維度(3)搜查,真相在維度 4。
線索二:放棄交換律的第一次#
四元數滿足結合律,但 \(ij = k \neq -k = ji\) 。Hamilton 的勇氣在於:他沒有把「不交換」視為矛盾(兇手逃逸),而是把它視為新代數的特徵指紋。用今日術語,四元數 \(\mathbb{H}\) 是一個非交換體(除法環)——「體」(field)一詞的公理化要再等半個多世紀,但 \(\mathbb{H}\) 是第一個非交換的可除代數實例,預告了 19 世紀後半抽象代數(環、體、群的公理化)的誕生。交換律不再是代數的先驗假設,而是每個系統要個別驗證的偵查項目。
線索三:旋轉表示#
四元數表示三維旋轉的公式:對單位四元數 \(q = \cos\frac{\theta}{2} + \sin\frac{\theta}{2}\,\mathbf{u}\) ( \(\mathbf{u}\) 為單位虛向量,旋轉軸),向量 \(v\) (純虛四元數)的旋轉為:
這是 共軛作用:繞軸 \(\mathbf{u}\) 旋轉 \(\theta\) 角。與旋轉矩陣相比,四元數只需 4 個參數(矩陣要 9 個)、無萬向鎖(gimbal lock)問題、插值平滑(Slerp)。兩個旋轉的合成就是四元數乘法 \(q_2 q_1\) ——注意順序:先 \(q_1\) 後 \(q_2\) ,非交換性在此正是「旋轉順序不可交換」的代數反映。這不是缺陷,是物理事實的忠實記錄。
程式碼範例:四元數旋轉數值驗證#
import numpy as np
def qmul(q1, q2): # Hamilton 積
a1, b1, c1, d1 = q1; a2, b2, c2, d2 = q2
return np.array([
a1*a2 - b1*b2 - c1*c2 - d1*d2,
a1*b2 + b1*a2 + c1*d2 - d1*c2,
a1*c2 - b1*d2 + c1*a2 + d1*b2,
a1*d2 + b1*c2 - c1*b2 + d1*a2])
def qconj(q):
return np.array([q[0], -q[1], -q[2], -q[3]])
def qrotate(q, v): # v' = q v q^{-1}
vq = np.array([0.0, *v])
return qmul(qmul(q, vq), qconj(q))[1:]
# 驗證刻痕:i² = j² = k² = ijk = -1
i = np.array([0, 1, 0, 0]); j = np.array([0, 0, 1, 0]); k = np.array([0, 0, 0, 1])
print("i² =", qmul(i, i), " j² =", qmul(j, j), " k² =", qmul(k, k))
print("ijk =", qmul(qmul(i, j), k))
print("ij =", qmul(i, j), " ji =", qmul(j, i), " <- 不交換!")
# 模長律 |q1 q2| = |q1||q2|
q1 = np.array([1, 2, 3, 4]) / np.sqrt(30)
q2 = np.array([2, 1, -1, 1]) / np.sqrt(7)
print("|q1 q2| =", np.linalg.norm(qmul(q1, q2)),
" |q1||q2| =", np.linalg.norm(q1)*np.linalg.norm(q2))
# 繞 z 軸轉 90°:(1,0,0) -> (0,1,0)
theta = np.pi/2
qz = np.array([np.cos(theta/2), 0, 0, np.sin(theta/2)])
print("旋轉 (1,0,0) ->", np.round(qrotate(qz, [1, 0, 0]), 6))
# 與旋轉矩陣對照
Rz = np.array([[0, -1, 0], [1, 0, 0], [0, 0, 1]])
print("矩陣結果 =", Rz @ np.array([1, 0, 0]))
# 合成順序:先繞 z 90° 再繞 x 90°(順序不可交換)
qx = np.array([np.cos(theta/2), np.sin(theta/2), 0, 0])
v = [0, 0, 1]
print("先 z 後 x =", np.round(qrotate(qx, qrotate(qz, v)), 6))
print("先 x 後 z =", np.round(qrotate(qz, qrotate(qx, v)), 6))
輸出確認: \(i^2=j^2=k^2=ijk=-1\) 、 \(ij=-ji\) 、模長律成立、 \(q v q^{-1}\) 與旋轉矩陣一致,且「先 \(z\) 後 \(x\) 」與「先 \(x\) 後 \(z\) 」結果不同——非交換性忠實反映旋轉順序。
結案 -- 後果與影響#
- Hamilton 餘生(1843–1865)致力於四元數理論,1866 年出版《Elements of Quaternions》。
- 1880 年代 Gibbs、Heaviside 從四元數中抽取向量部分,建立向量代數(點積、叉積):叉積 \(\mathbf{u}\times\mathbf{v}\) 正是四元數乘積的虛部。四元數是向量分析的生父。
- 四元數是第一個非交換可除代數,直接啟發抽象代數:1878 年 Frobenius 定理分類實結合可除代數、Cayley–Dickson 構造生出八元數( \(\mathbb{O}\) ,連結合律都放棄)。
- 現代應用:電腦圖學(遊戲引擎、動畫)、太空船姿態控制(SpaceX、衛星)、機器人學、量子計算(單量子位元旋轉與 \(\mathbb{H}\) 的結構同構於 \(SU(2)\) 的局部結構)——都柏林橋上的刻痕至今仍在每一台手機的陀螺儀裡運轉。
關鍵人物與文獻#
| 人物 | 角色 |
|---|---|
| William Rowan Hamilton | 四元數的發明者,橋上刻痕 |
| Carl Friedrich Gauss | 私人手稿中的先行者(未發表) |
| Josiah Willard Gibbs / Oliver Heaviside | 從四元數抽出向量代數 |
| Ferdinand Georg Frobenius | 1878 分類實可除代數 |
- W. R. Hamilton, On Quaternions; or on a new System of Imaginaries in Algebra, Phil. Mag. (1844–1850 系列信件論文)。
- W. R. Hamilton, Elements of Quaternions, London: Longmans, Green, & Co. (1866, 身後由其子編輯出版)。