行列式主要用于判斷矩陣是否可逆及計算特征方程
初見行列式
行列式起源于線性方程組求解
{ a 11 x 1 + a 12 x 2 = b 1 a 21 x 1 + a 22 x 2 = b 2 \begin{cases} a_{11}x_1 + a_{12}x_2 = b_1 \\ a_{21}x_1 + a_{22}x_2 = b_2 \end{cases} {a11?x1?+a12?x2?=b1?a21?x1?+a22?x2?=b2??
通過消元法得到, { ( a 11 a 22 ? a 12 a 21 ) x 1 = b 1 a 22 ? b 2 a 12 ( a 11 a 22 ? a 12 a 21 ) x 2 = b 2 a 11 ? b 1 a 21 \begin{cases} (a_{11}a_{22} - a_{12}a_{21})x_1 = b_1a_{22} - b_2a_{12} \\ (a_{11}a_{22} - a_{12}a_{21})x_2 = b_2a_{11} - b_1a_{21} \end{cases} {(a11?a22??a12?a21?)x1?=b1?a22??b2?a12?(a11?a22??a12?a21?)x2?=b2?a11??b1?a21??
當 a 11 a 22 ? a 12 a 21 ≠ 0 a_{11}a_{22} - a_{12}a_{21} \ne 0 a11?a22??a12?a21?=0時, 方程有唯一解
x 1 = b 1 a 22 ? b 2 a 12 a 11 a 22 ? a 12 a 21 , x 2 = b 2 a 11 ? b 1 a 21 a 11 a 22 ? a 12 a 21 x_1 = \frac{b_1a_{22} - b_2a_{12}}{a_{11}a_{22} - a_{12}a_{21}}, x_2 = \frac{b_2a_{11} - b_1a_{21}}{a_{11}a_{22} - a_{12}a_{21}} x1?=a11?a22??a12?a21?b1?a22??b2?a12??,x2?=a11?a22??a12?a21?b2?a11??b1?a21??
在方程組解的表達式中, 分母是方程組的4個系數確定, 提取4個系數并按他們在方程組中的位置, 排列為二行二列的數表(橫排稱為行, 豎排稱為列)
a 11 a 12 a 21 a 22 \begin{matrix}a_{11} & a_{12} \\ a_{21} & a_{22}\end{matrix} a11?a21??a12?a22??, 其中 a 11 a 22 ? a 12 a 21 a_{11}a_{22}-a_{12}a_{21} a11?a22??a12?a21?表示為 [ a 11 a 12 a 21 a 22 ] \left[\begin{matrix}a_{11} & a_{12} \\ a_{21} & a_{22}\end{matrix}\right] [a11?a21??a12?a22??], 稱為二階行列式
利用二階行列式, 方程組的解可以表示為 x 1 = D 1 D x_1 = \frac{D_1}{D} x1?=DD1??, x 2 = D 2 D x_2=\frac{D_2}{D} x2?=DD2??, 其中 D = [ a 11 a 12 a 21 a 22 ] D = \left[\begin{matrix}a_{11} & a_{12} \\ a_{21} & a_{22}\end{matrix}\right] D=[a11?a21??a12?a22??]稱為系數行列式 D 1 = [ b 1 a 12 b 2 a 22 ] D_1 = \left[\begin{matrix}b_1 & a_{12} \\ b_2 & a_{22} \end{matrix}\right] D1?=[b1?b2??a12?a22??], D 2 = [ a 11 b 1 a 21 b 2 ] D_2 = \left[\begin{matrix}a_{11} & b_1 \\ a_{21} & b_2 \end{matrix}\right] D2?=[a11?a21??b1?b2??]
行列式定義
從二階行列式推導到 n n n階行列式的定義
[ a 11 a 12 ? a 1 n a 21 a 22 ? a 2 n ? ? ? a n 1 a n 2 ? a n n ] = ∑ j 1 j 2 . . . j n ( ? 1 ) l a 1 j 1 a 2 j 2 ? a n j n \left[\begin{matrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} \end{matrix}\right] = \sum_{j_1j_2...j_n}(-1)^la_{1j_1}a_{2j_2}\cdots a_{nj_n} ?a11?a21??an1??a12?a22??an2??????a1n?a2n??ann?? ?=j1?j2?...jn?∑?(?1)la1j1??a2j2???anjn??
其中 a i j a_{ij} aij?, i = 1 , 2 ? , n i=1,2\cdots, n i=1,2?,n, j = 1 , 2 , ? , n j=1,2,\cdots, n j=1,2,?,n, 稱為行列式的元素, 其中 i i i稱為行標, 表示該元素位于哪一行, j j j稱為列下表, 表示該元素位于哪一列
j 1 j 2 ? j n j_1j_2\cdots j_n j1?j2??jn?代表 ∑ j 1 j 2 . . . j n \sum_{j_1j_2...j_n} ∑j1?j2?...jn??對 j 1 j 2 ? j n j_1j_2\cdots j_n j1?j2??jn?取一遍 1 , 2 , ? n 1,2,\cdots n 1,2,?n的一切排列求和, 共有 n ! n! n!項
如, 123的排列為 123 , 132 , 213 , 232 , 312 , 321 123, 132, 213, 232, 312, 321 123,132,213,232,312,321排列 321 321 321的逆序數為 3 3 3, 3 ! = 6 3!=6 3!=6項
常見行列式計算
一階行列式
[ a 1 ] = a 1 \left[\begin{matrix} a_1 \end{matrix}\right] = a_1 [a1??]=a1?
二階行列式
[ a 11 a 12 a 21 a 22 ] = a 11 a 22 ? a 12 a 21 \left[\begin{matrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{matrix}\right] = a_{11}a_{22} - a_{12}a_{21} [a11?a21??a12?a22??]=a11?a22??a12?a21?
三階行列式
[ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] = a 11 a 22 a 33 + a 12 a 23 a 31 + a 13 a 21 a 32 ? a 13 a 22 a 31 ? a 12 a 21 a 33 ? a 11 a 23 a 32 \left[\begin{matrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{matrix}\right] = a_{11}a_{22}a_{33} + a_{12}a_{23}a_{31} + a_{13}a_{21}a_{32} - a_{13}a_{22}a_{31} - a_{12}a_{21}a_{33} - a_{11}a_{23}a_{32} ?a11?a21?a31??a12?a22?a32??a13?a23?a33?? ?=a11?a22?a33?+a12?a23?a31?+a13?a21?a32??a13?a22?a31??a12?a21?a33??a11?a23?a32?
計算公式
主對角線 - 副對角線
求行列式的值
A = [ 1 ? 2 3 ? 1 2 1 ? 3 ? 4 ? 2 ] A = \left[\begin{matrix} 1 & -2 & 3 \\ -1 & 2 & 1 \\ -3 & -4 & -2 \end{matrix}\right] A= ?1?1?3??22?4?31?2? ?
根據定義解得:
A = 1 × 2 × ( ? 2 ) + ( ? 2 ) × 1 × ( ? 3 ) + 3 × ( ? 4 ) × ( ? 1 ) ? 3 × 2 × ( ? 3 ) ? ( ? 2 ) × ( ? 1 ) × ( ? 2 ) ? 1 × ( ? 4 ) × 1 = 40 A=1 \times 2 \times (-2) + (-2) \times 1 \times (-3) + 3 \times (-4) \times (-1) - 3 \times 2 \times (-3) - (-2) \times (-1) \times (-2) - 1 \times (-4) \times 1 = 40 A=1×2×(?2)+(?2)×1×(?3)+3×(?4)×(?1)?3×2×(?3)?(?2)×(?1)×(?2)?1×(?4)×1=40
方陣 A A A的行列式可以判斷 A A A是否可逆, 不為0可逆, 為0不可逆
行列式和矩陣的區別
行列式
- 行數等于列數
- 共有 n 2 n^2 n2個元素
- 本質是一個數值(一種矩陣的計算方式)
矩陣
- 行數可以不等于列數
- 有 m × n m \times n m×n和元素
- 本質是一個數表
行列式計算
Numpy
中通過np.linalg.det()
函數計算
import numpy as npA = np.array([[1, 2], [3, 4]])
print("A 的行列式為 np.linalg.det(A): ", np.linalg.det(A))
print("A 矩陣是否可逆: ", np.linalg.det(A) != 0)
B = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("B 的行列式為 np.linalg.det(B): ", np.linalg.det(B))
print("B 矩陣是否可逆: ", np.linalg.det(B) != 0)
矩陣的秩
矩陣的秩代表計算線性方程組解的數目, 去掉無關項(線性相關)然后其余的數量就是矩陣的秩, 矩陣的秩可以從行和列兩個方向觀察, 首先要了解線性相關和線性無關
向量組
α 1 = [ a 11 a 21 ? a m 1 ] , α 2 = [ a 12 a 22 ? a m 2 ] , α n = [ a 1 n a 2 n ? a m n ] \alpha_1 = \left[\begin{matrix} a_{11} \\ a_{21} \\ \vdots \\ a_{m1} \end{matrix}\right], \alpha_2 = \left[\begin{matrix} a_{12} \\ a_{22} \\ \vdots \\ a_{m2} \end{matrix}\right], \alpha_n = \left[\begin{matrix} a_{1n} \\ a_{2n} \\ \vdots \\ a_{mn} \end{matrix}\right] α1?= ?a11?a21??am1?? ?,α2?= ?a12?a22??am2?? ?,αn?= ?a1n?a2n??amn?? ?, 每個 α i \alpha_i αi?稱為 m m m維列向量
β 1 = [ a 11 a 21 ? a m 1 ] , β 2 = [ a 12 a 22 ? a m 2 ] , β n = [ a 1 n a 2 n ? a m n ] \beta_1 = \left[\begin{matrix} a_{11} & a_{21} & \cdots & a_{m1} \end{matrix}\right], \beta_2 = \left[\begin{matrix} a_{12} & a_{22} & \cdots && a_{m2} \end{matrix}\right], \beta_n = \left[\begin{matrix} a_{1n} & a_{2n} & \cdots & a_{mn} \end{matrix}\right] β1?=[a11??a21????am1??],β2?=[a12??a22?????am2??],βn?=[a1n??a2n????amn??], 每個 a i a_i ai?稱為 m m m維行向量
import numpy as npA = np.array([[1, 2, 3], [4, 5, 6]])# reshape 重新繪制向量, 否則為1維數組
print("第0行: \n", A[0, :].reshape(1, -1))
print("第1列: \n", A[:, 1].reshape(-1, 1))"""output:
第0行: [[1 2 3]]
第1列: [[2][5]]"""
向量組的線性相關和線性無關
線性相關 vs 線性無關
本質問題:這些向量里有沒有「多余的」?
線性相關(有冗余)
-
例子:
向量A = [1,2],向量B = [2,4]
→ B = 2×A,B完全可以用A復制粘貼得到
→ 像拼樂高時,你已經有紅磚了,又拿了個兩倍大的紅磚,沒帶來新形狀 -
數學定義:
存在不全為0的系數(比如k?=2, k?=-1),使得 k?A + k?B = 0
→ 向量之間能互相「組合」出來,存在冗余
線性無關(都必要)
-
例子:
向量X = [1,0](橫向箭頭),向量Y = [0,1](縱向箭頭)
→ 無法用X造出Y,也無法用Y造出X
→ 像樂高紅磚和藍磚,拼平面必須同時需要兩者 -
數學意義:
沒有任何一個向量能被其他向量組合出來
→ 每個向量都貢獻了獨特的「方向」
矩陣的秩(本質:獨立信息數)
本質問題:這個矩陣里有多少個真正「有用」的向量?
直觀理解
- 矩陣就像行李箱打包:
每一列是一個物品(向量),秩 = 真正有用的物品數量- 如果塞了5件衣服但都是同樣的T恤 → 秩=1(其實帶一件就夠了)
- 如果帶了T恤、外套、褲子、襪子 → 秩=4(每樣都不同)
具體例子
-
秩=1的矩陣:
[1 2 3] [2 4 6]
→ 所有列都是[1,2]的倍數,第三列=第一列×3
→ 像只帶了一個U盤但復制了3份文件,實際信息量=1 -
秩=2的矩陣:
[1 0 1] [0 1 1]
→ 前兩列是X/Y方向箭頭,第三列=前兩列相加
→ 雖然3列,但最多能表示二維平面里的所有點
幾何意義
- 秩=能撐開的空間維度
- 秩1 → 所有向量擠在一條直線上
- 秩2 → 向量鋪滿一個平面
- 秩3(三維矩陣)→ 充滿立體空間
為什么重要?
-
解方程:
Ax=0的解的數量 = 未知數個數 - 秩
→ 秩越小,自由度越大(比如行李箱空位多) -
數據壓縮:
圖片/視頻矩陣如果秩低,說明有大量重復 → 可壓縮 -
機器學習:
特征向量如果線性相關,說明有冗余特征需要剔除
矩陣秩的計算
題目1:
求矩陣 A = [ 1 2 3 2 4 6 3 6 9 ] A = \begin{bmatrix} 1 & 2 & 3 \\ 2 & 4 & 6 \\ 3 & 6 & 9 \end{bmatrix} A= ?123?246?369? ? 的秩。
步驟解析:
-
觀察原始矩陣:
每一行的數字都很像成比例的:- 第2行 = 第1行 × 2
- 第3行 = 第1行 × 3
→ 明顯冗余(像行李箱里塞了3個同樣的T恤)。
-
用行變換化簡:
目標是把矩陣變成「階梯形」,只保留獨立信息。- 第1步:保留第1行不變。
[ 1 2 3 2 4 6 3 6 9 ] \begin{bmatrix} 1 & 2 & 3 \\ 2 & 4 & 6 \\ 3 & 6 & 9 \end{bmatrix} ?123?246?369? ? - 第2步:用第1行消去第2行和第3行的第一個元素:
- 第2行 → 第2行 - 2×第1行:
[ 2 , 4 , 6 ] ? 2 × [ 1 , 2 , 3 ] = [ 0 , 0 , 0 ] [2, 4, 6] - 2×[1, 2, 3] = [0, 0, 0] [2,4,6]?2×[1,2,3]=[0,0,0] - 第3行 → 第3行 - 3×第1行:
[ 3 , 6 , 9 ] ? 3 × [ 1 , 2 , 3 ] = [ 0 , 0 , 0 ] [3, 6, 9] - 3×[1, 2, 3] = [0, 0, 0] [3,6,9]?3×[1,2,3]=[0,0,0]
結果變為:
[ 1 2 3 0 0 0 0 0 0 ] \begin{bmatrix} 1 & 2 & 3 \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{bmatrix} ?100?200?300? ?
- 第2行 → 第2行 - 2×第1行:
- 第1步:保留第1行不變。
-
統計非零行數:
只有第1行是非零行 → 秩 = 1。
比喻解釋:
- 矩陣像一個行李箱,里面裝了3件物品(3行),但全是同一款T恤(成比例)。
- 實際有用的物品只有1件 → 秩 = 1。
題目2:
求矩陣 B = [ 1 0 2 0 1 3 ] B = \begin{bmatrix} 1 & 0 & 2 \\ 0 & 1 & 3 \end{bmatrix} B=[10?01?23?] 的秩。
步驟解析:
-
觀察原始矩陣:
- 第1行和第2行沒有比例關系(像一件T恤和一條褲子)。
- 已經是階梯形(每行的首項數字在右側)。
-
直接統計非零行數:
有2行非零行 → 秩 = 2。
幾何意義:
- 兩個向量 [ 1 , 0 ] [1, 0] [1,0] 和 [ 0 , 1 ] [0, 1] [0,1] 是正交的,可以撐開一個二維平面。
- 第三列 [ 2 , 3 ] [2, 3] [2,3] 被前兩列組合出來( 2 × [ 1 , 0 ] + 3 × [ 0 , 1 ] = [ 2 , 3 ] 2×[1,0] + 3×[0,1] = [2,3] 2×[1,0]+3×[0,1]=[2,3]),屬于冗余信息。
總結方法:
-
核心思想:
- 秩 = 矩陣中線性無關的行(或列)的最大數量。
- 用初等行變換將矩陣簡化為階梯形,數非零行數即可。
-
技巧:
- 看是否有某行/列是其他行/列的倍數或組合。
- 零行或零列對秩無貢獻(像行李箱里的空袋子)。
-
常見陷阱:
- 誤以為矩陣的秩等于行數或列數(需看獨立信息)。
- 行變換時計算錯誤(建議分步寫中間結果)。
代碼計算
import numpy as npE = np.eye(5)
print(E)
print("單位矩陣E的秩: \n", np.linalg.matrix_rank(E))
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 根據列算 + 1
print("A的秩: \n", np.linalg.matrix_rank(A))"""output:
[[1. 0. 0. 0. 0.][0. 1. 0. 0. 0.][0. 0. 1. 0. 0.][0. 0. 0. 1. 0.][0. 0. 0. 0. 1.]]
單位矩陣E的秩: 5
A的秩: 2"""