矩阵基础知识 - 游戏开发必学

矩阵定义

一个m×n的矩阵是一个由m行n列元素排列成的矩形阵列,矩阵里的元素可以是数字、符号或数学式。以下是一个由6个数构成的2行3列的矩阵:
( 1 9 12 − 19 9 0 ) \begin{pmatrix} 1 & 9 & 12 \\ -19 & 9 & 0 \end{pmatrix} (11999120)
对于m×n的矩阵,如果m=n,则这样的矩阵叫做方阵,对于一般的矩阵,可以表示为:
A = ( a 1 , 1 a 1 , 2 ⋯ a 1 , n a 2 , 1 a 2 , 2 ⋯ a 2 , n ⋮ ⋮ ⋱ ⋮ a m , 1 a m , 2 ⋯ a m , n ) (1) A = \begin{pmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \cdots & a_{m,n} \end{pmatrix} \tag{1} A= a1,1a2,1am,1a1,2a2,2am,2a1,na2,nam,n (1)
有时候为了指明所讨论的矩阵的级数,可以把m×n矩阵写成 A m n A_{mn} Amn 或者 ( a i , j ) m n (a_{i,j})_{mn} (ai,j)mn,数 a i , j , i = 1 , 2 , ⋯   , m ; j = 1 , 2 , ⋯   , n a_{i,j}, i=1, 2, \cdots, m; j=1,2, \cdots, n ai,j,i=1,2,,m;j=1,2,,n 称为矩阵 A A A 的元素, i i i 称为元素 a i , j a_{i,j} ai,j 的行指标, j j j 称为 a i , j a_{i,j} ai,j 的列指标。

矩阵的运算

矩阵的加减法

两个矩阵的加法是多元组加法的扩展,如果有两个矩阵 A = ( a i , j ) m n A = (a_{i,j})mn A=(ai,j)mn B = ( b i , j ) m n B = (b_{i,j})mn B=(bi,j)mn,这两个矩阵的加法可以表示为:
A + B = ( a i , j + b i , j ) m n = ( a 1 , 1 + b 1 , 1 a 1 , 2 + b 1 , 2 ⋯ a 1 , n + b 1 , n a 2 , 1 + b 2 , 1 a 2 , 2 + b 2 , 2 ⋯ a 2 , n + b 2 , n ⋮ ⋮ ⋱ ⋮ a m , 1 + b m , 1 a m , 2 + b m , 2 ⋯ a m , n + b m , n ) (2) A + B = (a_{i,j} + b_{i,j})mn = \begin{pmatrix} a_{1,1} + b_{1,1} & a_{1,2} + b_{1,2} & \cdots & a_{1,n} + b_{1,n} \\ a_{2,1} + b_{2,1} & a_{2,2} + b_{2,2} & \cdots & a_{2,n} + b_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} + b_{m,1} & a_{m,2} + b_{m,2} & \cdots & a_{m,n} + b_{m,n} \end{pmatrix} \tag{2} A+B=(ai,j+bi,j)mn= a1,1+b1,1a2,1+b2,1am,1+bm,1a1,2+b1,2a2,2+b2,2am,2+bm,2a1,n+b1,na2,n+b2,nam,n+bm,n (2)

矩阵的加法就是矩阵对应的元素相加,当然相加的矩阵必需要有相同的行数和列数。由于矩阵的加法归结为它们的元素的加法,也就是数的加法,所以矩阵加法有如下性质:

  • 结合律: A + ( B + C ) = ( A + B ) + C A + (B + C) = (A + B) + C A+(B+C)=(A+B)+C
  • 交换律: A + B = B + A A + B = B + A A+B=B+A

元素全为 0 的矩阵,称为零矩阵,记为 O m n Omn Omn,在不至于引起混淆的时候,可以简单的记为 O O O,显然对所有的矩阵 A A A 有, A + O = A A + O = A A+O=A

( − a 1 , 1 − a 1 , 2 ⋯ − a 1 , n − a 2 , 1 − a 2 , 2 ⋯ − a 2 , n ⋮ ⋮ ⋱ ⋮ − a m , 1 − a m , 2 ⋯ − a m , n ) (3) \begin{pmatrix} -a_{1,1} & -a_{1,2} & \cdots & -a_{1,n} \\ -a_{2,1} & -a_{2,2} & \cdots & -a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ -a_{m,1} & -a_{m,2} & \cdots & -a_{m,n} \end{pmatrix} \tag{3} a1,1a2,1am,1a1,2a2,2am,2a1,na2,nam,n (3)
以上矩阵称为矩阵 A A A 的负矩阵,记作 − A -A A,显然 A + ( − A ) = O A + (-A) = O A+(A)=O,矩阵的减法定义为: A − B = A + ( − B ) A - B = A + (-B) AB=A+(B)

矩阵的乘法

设矩阵 A = ( a i , j ) s n A = (a_{i,j})_{sn} A=(ai,j)sn,矩阵 B = ( b i , j ) n , m B = (b_{i,j})_{n,m} B=(bi,j)n,m,那么矩阵 C = ( c i , j ) s m C = (c_{i,j})_{sm} C=(ci,j)sm,其中
c i , j = a i , 1 b 1 , j + a i , 2 b 2 , j + ⋯ + a i , n b n , j = ∑ k = 1 n a i , k b k , j (4) c_{i,j} = a_{i,1}b_{1,j} + a_{i,2}b_{2,j} + \cdots + a_{i,n}b_{n,j} = \sum^n_{k=1}a_{i,k}b_{k,j} \tag{4} ci,j=ai,1b1,j+ai,2b2,j++ai,nbn,j=k=1nai,kbk,j(4)
称为 A A A B B B 的乘积,记作 C = A B C = AB C=AB

由矩阵乘法的定义可以看出,矩阵A与B的乘积C的第i行第j列的元素等于第一个矩阵的第i行与第二个矩阵B的第j列的对应元素乘积的和。当然,在乘积的定义中,要求第二个矩阵的行数与第一个矩阵的列数相等。

例如:矩阵 $A、B $ 如下:
$$
A =
\begin{pmatrix}
1 & 0 & -4 & 2 \
3 & 4 & 0 & -1
\end{pmatrix},
B = \begin{pmatrix}
1 & 0 \
-1 & 2 \
0 & 3 \
1 & -1
\end{pmatrix} \

C = AB = \begin{pmatrix}
1 & 0 & -4 & 2 \
3 & 4 & 0 & -1
\end{pmatrix}
\begin{pmatrix}
1 & 0 \
-1 & 2 \
0 & 3 \
1 & -1
\end{pmatrix}

\begin{pmatrix}
3 & -14 \
-2 & 9
\end{pmatrix}
$$
矩阵的乘法适合结合律,即有 ( A B ) C = A ( B C ) (AB)C = A(BC) (AB)C=A(BC)。矩阵的乘法不适合交换律,即一般来说 A B ≠ B A AB \neq BA AB=BA,这是由于一方面在乘积中要求第一个因子的列数等于第二个因子的行数,否则没有意义。即使当AB有意义时,BA不一定有意义。另一方面即使AB与BA都有意义,它们的级数也不一定相等。此外,矩阵乘法还有一个特点,两个不为零的矩阵的乘积可以是零。矩阵乘法的消去律不成立,即当 A B = A C AB = AC AB=AC 时,不一定有 B = C B = C B=C

矩阵的乘法和加法适合分配律,即满足等式 A ( B + C ) = A B + A C A(B + C) = AB + AC A(B+C)=AB+AC ( B + C ) A = B A + C A (B + C)A = BA + CA (B+C)A=BA+CA

矩阵乘法运算总结如下:

  • 结合律: ( A B ) C = A ( B C ) (AB)C = A(BC) (AB)C=A(BC)
  • 分配率: A ( B + C ) = A B + A C A(B + C) = AB + AC A(B+C)=AB+AC ( B + C ) A = B A + C A (B + C)A = BA + CA (B+C)A=BA+CA
  • 不符合交换律
  • 不符合消去律

对于主对角线上的元素全是1,其余元素全是0的n×n矩阵,称为 n n n单位矩阵,记为 E n E_n En,在不至于引起混淆的时候,可以简写为 E E E。对于单位矩阵,有等式: A m n E n = A m n A_{mn}E_n = A_{mn} AmnEn=Amn E m A m n = A m n E_mA_{mn} = A_{mn} EmAmn=Amn

数量乘法

矩阵与数量的乘法的定义类似于多元组与数量的乘法,矩阵:
( k a 1 , 1 k a 1 , 2 ⋯ k a 1 , n k a 2 , 1 k a 2 , 2 ⋯ k a 2 , n ⋮ ⋮ ⋱ ⋮ k a m , 1 k a m , 2 ⋯ k a m , n ) (5) \begin{pmatrix} ka_{1,1} & ka_{1,2} & \cdots & ka_{1,n} \\ ka_{2,1} & ka_{2,2} & \cdots & ka_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ ka_{m,1} & ka_{m,2} & \cdots & ka_{m,n} \end{pmatrix} \tag{5} ka1,1ka2,1kam,1ka1,2ka2,2kam,2ka1,nka2,nkam,n (5)
称为矩阵 A A A k k k 的数量乘法,记为 k A kA kA,矩阵乘法具有如下性质:

  • ( k + r ) A = k A + r A (k + r)A = kA + rA (k+r)A=kA+rA
  • k ( A + B ) = k A + k B k(A + B) = kA + kB k(A+B)=kA+kB
  • k ( r A ) = ( k r ) A k(rA) = (kr)A k(rA)=(kr)A
  • 1 A = A 1A = A 1A=A
  • k ( A B ) = ( k A ) B = A ( k B ) k(AB) = (kA)B = A(kB) k(AB)=(kA)B=A(kB)

数量矩阵:如果 A A A 是一个 m × n m\times n m×n 矩阵,那么有 k A = ( k E ) A = A ( k E ) kA = (kE)A = A(kE) kA=(kE)A=A(kE)。如下:
( k 0 ⋯ 0 0 k ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ k ) (6) \begin{pmatrix} k & 0 & \cdots & 0 \\ 0 & k & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & k \end{pmatrix} \tag{6} k000k000k (6)

转置

把一矩阵 A A A 的行列互换,所以得到的矩阵称为 A A A 的转置,记作 A T A^T AT, 或者 A ′ A^\prime A,具体定义如下:
A T = ( a 1 , 1 a 1 , 2 ⋯ a 1 , m a 2 , 1 a 2 , 2 ⋯ a 2 , m ⋮ ⋮ ⋱ ⋮ a n , 1 a n , 2 ⋯ a n , m ) (7) A^T = \begin{pmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,m} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,m} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n,1} & a_{n,2} & \cdots & a_{n,m} \end{pmatrix} \tag{7} AT= a1,1a2,1an,1a1,2a2,2an,2a1,ma2,man,m (7)

矩阵的转置具有如下性质:

  • ( A T ) T = A (A^T)^T = A (AT)T=A
  • ( A + B ) T = A T + B T (A + B)^T = A^T + B^T (A+B)T=AT+BT
  • ( A B ) T = B T A T (AB)^T = B^TA^T (AB)T=BTAT
  • ( k A ) T = k A T (kA)^T = kA^T (kA)T=kAT

矩阵的秩

如果把矩阵的每一行看成一个向量,那么矩阵就可以认为是由这些行向量组成的。同样,如果把矩阵的每一列看成一个向量,那么矩阵也可以认为是由列向量组成的。所谓的行秩就是指矩阵的行向量组的秩;矩阵的列秩就是矩阵的列向量组的秩。

例如,矩阵如下:
A = ( 1 1 3 1 0 2 − 1 4 0 0 0 5 0 0 0 0 ) A = \begin{pmatrix} 1 & 1 & 3 & 1 \\ 0 & 2 & -1 & 4 \\ 0 & 0 & 0 & 5 \\ 0 & 0 & 0 & 0 \end{pmatrix} A= 1000120031001450
行向量 a 1 ⃗ = ( 1 , 1 , 3 , 1 ) , a 2 ) = ( 0 , 2 , − 1 , 4 ) , a 3 ⃗ = ( 0 , 0 , 0 , 5 ) , a 4 ⃗ = ( 0 , 0 , 0 , 0 ) ⃗ \vec{a_1} = (1, 1, 3 ,1),\vec{a_2) = (0, 2, -1, 4),\vec{a_3} = (0, 0, 0, 5), \vec{a_4} = (0, 0, 0, 0)} a1 =(1,1,3,1)a2)=(0,2,1,4)a3 =(0,0,0,5)a4 =(0,0,0,0) 很容易证明向量组 a 1 ⃗ , a 2 ⃗ , a 3 ⃗ \vec{a_1}, \vec{a_2}, \vec{a_3} a1 ,a2 ,a3 是向量组 a 1 ⃗ , a 2 ⃗ , a 3 ⃗ , a 4 ⃗ \vec{a_1}, \vec{a_2}, \vec{a_3}, \vec{a_4} a1 ,a2 ,a3 ,a4 的极大线性无关组。即: λ 1 a 1 ⃗ + λ 2 a 2 ⃗ + λ 3 a 3 ⃗ = 0 ⃗ \lambda_1\vec{a_1} + \lambda_2\vec{a_2} + \lambda_3\vec{a_3} = \vec{0} λ1a1 +λ2a2 +λ3a3 =0 , 可以得到方程:
{ λ 1 = 0 λ 1 + 2 λ 2 = 0 3 λ 1 − λ 2 = 0 λ 1 + 4 λ 2 + 5 λ 3 = 0 \begin{cases} \lambda_1 &= 0 \\ \lambda_1 + 2\lambda_2 &= 0 \\ 3\lambda_1 - \lambda_2 &= 0 \\ \lambda_1 + 4\lambda_2 + 5\lambda_3 &= 0 \end{cases} λ1λ1+2λ23λ1λ2λ1+4λ2+5λ3=0=0=0=0

计算得到, λ 1 = λ 2 = λ 3 = 0 \lambda_1 = \lambda_2 = \lambda_3 = 0 λ1=λ2=λ3=0,这就证明了 a 1 ⃗ , a 2 ⃗ , a 3 ⃗ \vec{a_1}, \vec{a_2}, \vec{a_3} a1 ,a2 ,a3 线性无关。因为 a 4 ⃗ \vec{a_4} a4 是零向量,把 a 4 ⃗ \vec{a_4} a4 添加进去,就会存在一个非0的 λ 4 \lambda_4 λ4 使得向量组线性相关,因此向量组 a 1 ⃗ , a 2 ⃗ , a 3 ⃗ , a 4 ⃗ \vec{a_1}, \vec{a_2}, \vec{a_3}, \vec{a_4} a1 ,a2 ,a3 ,a4 的秩为 3,也就是说矩阵 A A A 的行秩为3。

列向量组, b 1 ⃗ = ( 1 , 0 , 0 , 0 ) , b 2 ⃗ = ( 1 , 2 , 0 , 0 ) , b 3 ⃗ = ( 3 , − 1 , 0 , 0 ) , b 4 ⃗ = ( 1 , 4 , 5 , 0 ) \vec{b_1} = (1, 0, 0, 0),\vec{b_2} = (1, 2, 0, 0), \vec{b_3} = (3, -1, 0, 0), \vec{b_4} = (1, 4, 5, 0) b1 =(1,0,0,0)b2 =(1,2,0,0),b3 =(3,1,0,0),b4 =(1,4,5,0),用同样的方法可以得到方程:
{ λ 1 + λ 2 + 3 λ 3 + λ 4 = 0 2 λ 2 − λ 3 + λ 4 = 0 5 λ 4 = 0 \begin{cases} \lambda_1 + \lambda_2 + 3\lambda_3 + \lambda_4 &= 0 \\ 2\lambda_2 - \lambda_3 + \lambda_4 &= 0 \\ 5\lambda_4 &= 0 \\ \end{cases} λ1+λ2+3λ3+λ42λ2λ3+λ45λ4=0=0=0
由此可以得出: b 1 ⃗ , b 2 ⃗ , b 4 ⃗ 或者 b 1 ⃗ , b 3 ⃗ , b 4 ⃗ 或者 b 2 ⃗ , b 3 ⃗ , b 4 ⃗ \vec{b_1}, \vec{b_2}, \vec{b_4} 或者 \vec{b_1}, \vec{b_3}, \vec{b_4} 或者 \vec{b_2}, \vec{b_3}, \vec{b_4} b1 ,b2 ,b4 或者b1 ,b3 ,b4 或者b2 ,b3 ,b4 线性无关。其中 b 3 ⃗ = 7 2 b 1 ⃗ − 1 2 b 2 ⃗ \vec{b_3} = \frac{7}{2}\vec{b_1} - \frac{1}{2}\vec{b_2} b3 =27b1 21b2 (即 b 3 ⃗ 可以用 b 1 ⃗ , b 2 ⃗ 线性表示,或者说 b 3 ⃗ 是 b 1 ⃗ , b 2 ⃗ 的线性组合 \vec{b_3} 可以用 \vec{b_1},\vec{b_2}线性表示,或者说 \vec{b_3} 是 \vec{b_1},\vec{b_2} 的线性组合 b3 可以用b1 ,b2 线性表示,或者说b3 b1 ,b2 的线性组合),因此不能把 b 3 ⃗ \vec{b_3} b3 添加进线性无关组,所以 b 1 ⃗ , b 2 ⃗ , b 3 ⃗ , b 4 ⃗ \vec{b_1}, \vec{b_2}, \vec{b_3}, \vec{b_4} b1 ,b2 ,b3 ,b4 的极大线性无关组的秩为3。矩阵的行秩和列秩是相等的,所以统称为矩阵的秩

行列式

注:此处为行列式,运算方式跟矩阵完全不同,一定要区分开来。

方阵是矩阵中的特殊性况,指的是行数和列数都相等的矩阵。对于行数和列数相同的方阵才有行列式的概念,给定一个n×n的矩阵M:
M = ( a 1 , 1 a 1 , 2 ⋯ a 1 , n a 2 , 1 a 2 , 2 ⋯ a 2 , n ⋮ ⋮ ⋱ ⋮ a n , 1 a n , 2 ⋯ a n , n ) (8) M = \begin{pmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n,1} & a_{n,2} & \cdots & a_{n,n} \end{pmatrix} \tag{8} M= a1,1a2,1an,1a1,2a2,2an,2a1,na2,nan,n (8)
定义一个 n n n 级行列式:
∣ a 1 , 1 a 1 , 2 ⋯ a 1 , n a 2 , 1 a 2 , 2 ⋯ a 2 , n ⋮ ⋮ ⋱ ⋮ a n , 1 a n , 2 ⋯ a n , n ∣ (9) \begin{vmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n,1} & a_{n,2} & \cdots & a_{n,n} \end{vmatrix} \tag{9} a1,1a2,1an,1a1,2a2,2an,2a1,na2,nan,n (9)
称为矩阵 M M M 的行列式,记作 ∣ M ∣ |M| M

对于 n n n 级行列式:
∣ a 1 , 1 ⋯ a 1 , j ⋯ a 1 , n ⋮ ⋮ ⋮ a i , 1 ⋯ a i , j ⋯ a i , n ⋮ ⋮ ⋮ a n , 1 ⋯ a n , j ⋯ a n , n ∣ \begin{vmatrix} a_{1,1} & \cdots & a_{1,j} & \cdots & a_{1,n} \\ \vdots & & \vdots & & \vdots \\ a_{i,1} & \cdots & a_{i,j} & \cdots & a_{i,n} \\ \vdots & & \vdots & & \vdots \\ a_{n,1} & \cdots & a_{n,j} & \cdots & a_{n,n} \end{vmatrix} a1,1ai,1an,1a1,jai,jan,ja1,nai,nan,n
中,划去元素 a i , j a_{i,j} ai,j 所在的第 i i i 行和第 j j j 列,剩下的 ( n − 1 ) 2 (n - 1)^2 (n1)2 个元素按照原来的排法构成一个 ( n − 1 ) (n - 1) (n1) 级的行列式:
∣ a 1 , 1 ⋯ a 1 , j − 1 a 1 , j + 1 ⋯ a 1 , n ⋮ ⋮ ⋮ ⋮ a i − 1 , 1 ⋯ a i − 1 , j − 1 a i − 1 , j + 1 ⋯ a i − 1 , n a i + 1 , 1 ⋯ a i + 1 , j − 1 a i + 1 , j + 1 ⋯ a i + 1 , n ⋮ ⋮ ⋮ ⋮ a n , 1 ⋯ a n , j − 1 a n , j + 1 ⋯ a n , n ∣ (10) \begin{vmatrix} a_{1,1} & \cdots & a_{1,j-1} & a_{1,j+1} & \cdots & a_{1,n} \\ \vdots & & \vdots & \vdots & & \vdots \\ a_{i-1,1} & \cdots & a_{i-1,j-1} & a_{i-1,j+1} & \cdots & a_{i-1,n} \\ a_{i+1,1} & \cdots & a_{i+1,j-1} & a_{i+1,j+1} & \cdots & a_{i+1,n} \\ \vdots & & \vdots & \vdots & & \vdots \\ a_{n,1} & \cdots & a_{n,j-1} & a_{n,j+1} & \cdots & a_{n,n} \end{vmatrix} \tag{10} a1,1ai1,1ai+1,1an,1a1,j1ai1,j1ai+1,j1an,j1a1,j+1ai1,j+1ai+1,j+1an,j+1a1,nai1,nai+1,nan,n (10)
成为元素 a i , j a_{i,j} ai,j 的余子式,记作 M i , j M_{i,j} Mi,j,称 A i , j = ( − 1 ) i + j M i , j A_{i,j} = (-1)^{i+j}M_{i,j} Ai,j=(1)i+jMi,j代数余子式,则对于 n n n 级行列式,如下等式成立:
a k , 1 A i , 1 + a k , 2 A i , 2 + ⋯ + a k , n A i , n = { ∣ M ∣ , k = i 0 , k ≠ i a 1 , h A 1 , j + a 2 , h A 2 , j + ⋯ + a n , h A h , j = { ∣ M ∣ , h = j 0 , h ≠ j a_{k,1}A_{i,1} + a_{k,2}A_{i,2} + \cdots + a_{k,n}A_{i,n} = \begin{cases} |M|, k=i \\ 0, k \neq i \end{cases} \\ a_{1,h}A_{1,j} + a_{2,h}A_{2,j} + \cdots + a_{n,h}A_{h,j} = \begin{cases} |M|, h=j \\ 0, h \neq j \end{cases} ak,1Ai,1+ak,2Ai,2++ak,nAi,n={M,k=i0,k=ia1,hA1,j+a2,hA2,j++an,hAh,j={M,h=j0,h=j

行列式具有一些特别重要的性质:

  • 行列互换,行列式不变,即 ∣ M ∣ = ∣ M T ∣ |M| = |M^T| M=MT
  • 一行(列)的公因子可以提出去,或者说一数乘行列式的一行(列)就相当于这个数乘以此行列式,如果一行列式中一行(列)为零,那么行列式为零,即

$$
\begin{vmatrix}
a_{1,1} & a_{1,2} & \cdots & a_{1,n} \
\vdots & \vdots & & \vdots \
ka_{i,1} & ka_{i,2} & \cdots & ka_{i,n} \
\vdots & \vdots & & \vdots \
a_{n,1} & a_{n,2} & \cdots & a_{n,n}
\end{vmatrix}

k\begin{vmatrix}
a_{1,1} & a_{1,2} & \cdots & a_{1,n} \
\vdots & \vdots & & \vdots \
a_{i,1} & a_{i,2} & \cdots & a_{i,n} \
\vdots & \vdots & & \vdots \
a_{n,1} & a_{n,2} & \cdots & a_{n,n}
\end{vmatrix}
$$

∣ a 1 , 1 ⋯ k a 1 , i ⋯ a 1 , n a 2 , 1 ⋯ k a 2 , i ⋯ a 2 , n ⋮ ⋮ ⋮ a n , 1 ⋯ k a n , i ⋯ a n , n ∣ = k ∣ a 1 , 1 ⋯ a 1 , i ⋯ a 1 , n a 2 , 1 ⋯ a 2 , i ⋯ a 2 , n ⋮ ⋮ ⋮ a n , 1 ⋯ a n , i ⋯ a n , n ∣ \begin{vmatrix} a_{1,1} & \cdots & ka_{1,i} & \cdots & a_{1,n} \\ a_{2,1} & \cdots & ka_{2,i} & \cdots & a_{2,n} \\ \vdots & & \vdots & & \vdots \\ a_{n,1} & \cdots & ka_{n,i} & \cdots & a_{n,n} \end{vmatrix} = \\ k\begin{vmatrix} a_{1,1} & \cdots & a_{1,i} & \cdots & a_{1,n} \\ a_{2,1} & \cdots & a_{2,i} & \cdots & a_{2,n} \\ \vdots & & \vdots & & \vdots \\ a_{n,1} & \cdots & a_{n,i} & \cdots & a_{n,n} \end{vmatrix} a1,1a2,1an,1ka1,ika2,ikan,ia1,na2,nan,n =k a1,1a2,1an,1a1,ia2,ian,ia1,na2,nan,n

  • 如果某一行(列)是两组数的和,那么这个行列式就等于两个行列式的和,而这两个行列式除这一行(列)以外全与原来行列式的对应行(列)一样,即:

∣ a 1 , 1 a 1 , 2 ⋯ a 1 , n ⋮ ⋮ ⋮ b i , 1 + c i , 1 b i , 2 + c i , 2 ⋯ b i , n + c i , n ⋮ ⋮ ⋮ a n , 1 a n , 2 ⋯ a n , n ∣ = ∣ a 1 , 1 a 1 , 2 ⋯ a 1 , n ⋮ ⋮ ⋮ b i , 1 b i , 2 ⋯ b i , n ⋮ ⋮ ⋮ a n , 1 a n , 2 ⋯ a n , n ∣ + ∣ a 1 , 1 a 1 , 2 ⋯ a 1 , n ⋮ ⋮ ⋮ c i , 1 c i , 2 ⋯ c i , n ⋮ ⋮ ⋮ a n , 1 a n , 2 ⋯ a n , n ∣ \begin{vmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ \vdots & \vdots & & \vdots \\ b_{i,1} + c_{i,1} & b_{i,2}+c_{i,2} & \cdots & b_{i,n}+c_{i,n} \\ \vdots & \vdots & & \vdots \\ a_{n,1} & a_{n,2} & \cdots & a_{n,n} \end{vmatrix} = \begin{vmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ \vdots & \vdots & & \vdots \\ b_{i,1} & b_{i,2}& \cdots & b_{i,n}\\ \vdots & \vdots & & \vdots \\ a_{n,1} & a_{n,2} & \cdots & a_{n,n} \end{vmatrix} + \begin{vmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ \vdots & \vdots & & \vdots \\ c_{i,1} & c_{i,2}& \cdots & c_{i,n}\\ \vdots & \vdots & & \vdots \\ a_{n,1} & a_{n,2} & \cdots & a_{n,n} \end{vmatrix} a1,1bi,1+ci,1an,1a1,2bi,2+ci,2an,2a1,nbi,n+ci,nan,n = a1,1bi,1an,1a1,2bi,2an,2a1,nbi,nan,n + a1,1ci,1an,1a1,2ci,2an,2a1,nci,nan,n

$$
\begin{vmatrix}
a_{1,2} & \cdots & b_{1,i}+c_{1,i} & \cdots & a_{1,n} \
a_{2,1} & \cdots & b_{2,i}+c_{2,i} & \cdots & a_{2,n} \
\vdots & & \vdots & & \vdots \
a_{n,1} & \cdots & b_{n,i}+c_{n,i} & \cdots & a_{n,n}
\end{vmatrix}

\begin{vmatrix}
a_{1,2} & \cdots & b_{1,i} & \cdots & a_{1,n} \
a_{2,1} & \cdots & b_{2,i} & \cdots & a_{2,n} \
\vdots & & \vdots & & \vdots \
a_{n,1} & \cdots & b_{n,i} & \cdots & a_{n,n}
\end{vmatrix} +
\begin{vmatrix}
a_{1,2} & \cdots & c_{1,i} & \cdots & a_{1,n} \
a_{2,1} & \cdots & c_{2,i} & \cdots & a_{2,n} \
\vdots & & \vdots & & \vdots \
a_{n,1} & \cdots & c_{n,i} & \cdots & a_{n,n}
\end{vmatrix}
$$

  • 如果行列式中有两行(列)相同,那么行列式为零,所谓两行(列)相同就是说两行(列)的对应元素都相等。
  • 如果行列式中两行(列)成比例,那么行列式为零。
  • 把一行(列)的倍数加到另一行(列),行列式不变。
  • 对换行列式中两行(列)的位置,行列式反号。

逆矩阵

n n n 级方阵 A A A 称为可逆的,如果有 n n n 级方阵 B B B,使得 A B = B A = E AB=BA=E AB=BA=E,这里 E E E 是单位矩阵,那么 B B B 就称为逆矩阵,记为 A − 1 A^{-1} A1

首先,由于矩阵的乘法规则,只有方阵才能满足要求;其次,对于任意的矩阵 A A A,矩阵 B B B 是唯一的。

如果矩阵M是一个方阵并且其行列式的值为非零,则称矩阵M为非奇异矩阵,否则,就称为奇异矩阵

方阵的逆矩阵并不是总存在的,有几种方法可以判定逆矩阵何时存在:

  • 矩阵的秩为 n n n
  • 它是非奇异的;
  • ∣ A ∣ ≠ 0 |A|\neq 0 A=0
  • 它的行(列)是线性无关的;

图形变换

图形变换中的矩阵应用

齐次坐标与仿射变换

齐次坐标是图形变换的基础,它通过在n维坐标中添加额外维度,将平移等非线性变换转化为矩阵乘法。

  • 二维齐次坐标:点 ( x , y ) (x,y) (x,y)表示为 ( x , y , 1 ) T (x,y,1)^T (x,y,1)T,向量 ( d x , d y ) (dx,dy) (dx,dy)表示为 ( d x , d y , 0 ) T (dx,dy,0)^T (dx,dy,0)T
  • 三维齐次坐标:点 ( x , y , z ) (x,y,z) (x,y,z)表示为 ( x , y , z , 1 ) T (x,y,z,1)^T (x,y,z,1)T,向量 ( d x , d y , d z ) (dx,dy,dz) (dx,dy,dz)表示为 ( d x , d y , d z , 0 ) T (dx,dy,dz,0)^T (dx,dy,dz,0)T

仿射变换 = 线性变换 + 平移,可表示为齐次坐标下的矩阵乘法:
( x ′ y ′ 1 ) = ( a b t x c d t y 0 0 1 ) × ( x y 1 ) \begin{pmatrix} x' \\ y' \\ 1 \end{pmatrix} = \begin{pmatrix} a & b & t_x \\ c & d & t_y \\ 0 & 0 & 1 \end{pmatrix} \times \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} xy1 = ac0bd0txty1 × xy1
其中左上角 2 × 2 2\times2 2×2子矩阵表示线性变换(旋转、缩放等), ( t x , t y ) (t_x,t_y) (tx,ty)表示平移量。

二维图形基本变换矩阵
变换类型 变换矩阵(齐次坐标) 几何意义
平移 ( 1 0 t x 0 1 t y 0 0 1 ) \begin{pmatrix}1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1\end{pmatrix} 100010txty1 ( x , y ) (x,y) (x,y)移动至 ( x + t x , y + t y ) (x+t_x, y+t_y) (x+tx,y+ty)
缩放 ( s x 0 0 0 s y 0 0 0 1 ) \begin{pmatrix}s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & 1\end{pmatrix} sx000sy0001 沿x轴缩放 s x s_x sx倍,沿y轴缩放 s y s_y sy倍, s x = s y s_x=s_y sx=sy时为等比例缩放
绕原点旋转 ( cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ) \begin{pmatrix}\cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1\end{pmatrix} cosθsinθ0sinθcosθ0001 逆时针旋转 θ \theta θ角度,旋转矩阵满足正交性(逆矩阵等于转置矩阵)
x轴镜像 ( 1 0 0 0 − 1 0 0 0 1 ) \begin{pmatrix}1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1\end{pmatrix} 100010001 关于x轴对称,y坐标取反
y轴镜像 ( − 1 0 0 0 1 0 0 0 1 ) \begin{pmatrix}-1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{pmatrix} 100010001 关于y轴对称,x坐标取反
剪切变换 ( 1 s h y 0 s h x 1 0 0 0 1 ) \begin{pmatrix}1 & sh_y & 0 \\ sh_x & 1 & 0 \\ 0 & 0 & 1\end{pmatrix} 1shx0shy10001 s h x sh_x shx为x方向剪切系数, s h y sh_y shy为y方向剪切系数,例如 s h x = 0.5 sh_x=0.5 shx=0.5时,图形沿x轴倾斜

示例:点 ( 2 , 3 ) (2,3) (2,3)绕原点逆时针旋转90°
旋转矩阵 R ( 90 ° ) = ( 0 − 1 0 1 0 0 0 0 1 ) R(90°)=\begin{pmatrix}0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1\end{pmatrix} R(90°)= 010100001 ,变换后坐标:
( 0 − 1 0 1 0 0 0 0 1 ) × ( 2 3 1 ) = ( − 3 2 1 ) \begin{pmatrix}0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1\end{pmatrix} \times \begin{pmatrix}2 \\ 3 \\ 1\end{pmatrix} = \begin{pmatrix}-3 \\ 2 \\ 1\end{pmatrix} 010100001 × 231 = 321

复合变换与矩阵顺序

复合变换通过矩阵相乘实现,但矩阵顺序影响结果(矩阵乘法不满足交换律)。

  • 先旋转后平移 T ( t x , t y ) × R ( θ ) T(t_x,t_y) \times R(\theta) T(tx,ty)×R(θ)
  • 先平移后旋转 R ( θ ) × T ( t x , t y ) R(\theta) \times T(t_x,t_y) R(θ)×T(tx,ty)

示例:点 ( 1 , 0 ) (1,0) (1,0)先沿x轴平移2个单位,再绕原点旋转90°
平移矩阵 T ( 2 , 0 ) = ( 1 0 2 0 1 0 0 0 1 ) T(2,0)=\begin{pmatrix}1 & 0 & 2 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{pmatrix} T(2,0)= 100010201 ,旋转矩阵 R ( 90 ° ) R(90°) R(90°),复合矩阵:
R ( 90 ° ) × T ( 2 , 0 ) = ( 0 − 1 0 1 0 0 0 0 1 ) × ( 1 0 2 0 1 0 0 0 1 ) = ( 0 − 1 0 1 0 2 0 0 1 ) R(90°) \times T(2,0) = \begin{pmatrix}0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1\end{pmatrix} \times \begin{pmatrix}1 & 0 & 2 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{pmatrix} = \begin{pmatrix}0 & -1 & 0 \\ 1 & 0 & 2 \\ 0 & 0 & 1\end{pmatrix} R(90°)×T(2,0)= 010100001 × 100010201 = 010100021
变换后坐标: ( 0 − 1 0 1 0 2 0 0 1 ) × ( 1 0 1 ) = ( 0 3 1 ) \begin{pmatrix}0 & -1 & 0 \\ 1 & 0 & 2 \\ 0 & 0 & 1\end{pmatrix} \times \begin{pmatrix}1 \\ 0 \\ 1\end{pmatrix} = \begin{pmatrix}0 \\ 3 \\ 1\end{pmatrix} 010100021 × 101 = 031

三维图形变换矩阵

三维变换在二维基础上增加z轴,常用变换包括:

  1. 三维平移
    T ( t x , t y , t z ) = ( 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ) T(t_x,t_y,t_z) = \begin{pmatrix}1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1\end{pmatrix} T(tx,ty,tz)= 100001000010txtytz1

  2. 三维旋转(绕坐标轴旋转):

    • 绕x轴旋转 θ \theta θ
      R x ( θ ) = ( 1 0 0 0 0 cos ⁡ θ − sin ⁡ θ 0 0 sin ⁡ θ cos ⁡ θ 0 0 0 0 1 ) R_x(\theta) = \begin{pmatrix}1 & 0 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta & 0 \\ 0 & \sin\theta & \cos\theta & 0 \\ 0 & 0 & 0 & 1\end{pmatrix} Rx(θ)= 10000cosθsinθ00sinθcosθ00001
    • 绕y轴旋转 θ \theta θ
      R y ( θ ) = ( cos ⁡ θ 0 sin ⁡ θ 0 0 1 0 0 − sin ⁡ θ 0 cos ⁡ θ 0 0 0 0 1 ) R_y(\theta) = \begin{pmatrix}\cos\theta & 0 & \sin\theta & 0 \\ 0 & 1 & 0 & 0 \\ -\sin\theta & 0 & \cos\theta & 0 \\ 0 & 0 & 0 & 1\end{pmatrix} Ry(θ)= cosθ0sinθ00100sinθ0cosθ00001
    • 绕z轴旋转 θ \theta θ
      R z ( θ ) = ( cos ⁡ θ − sin ⁡ θ 0 0 sin ⁡ θ cos ⁡ θ 0 0 0 0 1 0 0 0 0 1 ) R_z(\theta) = \begin{pmatrix}\cos\theta & -\sin\theta & 0 & 0 \\ \sin\theta & \cos\theta & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1\end{pmatrix} Rz(θ)= cosθsinθ00sinθcosθ0000100001
  3. 三维缩放
    S ( s x , s y , s z ) = ( s x 0 0 0 0 s y 0 0 0 0 s z 0 0 0 0 1 ) S(s_x,s_y,s_z) = \begin{pmatrix}s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z & 0 \\ 0 & 0 & 0 & 1\end{pmatrix} S(sx,sy,sz)= sx0000sy0000sz00001

投影变换

投影变换将三维坐标映射到二维平面,分为:

  1. 正交投影:忽略z轴,直接映射到xy平面,矩阵为:
    ( 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 ) \begin{pmatrix}1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1\end{pmatrix} 1000010000000001

  2. 透视投影:模拟人眼视觉,远小近大,矩阵为(视锥体近平面距离为 n n n,远平面距离为 f f f):
    ( n 0 0 0 0 n 0 0 0 0 n + f − n f 0 0 1 0 ) \begin{pmatrix}n & 0 & 0 & 0 \\ 0 & n & 0 & 0 \\ 0 & 0 & n+f & -nf \\ 0 & 0 & 1 & 0\end{pmatrix} n0000n0000n+f100nf0

逆变换与变换矩阵的性质
  • 逆变换矩阵:若变换矩阵为 M M M,则逆变换矩阵为 M − 1 M^{-1} M1,例如:

    • 平移矩阵的逆: T ( t x , t y ) − 1 = T ( − t x , − t y ) T(t_x,t_y)^{-1} = T(-t_x,-t_y) T(tx,ty)1=T(tx,ty)
    • 旋转矩阵的逆: R ( θ ) − 1 = R ( − θ ) = R ( θ ) T R(\theta)^{-1} = R(-\theta) = R(\theta)^T R(θ)1=R(θ)=R(θ)T(正交矩阵性质)
    • 缩放矩阵的逆: S ( s x , s y ) − 1 = S ( 1 / s x , 1 / s y ) S(s_x,s_y)^{-1} = S(1/s_x,1/s_y) S(sx,sy)1=S(1/sx,1/sy) s x , s y ≠ 0 s_x,s_y \neq 0 sx,sy=0
  • 变换矩阵的行列式

    • 旋转矩阵行列式为1(保面积/体积);
    • 缩放矩阵行列式为 s x s y s_x s_y sxsy(面积缩放因子);
    • 奇异矩阵(行列式为0)无法进行逆变换(如投影变换不可逆)。
图形变换的应用场景
  • 计算机图形学:模型变换(Model)、视图变换(View)、投影变换(Projection)组成MVP矩阵,用于三维场景渲染。
  • 机器人学:通过齐次变换矩阵(DH矩阵)描述机械臂关节的位置和姿态。
  • 图像处理:旋转、缩放、平移用于图像校正和变换,仿射变换矩阵可通过特征点求解(如OpenCV中的warpAffine函数)。

通过矩阵运算,图形变换可高效地通过硬件(GPU)并行计算实现,是现代计算机图形技术的数学基础。

你可能感兴趣的:(数学,矩阵,线性代数,游戏开发)