跳轉到

5.1 矩陣論的起源:凱萊(1858)與線性方程組#

學習目標#

  • 了解矩陣記號為何在 19 世紀中葉「被迫」誕生:線性方程組、線性變換的複合。
  • 掌握矩陣加法、純量乘法、矩陣乘法的定義,以及乘法為何必須如此定義(對應線性映射的複合)。
  • 認識凱萊 1858 年論文《A Memoir on the Theory of Matrices》的核心內容:矩陣代數、單位矩陣、逆矩陣、以及矩陣滿足其特徵方程的初步觀察。
  • 能用 SymPy 進行矩陣的加法、乘法、求逆與行列式計算。

歷史背景#

5.1.1 在矩陣之前:行列式與線性方程組#

矩陣的想法並非憑空出現。它的前身是行列式:

  • 1683 年,日本的關孝和在解聯立方程組時已使用了類似行列式的計算。
  • 1750 年,瑞士數學家 Cramer(克萊姆)發表了著名的 Cramer 法則,用行列式的比值表示線性方程組的解。
  • 19 世紀初,Cauchy(柯西,1812)系統地發展了行列式理論,並首創了「determinant」的現代記號。當時的數學家寫一個線性方程組時,把係數排成一個方陣,但這個方陣只被當成計算行列式時的中介物,還不是獨立的數學物件。

換句話說,在 1850 年之前,「矩陣」只是行列式的「附屬品」:人們關心的是一個數(行列式),而不是那個方陣本身。

5.1.2 凱萊與 1858 年的《矩陣論備忘錄》#

Arthur Cayley(凱萊,1821–1895)是英國律師出身的數學家,他在擔任律師期間寫下了近三百篇數學論文。1849 年前後,他與 Sylvester(西爾維斯特)合作研究不變量理論(invariant theory),這是當時最熱門的課題:研究多項式在座標變換下不變的量。

推動凱萊發明矩陣的直接動力有兩個:

  1. 線性變換的複合:在幾何中,兩次線性變換接連施行(例如先旋轉再伸縮),其結果也是一次線性變換。凱萊意識到,把線性變換的係數方陣本身當作一個「量」來運算,複合就對應一種新的乘法。
  2. 解線性方程組:n 元線性方程組可寫成 \(A \mathbf{x} = \mathbf{b}\) 。若「方陣 \(A\) 有乘法逆」,解就形式上變成 \(\mathbf{x} = A^{-1}\mathbf{b}\) ——這催生了逆矩陣的概念。

1858 年,凱萊發表《A Memoir on the Theory of Matrices》,首次把矩陣當作獨立的代數物件,定義了:

  • 矩陣加法與純量乘法;
  • 矩陣乘法(含「不可交換」這個重要觀察);
  • 單位矩陣 \(I\) 與零矩陣;
  • 逆矩陣 \(A^{-1}\) ,並證明(對 \(2 \times 2\) 矩陣,且他宣稱對一般矩陣成立) \(A \cdot \operatorname{adj}(A) = \det(A) \cdot I\) ;
  • 以及一個驚人的觀察:矩陣似乎滿足它自己的特徵方程——這就是後來的 Cayley–Hamilton 定理(詳見 5.2 節)。

5.1.3 技術與理論互相驅動#

時間 事件 驅動關係
1750 Cramer 法則 解線性方程組的技術需求催生行列式
1812 Cauchy 行列式理論 不變量與幾何計算的理論化
1858 Cayley 矩陣論 幾何變換複合 + 解方程組 → 矩陣成為獨立物件
1870 Jordan 標準形 分類線性變換的理論需求(見 5.3 節)
1878 Frobenius 矩陣理論 群表示論的前身(見 5.4 節)

凱萊的抽象化當時並未立刻流行——他的記號太前衛,且矩陣的幾何與物理應用要到 1880 年代(Frobenius、Poincaré、Lorentz 變換)才爆發。這再次說明:好的代數結構往往先於應用被發明。

數學理論#

5.1.4 矩陣的定義#

定義 5.1.1(矩陣)。設 \(F\) 是一個體(數體即可,如 \(\mathbb{Q}, \mathbb{R}, \mathbb{C}\) )。一個 \(m \times n\) 矩陣是 \(F\) 中元素排成的 \(m\) 列 \(n\) 行矩形陣列:

\[ A = \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & & & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{pmatrix}, \]

全體 \(m \times n\) 矩陣記作 \(M_{m \times n}(F)\) 。當 \(m = n\) 時稱為方陣, \(M_{n}(F) = M_{n \times n}(F)\) 。

5.1.5 矩陣運算#

定義 5.1.2(加法與純量乘法)。對同尺寸矩陣 \(A = (a_{ij})\) 、 \(B = (b_{ij})\) 與純量 \(c\) : - \(A + B = (a_{ij} + b_{ij})\) ; - \(cA = (c\, a_{ij})\) 。

在這些運算下, \(M_{m\times n}(F)\) 是一個交換群(加法)加上純量乘法,即 5.5 節將定義的「體上的向量空間」。

定義 5.1.3(矩陣乘法)。設 \(A \in M_{m \times k}(F)\) 、 \(B \in M_{k \times n}(F)\) ,定義 \(AB \in M_{m \times n}(F)\) 為

\[ (AB)_{ij} = \sum_{t=1}^{k} a_{it} b_{tj}. \]

為什麼乘法必須這樣定義? 設 \(T: F^k \to F^m\) 與 \(S: F^n \to F^k\) 為線性映射,其矩陣分別為 \(A\) 、 \(B\) (對標準基底)。複合 \(T \circ S: F^n \to F^m\) 是線性的,且

\[ (T \circ S)(\mathbf{e}_j) = T\!\left(\sum_t b_{tj}\mathbf{e}_t\right) = \sum_t b_{tj}\, T(\mathbf{e}_t) = \sum_{i,t} b_{tj} a_{it}\, \mathbf{e}_i, \]

因此複合的矩陣的第 \((i,j)\) 元正是 \(\sum_t a_{it}b_{tj}\) 。矩陣乘法是線性映射複合的代數影子——這是矩陣理論成功的根本原因。

定理 5.1.4(矩陣環的性質)。矩陣乘法滿足: 1. 結合律: \((AB)C = A(BC)\) (由映射複合的結合律直接得到); 2. 分配律: \(A(B+C) = AB + AC\) , \((A+B)C = AC + BC\) ; 3. 單位元素: \(AI_n = I_n A = A\) ,其中 \(I_n\) 是單位矩陣; 4. 一般不可交換: \(AB \neq BA\) 通常成立。

性質 1–3 說明 \(M_n(F)\) 是一個有單位元的環(但非交換環)——這是 3.1 節環論的標準例子。事實上, \(M_2(\mathbb{R})\) 是最簡單的非交換環之一。

定理 5.1.5(行列式與乘法)。對 \(A, B \in M_n(F)\) :

\[ \det(AB) = \det(A)\det(B). \]

證明思路。固定 \(B\) ,考慮 \(A \mapsto \det(AB)\) 。它是 \(A\) 的 \(n\) 個列的多重線性交錯函數(因為 \(AB\) 的第 \(i\) 列是 \(A\) 的列以 \(B\) 的行組合),由行列式的刻劃唯一性, \(\det(AB) = c(B)\det(A)\) ,其中 \(c(B) = \det(I_n B) = \det(B)\) 。 \(\blacksquare\)

5.1.6 逆矩陣#

定義 5.1.6。 \(A \in M_n(F)\) 稱為可逆,若存在 \(B\) 使 \(AB = BA = I_n\) 。此時 \(B\) 唯一,記作 \(A^{-1}\) 。

定理 5.1.7。 \(A \in M_n(F)\) 可逆 \(\iff \det(A) \neq 0\) 。且

\[ A^{-1} = \frac{1}{\det(A)} \operatorname{adj}(A), \]

其中 \(\operatorname{adj}(A)\) (伴隨矩陣)的 \((i,j)\) 元是 \(A\) 的 \((j,i)\) 代數餘子式 \(C_{ji}\) 。

證明思路。直接驗證 \(A \cdot \operatorname{adj}(A) = \det(A) I_n\) :第 \((i,i)\) 元是 \(\sum_k a_{ik} C_{ik} = \det(A)\) (按第 \(i\) 列展開);第 \((i,j)\) 元( \(i \neq j\) )是 \(\sum_k a_{ik} C_{jk}\) ,這是「把第 \(j\) 列換成第 \(i\) 列」的矩陣的行列式,因兩列相同故為 \(0\) 。若 \(\det(A) \neq 0\) ,上式給出 \(A^{-1}\) ;反之若 \(A\) 可逆,則 \(\det(A)\det(A^{-1}) = \det(I) = 1\) ,故 \(\det(A) \neq 0\) 。 \(\blacksquare\)

這正是凱萊 1858 年證明的 \(2\times2\) 情形。注意:可逆性是純代數條件—— \(A\) 可逆當且僅當它對應的線性映射是同構,也當且僅當 \(A\mathbf{x}=\mathbf{0}\) 只有零解(三者等價性的完整列表將在 5.2 節給出)。

5.1.7 線性方程組的矩陣觀點#

\(n\) 元線性方程組

\[ \begin{cases} a_{11}x_1 + a_{12}x_2 + \cdots + a_{1n}x_n = b_1 \\ \vdots \\ a_{m1}x_1 + a_{m2}x_2 + \cdots + a_{mn}x_n = b_m \end{cases} \]

可簡寫為 \(A\mathbf{x} = \mathbf{b}\) 。三種情況:

  1. \(\operatorname{rank}(A) = \operatorname{rank}(A \,|\, \mathbf{b}) = n\) :唯一解( \(A\) 可逆時即 \(\mathbf{x} = A^{-1}\mathbf{b}\) );
  2. \(\operatorname{rank}(A) = \operatorname{rank}(A \,|\, \mathbf{b}) < n\) :無窮多解(解集合是 \(\mathbf{x}_0 + \ker A\) );
  3. \(\operatorname{rank}(A) < \operatorname{rank}(A \,|\, \mathbf{b})\) :無解。

這就是 Rouché–Capelli 定理。其中的 \(\ker A = \{\mathbf{x} : A\mathbf{x} = \mathbf{0}\}\) 是核空間(null space),它是 \(\operatorname{im} A = \{A\mathbf{y}\}\) 這個像空間的對偶概念;這組「核—像」的語言是線性代數通向 8.2 節同調代數的第一步。

SymPy 實作#

範例 1:矩陣基本運算#

import sympy as sp

A = sp.Matrix([[1, 2], [3, 4]])
B = sp.Matrix([[0, 1], [1, 0]])

print("A + B =", A + B)
print("A * B =", A * B)
print("B * A =", B * A)
print("AB == BA ?", A * B == B * A)          # False:矩陣乘法不可交換
print("det(A) =", A.det())                    # -2
print("A^{-1} =", A.inv())

輸出:

A + B = Matrix([[1, 3], [4, 4]])
A * B = Matrix([[2, 1], [4, 3]])
B * A = Matrix([[3, 4], [1, 2]])
AB == BA ? False
det(A) = -2
A^{-1} = Matrix([[-2, 1], [3/2, -1/2]])

驗證 \(AB \neq BA\) :凱萊在 1858 年明確指出這一點,並視之為矩陣代數與「一般數」代數的根本差異。

範例 2:用矩陣解線性方程組#

import sympy as sp

x, y, z = sp.symbols('x y z')
A = sp.Matrix([[2, 1, -1], [-3, -1, 2], [-2, 1, 2]])
b = sp.Matrix([8, -11, -3])

# 方法一:逆矩陣
print("解 =", (A.inv() * b).T)

# 方法二:linsolve
sol = sp.linsolve((A, b), (x, y, z))
print("linsolve:", sol)

# 方法三:rref(簡化列階梯形)
print(A.row_join(b).rref())

輸出:

解 = Matrix([[2, 3, -1]])
linsolve: {(2, 3, -1)}
(Matrix([
[1, 0, 0, 2],
[0, 1, 0, 3],
[0, 0, 1, -1]]), (0, 1, 2))

三種方法一致得到 \((x, y, z) = (2, 3, -1)\) 。rref 的第二個回傳值 (0, 1, 2) 表示主軸(pivot)所在的行。

範例 3:rank 判別解的個數(Rouché–Capelli)#

import sympy as sp

# 一個無窮多解的系統
A = sp.Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])   # det = 0
b = sp.Matrix([1, 2, 3])

print("rank(A) =", A.rank())                        # 2
print("rank(A|b) =", A.row_join(b).rank())          # 2
print("秩相等且 < 3 => 無窮多解")
print("核空間:", A.nullspace())                     # [(-1, 2, 1)^T]

輸出:

rank(A) = 2
rank(A|b) = 2
秩相等且 < 3 => 無窮多解
核空間: [Matrix([[-1], [2], [1]])]

解集合是 \(\mathbf{x}_0 + t(-1, 2, 1)^T\) ,其中 \(\mathbf{x}_0\) 是任一特解——一條直線。核空間的維度 \(3 - 2 = 1\) 正是「秩—零化度定理」 \(\operatorname{rank} A + \dim \ker A = n\) 的實例。

習題#

  1. 計算 \(A = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}\) 與 \(B = \begin{pmatrix} 0 & 1 \\ 1 & 1 \end{pmatrix}\) 的 \(AB\) 與 \(BA\) ,驗證兩者不同。
  2. 證明: \(AB = 0\) 不蘊含 \(A = 0\) 或 \(B = 0\) (提示:找兩個非零的 \(2\times2\) 矩陣)。這說明矩陣環不是整環(回顧 3.3 節)。
  3. 用 SymPy 的 A.adjugate() 驗證對 \(3\times3\) 矩陣 \(A\) , \(A \cdot \operatorname{adj}(A) = \det(A) I\) 。
  4. 設 \(A = \begin{pmatrix} 1 & 1 \\ 0 & 1 \end{pmatrix}\) ,計算 \(A^{10}\) (用 SymPy 與手算對照,並歸納出 \(A^n\) 的通式)。
  5. 證明:對 \(2\times2\) 矩陣 \(A = \begin{pmatrix} a & b \\ c & d\end{pmatrix}\) , \(\operatorname{adj}(A) = \begin{pmatrix} d & -b \\ -c & a \end{pmatrix}\) 。
  6. 用 linsolve 判斷方程組 \(x + y = 1,\ 2x + 2y = 3\) 無解,並解釋這與秩的關係。

SymPy 要點回顧#

語法 意義
sp.Matrix([[1,2],[3,4]]) 建立矩陣
A + B、A * B、k * A 加法、矩陣乘法、純量乘法
A.det() 行列式
A.inv() 逆矩陣(若可逆)
A.rref() 簡化列階梯形(回傳 (矩陣, 主軸行))
A.rank() 秩
A.nullspace() 核空間的基底(串列)
A.row_join(b) 水平拼接(構造增廣矩陣)
sp.linsolve((A, b), (x, y, ...)) 解線性方程組

下一節:矩陣與特徵值的相遇——Cayley–Hamilton 定理,見 5.2 節。