1693 — Leibniz 行列式#
案件摘要#
1693 年 4 月 28 日,Gottfried Wilhelm Leibniz 在寫給法國數學家 l'Hôpital 的信中,首次寫下了形如 \(a_1b_2 - a_2b_1\) 的數字排列計算——也就是今日所謂的二階行列式,並用一種「指數對」的巧妙記號推廣到 \(n\) 個未知數的聯立方程組。這是行列式觀念在西方的第一次現身,比 Cramer 的一般法則早了半個多世紀。本案追查:這位微積分的共同發明人,為何會在解方程組時創造出這個後來席捲線性代數的物件?
前因 -- 為什麼會有這個案子#
- 解聯立方程的困境:十七世紀的代數學家處理兩個、三個未知數的方程組時,靠的是逐一消元。消元本身不難,難的是:能不能直接從係數「讀出」方程組何時有解?解是什麼?
- Seki Takakazu 的平行案件:幾乎同一時期(1683 年左右),日本數學家關孝和在《解伏題之法》中也獨立發展出行列式的概念,用來處理消元後的方程組——東西方在同一十年、互不知情的情況下撞出了同一個觀念。
- 九章算術的遠古線索:消去法早在中國漢代已經成熟;Leibniz 要解決的不是「如何消元」,而是「消元之後,解的公式長什麼樣」——他要的是一個封閉的顯式公式。
- 與 l'Hôpital 的通信:Leibniz 與這位法國年輕貴族通信多年,講授微積分。1693 年的這封信,是他向對方報告一個「新發明」——結果這個發明被歷史遺忘了近一百五十年,直到 1850 年前後 Leibniz 的手稿被整理出版,世人才知道他早就到過案發現場。
線索與推理 -- 數學式、程式、理論#
線索一:二階行列式的誕生#
考慮二元一次方程組:
消去 \(y\) :第一式乘 \(b_2\) 、第二式乘 \(b_1\) 、相減,得
Leibniz 注意到:分子分母都是「交叉相乘再相減」的固定花樣。他給這個花樣起了名字——resultant(結式):當 \(a_1b_2 - a_2b_1 = 0\) 時方程組退化(無解或無限多解),係數的這個組合「決定了方程組的命運」。
線索二:指數對記號——行列式記號的雛形#
為了推廣到 \(n\) 個未知數,Leibniz 發明了一個極具前瞻性的記號:他把係數寫成 \(10\) 、 \(21\) 、 \(32\) 這樣的「指數對」,第一個數字標記方程的編號(直行的位置),第二個數字標記未知數的編號(橫列的位置)。這正是**雙下標矩陣記號 \(a_{ij}\) ** 的前身——比正式的矩陣記號早了兩百年。用這套記號,他寫下三元情形:
六項,正好是 \(3! = 6\) 個排列;正負號由排列的奇偶性決定。Leibniz 已經掌握了行列式的一般定義:所有「每行每列各取一個」的乘積項之帶符號總和。
線索三:為什麼是這個花樣?——從消元的視角看#
\(n\) 階行列式可以看成消元公式的封裝。用現代記號,對 \(2\times2\) 矩陣 \(A = \begin{pmatrix}a & b\\ c & d\end{pmatrix}\) :
它的幾何意義(Leibniz 未察覺、後由 Gauss 時代補足)是列向量張成的平行四邊形面積; \(\det A = 0\) 表示兩列共線、向量「塌陷」,方程組退化。行列式是「可解性」的偵測器: - \(\det A \neq 0\) :唯一解; - \(\det A = 0\) :無解或無限多解。
此外,Leibniz 在同期手稿中還嘗試把這套方法應用到多項式的公共根(兩個多項式何時有共同解)——resultant 一詞在今日代數學中正是「結式」: \(\mathrm{Res}(f, g) = 0\) 若且唯若 \(f\) 、 \(g\) 有公共根。從二元方程組的係數偵測,到多項式公共根的偵測,Leibniz 看到的是同一個結構:「退化」總會在某個由係數組成的多項式歸零時現形。這個思想在十九世紀由 Sylvester、Bézout 的結式理論正式完成,成為計算機代數系統中消去理論的核心。
線索四:與 Cramer 法則的前夜#
Leibniz 的信中已經隱含了「用兩個 resultants 之比表出未知數」的想法——正是五十七年後 Cramer 法則 \(x_i = \det(A_i)/\det(A)\) 的雛形。但他只處理了小規模情形,也沒有系統性地展開 \(n\) 個未知數的一般公式。歷史把「掛名」留給了 Cramer——這是科學史上著名的「發明者被遺忘」案件之一。
程式碼範例:Leibniz 2x2 行列式與 resultant 驗證#
import numpy as np
def leibniz_det2(A):
(a, b), (c, d) = A
return a * d - b * c # 交叉相乘相減
def leibniz_det3(A):
# 按 Leibniz 的一般定義:3! = 6 個帶符號項
from itertools import permutations
s = 0
for p in permutations(range(3)):
term, sign = 1, 1
for row, col in enumerate(p):
term *= A[row][col]
sign = (-1) ** sum(1 for i in range(3) for j in range(i+1, 3) if p[i] > p[j])
s += sign * term
return s
A = np.array([[3., 1.], [2., 3.]])
print("Leibniz det2 =", leibniz_det2(A)) # 7
print("numpy 驗證 =", np.linalg.det(A)) # 7.0
B = [[2, -1, 1], [1, 3, -2], [3, 1, 0]]
print("Leibniz det3 =", leibniz_det3(B)) # 逐項 6 項展開
print("numpy 驗證 =", np.linalg.det(np.array(B, float)))
# resultant = 0 的退化偵測:兩列共線
D = np.array([[1., 2.], [2., 4.]])
print("退化方程組 resultant =", leibniz_det2(D)) # 0 → 無唯一解
leibniz_det3 逐項驗證了六項帶符號展開與 numpy.linalg.det 完全一致;退化矩陣 \(D\) 的 resultant 為零,正對應「兩列共線、方程組退化」的偵測結果。
結案 -- 後果與影響#
- 1693 年的信是行列式理論在西方的開端:Leibniz 首次把「係數的帶符號組合」當成一個有名字、有用途的數學物件(resultant)。
- 他的雙下標「指數對」記號預示了兩百年後的矩陣記號 \(a_{ij}\) 。
- 遺憾的是這封信長期未發表,影響力遲到:Cramer(1750)、Vandermonde(1772)、Laplace 等人是獨立重新發展的;直到 1850 年前後 Leibniz 手稿出版,偵探界才補記了這筆功勞。
- 行列式從此走上獨立發展之路:Cramer 法則、Laplace 展開、Cayley 的矩陣理論,乃至特徵值 \(\det(A - \lambda I) = 0\) ,全都源自這個 1693 年寫下的交叉相減花樣。
- 東亞平行案件:關孝和 1683 年《解伏題之法》獨立發現行列式,是數學史上「多重獨立發現」的經典案例。
關鍵人物與文獻#
| 人物 | 角色 |
|---|---|
| Gottfried Wilhelm Leibniz | 首次寫下行列式,發明指數對記號 |
| Guillaume de l'Hôpital | 收信人,微積分的早期傳播者 |
| Seki Takakazu(關孝和) | 1683 年獨立發現行列式(平行案件) |
| Étienne Bézout / Alexandre-Théophile Vandermonde | 後續重新發展行列式理論 |
- G. W. Leibniz, 致 l'Hôpital 的信(1693 年 4 月 28 日),收入 Leibnizens mathematische Schriften(1850 年代出版)。
- 關孝和《解伏題之法》(1683)。
- T. Muir, The Theory of Determinants in the Historical Order of Development(1906):行列式史的標準考據。