矩阵的数学定义

矩阵的数学定义

1 矩阵类型

1.1 m×n 阶矩阵

m×n 个数 aij 排成的mn列的数表称为mn列的矩阵,简称m×n矩阵。
记作:

$$\mathbf{A}=\begin{bmatrix}a_{11}&a_{12}&\cdots&a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\a_{31}&a_{32}&\cdots&a_{3n}\\vdots&\vdots&\ddots&\vdots\\a_{m1}&a_{m2}&\cdots&a_{mn} \end{bmatrix}$$

  • m×n 个数称为矩阵 A 的元素,简称为元;
  • aij 位于矩阵 A 的第 i 行第 j 列,称为矩阵 A(i,j) 元;
  • 以数 aij(i,j) 元的矩阵可记为 (aij)(aij)m×n
  • m×n 矩阵 A 也记作 Amn

1.2 方阵(n阶矩阵)

行数列数 相等的矩阵,称为方阵
行数列数 都等于 n 的矩阵称为 n 阶矩阵n 阶方阵
记作:

$$\mathbf{A}=\begin{bmatrix}a_{11} & a_{12} & \cdots & a_{1n} \\a_{21} & a_{22} & \cdots & a_{2n} \\a_{31} & a_{32} & \cdots & a_{3n} \\vdots & \vdots & \ddots & \vdots \\a_{n1} & a_{n2} & \cdots & a_{nn}\end{bmatrix}$$

1.3 零矩阵

所有元素都为零的矩阵,称为零矩阵
即:

$$\mathbf{A}=\begin{bmatrix}0&0&\cdots&0\\ 0&0&\cdots&0\\ \vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&0\end{bmatrix}$$

1.4 单位矩阵

n 阶方阵,且对角元素为 1其他元素为 0的矩阵。
记作:

$$\mathbf{I_n}=\begin{bmatrix}1&0&\cdots&0&0\\ 0&1&\cdots&0&0\\ \vdots&\vdots&\ddots&\vdots&\vdots\\ 0&0&\cdots&1&0\\ 0&0&\cdots&0&1 \end{bmatrix}$$

1.5 对角矩阵

除了主对角线之外的元素都为 0 的方阵,称为 对角矩阵
即:

$$\mathbf{A}=\begin{bmatrix}a&0&\cdots&0\\0&b&\cdots&0\\ \vdots&\vdots&\ddots&\vdots\\0&0&\cdots&c\end{bmatrix}$$

1.6 上三角和下三角矩阵

矩阵的上半部分或下半部分(除对角线外)的元素为 0。

1.7 稀疏矩阵

大部分元素为 0 的矩阵。

1.8 对称矩阵

矩阵等于其转置矩阵。

1.9 实矩阵与复矩阵

元素是 实数 的矩阵称为 实矩阵,元素是 复数 的矩阵称为 复矩阵


2 矩阵的基本运算

矩阵的基本运算包括矩阵的 加法减法数乘乘法转置共轭共轭转置。在游戏中的转换运用,用的基本都是乘法的性质。

矩阵的 加减法 和矩阵的 数乘 合称 矩阵的线性运算

2.1 加法

矩阵的加法满足下列运算律 (A,B,C 必须都是 同型矩阵 ):

$$A+B = B+A \quad$$ $$(A+B)+C=A+(B+C)$$

具体如下:

$$\begin{bmatrix}i_0&j_0&k_0\\l_0&m_0&n_0\end{bmatrix}+\begin{bmatrix}i_1&j_1&k_1\\l_1&m_1&n_1\end{bmatrix}=\begin{bmatrix}i_0+i_1&j_0+j_1&k_0+k_1\\l_0+l_1&m_0+m_1&n_0+n_1\end{bmatrix}$$

import numpy as np
# 创建2个3x3的方阵
A = np.eye(3)
B = np.eye(3)
print(f"A:\n{A}")
print(f"B:\n{B}")
print(f"A+B:\n{A+B}")
A:
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
B:
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
A + B:
[[2. 0. 0.]
 [0. 2. 0.]
 [0. 0. 2.]]

2.2 减法

同矩阵的加法一样,满足以下运算规律 (A,B,C 必须都是 同型矩阵 ):

$$A-B = -B+A \quad$$ $$(A-B)+C=A+(C-B)$$

具体如下:

$$\begin{bmatrix}i_0+i_1 & j_0+j_1 & k_0+k_1 \\l_0+l_1 & m_0+m_1 & n_0+n_1\end{bmatrix}-\begin{bmatrix}i_1 & j_1 & k_1 \\l_1 & m_1 & n_1\end{bmatrix}=\begin{bmatrix}i_0 & j_0 & k_0 \\l_0 & m_0 & n_0 \end{bmatrix}$$

import numpy as np
# 创建2个3x3的方阵
A = np.eye(3)
B = np.eye(3)
print(f"A:\n{A}")
print(f"B:\n{B}")
print(f"A - B:\n{A-B}")
A:
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
B:
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
A - B:
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]

2.3 数乘(与实数相乘)

矩阵的数乘满足以下规律:

$$(\gamma\mu)\mathbf{A} = \gamma(\mu\mathbf{A})$$ $$(\gamma+\mu)\mathbf{A}=\gamma\mathbf{A}+\mu\mathbf{A}$$ $$\gamma(\mathbf{A}+\mathbf{B})=\gamma\mathbf{A}+\gamma\mathbf{B}$$ $$k\mathbf{A}=\begin{bmatrix}ka_{11} & ka_{12} & \cdots & ka_{1n} \\ka_{21} & ka_{22} & \cdots & ka_{2n} \\ka_{31} & ka_{32} & \cdots & ka_{3n} \\ \vdots & \vdots & \ddots & \vdots \\ ka_{m1} & ka_{m2} & \cdots & ka_{mn} \end{bmatrix}$$

import numpy as np
# 创建1个3x3的方阵
A = np.eye(3)
print(f"A:\n{A}")
print(f"A * 3:\n{A*3}")
A:
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
A * 3:
[[3. 0. 0.]
 [0. 3. 0.]
 [0. 0. 3.]]

2.4 矩阵乘法(与矩阵相乘)

矩阵乘法是线性代数中的一个基本操作,两个矩阵仅当左边矩阵 $A_{mp}$ 的列数 p 和右边矩阵 $B_{pn}$ 的行数 p 相等时,才能进行乘法运算,其乘积 C 是一个 m×n 矩阵。

  • 结果矩阵的元素 $C_{ij}$ 是通过将矩阵 A 的第 i 行与矩阵 B 的第 j 列对应元素相乘然后求和得到的。
  • 结果矩阵的维度由左矩阵的行数和右矩阵的列数决定。

$$\mathbf{C}=(c_{ij})_{m×n}=\mathbf{A}_{m×p}\mathbf{B}_{p×n}$$$$\mathbf{c}_{ij}=\sum_{l=1}^n\mathbf{a}_{il}\mathbf{b}_{lj}$$

其满足 结合律分配律

$$(\mathbf{AB})\mathbf{C}=\mathbf{A}(\mathbf{BC})$$ $$(\mathbf{A+B})\mathbf{C}=\mathbf{AC+BC}$$ $$\mathbf{C}(\mathbf{A+B})=\mathbf{CA+CB}$$

例如:一个 2×3 矩阵与 3×2 矩阵相乘,如下

$$\begin{bmatrix}1&0&2\\ -1&3&1 \end{bmatrix} \times \begin{bmatrix}3&1\\ 2&1\\ 1&0 \end{bmatrix} =$$ $$ \begin{bmatrix}(1×3+0×2+2×1)&(1×1+0×1+2×0)\\ (-1×3+3×2+1×1) &(-1×1+3×1+1×0)\end{bmatrix} =$$ $$\begin{bmatrix}5&1\\ 4&2 \end{bmatrix}$$

  • 矩阵的乘法不满足交换律,即 AB ≠ BA
  • 对于任何矩阵$A$,与单位矩阵$I$相乘,结果仍然是$A$ ,即 $AI = IA = A$ ;
  • 两个矩阵乘积的转置等于各自转置的乘积的转置,即 $(AB)^T = B^T A^T$ ;
  • 如果矩阵 A 有逆矩阵$A^{-1}$,则 A 与$A^{-1}$的乘积是单位矩阵,即 $AA^{-1} = A^{-1}A = I$ ;
  • 零矩阵相乘的结果是零矩阵;
import numpy as np
# 创建1个3x2的矩阵
A = np.mat([
    [ 1, 0, 2],
    [-1, 3, 1]])
#创建1个2*3的矩阵
B = np.mat([
    [3, 1],
    [2, 1],
    [1, 0]])
print(f"A:\n{A}")
print(f"B:\n{B}")
print(f"A * B:\n{A*B}")
A:
[[ 1  0  2]
 [-1  3  1]]
B:
[[3 1]
 [2 1]
 [1 0]]
A * B:
[[5 1]
 [4 2]]

2.5 转置(Transposition)

把矩阵A的行和列互相交换所产生的矩阵称为A转置矩阵,这一过程称为矩阵的转置;
即:

$$\text{A}=\begin{bmatrix}a & b & c \\ d & e & f \end{bmatrix}$$ $$\text{A}^T=\begin{bmatrix}a & d \\b & e \\c & f \end{bmatrix}$$ $$a_{ij}=a^T_{ji}$$

矩阵的转置满足以下运算律:

$$(\mathbf{A}^T)^T=\mathbf{A}$$ $$(\gamma\mathbf{A})^T=\gamma\mathbf{A}^T$$ $$(\mathbf{A}\mathbf{B})^T=\mathbf{B}^T\mathbf{A}^T$$ $$(\mathbf{A+B})^T=\mathbf{A}^T+\mathbf{B}^T$$

  • 如果一个矩阵 A 满足 $A=A^T$ ,则该矩阵 A 被称为 对称矩阵
import numpy as np
# 创建1个3x3的方阵
A = np.mat([
    [1, 2, 3],
    [4, 5, 6]])
print(f"A:\n{A}")
print(f"A transpose:\n{np.transpose(A)}")
A:
[[1 2 3]
 [4 5 6]]
A transpose:
[[1 4]
 [2 5]
 [3 6]]

2.6 共轭(Conjugate)

矩阵的共轭包括取它的每个元素的复共轭。这主要适用于复数矩阵。
矩阵 A 的共轭定义为:

$$\overline{\mathbf{A}}$$

例如:一个 2X2 的复数矩阵,其共轭方式如下

$$\mathbf{A}=\begin{bmatrix}3+i & 5 \\2-2i & i\end{bmatrix}$$ $$\overline{\mathbf{A}}=\begin{bmatrix}3-i & 5 \\2+2i & -i\end{bmatrix}$$

import numpy as np
# 创建1个2x2的方阵
A = np.mat([
    [3+1j, 5],
    [2-2j, 1j]])
print(f"A:\n{A}")
print(f"A conjugate:\n{np.conjugate(A)}")
A:
[[3.+1.j 5.+0.j]
 [2.-2.j 0.+1.j]]
A conjugate:
[[3.-1.j 5.-0.j]
 [2.+2.j 0.-1.j]]

2.7 共轭转置(Hermitian Transpose)

矩阵的共轭转置是矩阵的转置然后求每个元素的复共轭,它也被称为厄米转置。
矩阵 A 的共轭转置定义为:

$$(A^H) \text{或} (A^*)$$

也可以写成:

$$\mathbf{A}^*=(\overline{\mathbf{A}})^T=\overline{\mathbf{A}^T}$$

例如:一个 2X2 的复数矩,其共轭转置方式如下

$$\mathbf{A}=\begin{bmatrix}3+i & 5 \\2-2i & i \end{bmatrix}$$ $$\mathbf{A}^*=\begin{bmatrix}3-i & 2+2i \\5 & -i \end{bmatrix}$$

import numpy as np
# 创建1个2x2的方阵
A = np.mat([
    [3+1j, 5],
    [2-2j, 1j]])
print(f"A:\n{A}")
print(f"A hermitian transpose:\n{np.transpose(np.conjugate(A))}")
A:
[[3.+1.j 5.+0.j]
 [2.-2.j 0.+1.j]]
A hermitian transpose:
[[3.-1.j 2.+2.j]
 [5.-0.j 0.-1.j]]

3 矩阵分解

3.1 LU 分解(LU Decomposition)

3.1.1 LU 分解的定义

将一个矩阵分解为两个矩阵乘积的方法,其中一个是下三角矩阵$L$,另一个是上三角矩阵$U$。具体来说,对于一个给定的方阵 $A$,LU 分解将其表示为:
$$A = LU$$

其中:

  • $L$ 是一个下三角矩阵(Lower triangular matrix),其对角线元素为 1。
  • $U$ 是一个上三角矩阵(Upper triangular matrix)。

有时,LU 分解还包括一个置换矩阵 $P$,用于处理矩阵的行交换,以提高数值稳定性。这种情况下,分解形式为:

$$PA = LU$$

其中:

  • $P$ 是一个置换矩阵(Permutation matrix),用于表示行交换。

3.1.2 LU 分解的步骤

  1. 初始化:开始时,矩阵 $L$ 初始化为单位矩阵,矩阵 $U$ 初始化为零矩阵。
  2. 分解过程
    • 对于每一列,选择一个主元(pivot),通常是当前列中绝对值最大的元素。
    • 通过行交换将主元移动到对角线位置(如果使用置换矩阵 $P$,则记录行交换)。
    • 使用高斯消去法,将当前列下方的元素消为零,并更新 $L$ 和 $U$ 矩阵。
import numpy as np

def lu_decomposition(matrix):
    n = matrix.shape[0]
    L = np.zeros((n, n))
    U = np.zeros((n, n))
    for i in range(n):
        # Upper Triangular
        for k in range(i, n):
            sum = 0
            for j in range(i):
                sum += (L[i][j] * U[j][k])
            U[i][k] = matrix[i,k] - sum
        # Lower Triangular
        for k in range(i, n):
            if i == k:
                L[i][i] = 1  # Diagonal as 1
            else:
                sum = 0
                for j in range(i):
                    sum += (L[k][j] * U[j][i])
                L[k][i] = (matrix[k,i] - sum) / U[i][i]
    return L, U

# 示例矩阵
A = np.mat([
    [1, 1, 2],
    [1, 3, 4],
    [1, 1, 1]],
    dtype=float)

L, U = lu_decomposition(A)
print(f"矩阵A:\n{A}\n")
print(f"矩阵A的下三角矩阵 L:\n{L}\n")
print(f"矩阵A的上三角矩阵 U:\n{U}")
矩阵A:
[[1. 1. 2.]
 [1. 3. 4.]
 [1. 1. 1.]]

矩阵A的下三角矩阵 L:
[[1. 0. 0.]
 [1. 1. 0.]
 [1. 0. 1.]]

矩阵A的上三角矩阵 U:
[[ 1.  1.  2.]
 [ 0.  2.  2.]
 [ 0.  0. -1.]]

3.1.3 LU 分解的应用

LU 分解在许多数值计算中有广泛的应用,包括:

  • 求解线性方程组:通过将方程组 $Ax = b$ 转化为两个三角方程组 $Ly = b$ 和 $Ux = y$ 来求解。
  • 计算矩阵的逆:通过求解多个线性方程组来计算矩阵的逆。
  • 计算行列式:矩阵 $A$ 的行列式可以通过 $U$ 矩阵的对角线元素的乘积来计算。

3.2 QR 分解(QR Decomposition)

将一个矩阵分解为一个正交矩阵和一个上三角矩阵的乘积。

3.3 奇异值分解(SVD)

将一个矩阵分解为三个特殊矩阵的乘积,广泛应用于信号处理和统计学。


4 特殊矩阵及运算

4.1 矩阵的行列式(Determinant)

4.1.1 定义

矩阵的行列式是一个标量值,它是一个方阵(即 行数列数 相等的矩阵)的属性,表示矩阵的一种特征值,可以从矩阵的元素按照特定的算术规则计算得出。

4.1.2 计算方法

一个 n×n 的正方矩阵 A 的 行列式 记为 det(A) 或者 |A| ,其计算方法依赖于矩阵的大小。

2x2矩阵:

$$\text{det}(A)=\mathbf{\text{det}\begin{pmatrix}a & b \\c & d \end{pmatrix}}=(a)(d)-(b)(c)$$

import numpy as np

def determinant2x2(matrix):
    a = matrix[0,0]
    b = matrix[0,1]
    c = matrix[1,0]
    d = matrix[1,1]
    return a*d - b*c

# 创建1个2x2的方阵
A = np.mat([
    [1, 2],
    [3, 4]])
print(f"A:\n{A}")
print(f"det(A): {round(determinant2x2(A))}")
A:
[[1 2]
 [3 4]]
det(A): -2
3×3矩阵:

$$\text{det}(A)=\mathbf{\text{det}\begin{pmatrix}a & b & c \\d & e & f \\g & h & i \end{pmatrix}}$$ $$= a(ei-fh) - b(di-fg) + c(dh-eg)$$ $$=aei+bfg+cdh-afh-bdih-ceg$$

import numpy as np
# 创建1个3x3的方阵
A = np.mat([
    [1, 1, 2],
    [1, 3, 4],
    [1, 1, 1]])
print(f"A:\n{A}")
print(f"det(A): {round(np.linalg.det(A))}")
A:
[[1 1 2]
 [1 3 4]
 [1 1 1]]
det(A): -2
高斯消元法:

通过将矩阵的化为上三角矩阵,再计算对角元素的乘积。

LU 分解:

通过 LU 分解 将矩阵分为下三角矩阵(L)和上三角矩阵(U),行列式为

$$\text{det}(A) = \text{det}(L) \cdot \text{det}(U)$$

import numpy as np

# 创建1个3x3的方阵
A = np.mat([
    [1, 1, 2],
    [1, 3, 4],
    [1, 1, 1]])

L, U = lu_decomposition(A)
print(f"A:\n{A}")
detA = np.linalg.det(L) * np.linalg.det(U)
print(f"det(A): {round(detA)}")
A:
[[1 1 2]
 [1 3 4]
 [1 1 1]]
det(A): -2
递归展开:

通过 Laplace展开公式递归计算行列式。

$$\text{det}(A) = \left|\mathbf{A}\right| = \sum_{j=1}^{n} (-1)^{i+j} a_{ij} \text{det}(M_{ij})$$

  • $M_{ij}$ 是矩阵 A 的 (i,j) 元素的 余子矩阵
  • $(-1)^{i+j} \text{det}(M_{ij})$ 为矩阵 A 的 (i,j) 元素的 代数余子式
import numpy as np

def minor_matrix(matrix, i, j):
    # 删除第i行和第j列
    minor = np.delete(np.delete(matrix, i, axis=0), j, axis=1)
    return minor

def determinant(matrix):
    if matrix.shape == (2,2):
        return determinant2x2(matrix)
    sum,i = 0,0
    for j in range(matrix.shape[1]):
        sign = ((-1) ** (i+j))
        elem = matrix[i,j]
        det = determinant(minor_matrix(matrix,i,j))
        sum += sign * elem * det
    return sum

A = np.mat([
    [1, 1, 2],
    [1, 3, 4],
    [1, 1, 1]])

print(f"A:\n{A}")
print(f"det(A): {round(determinant(A))}")
A:
[[1 1 2]
 [1 3 4]
 [1 1 1]]
det(A): -2

4.1.3 性质

行列交换:交换矩阵的两行(或两列),行列式的符号会改变。

行列倍加:矩阵的一行(或一列)乘以一个常数 ( k ),行列式也乘以 ( k )。

行列相加:矩阵的一行(或一列)加上另一行(或一列)的倍数,行列式不变。

对角矩阵:对角矩阵的行列式等于对角线上所有元素的乘积。

三角矩阵:上三角矩阵或下三角矩阵的行列式等于对角线上所有元素的乘积。

单位矩阵:单位矩阵的行列式为1。

行列式的乘法性质:对于两个 $n \times n$ 矩阵 $A$ 和 $B$,有 $\text{det}(AB) = \text{det}(A) \cdot \text{det}(B)$。

4.1.4 应用

行列式有许多重要的数学和物理意义,其中包括:

线性变换的缩放因子 :在几何上,一个矩阵可以表示一个线性变换,该变换可以是旋转、缩放、倾斜等。行列式的绝对值表示这个线性变换改变空间体积的比例。如果行列式为正,表示保持了空间的定向(如旋转),如果为负,则表示反转了空间的定向(如镜像);

矩阵是否可逆 :如果一个方阵的行列式不为零,则该矩阵是可逆的,也就是说存在一个逆矩阵。如果行列式为零,则矩阵不可逆,称为奇异矩阵;

解线性方程组 :在使用克莱姆法则解线性方程组时,行列式扮演着关键角色。如果方程组的系数矩阵的行列式不为零,则该方程组有唯一解;

特征值问题 :行列式用于求解矩阵的特征值,特征值是矩阵 $A$ 的行列式 $\text{det}(A - \lambda I) = 0$ 的解。

4.2 余子矩阵(Minor Matrix)

4.2.1 定义

给定一个 n 阶方阵 $A_n$ ,删除矩阵 A 中第 i 行和第 j 列后剩下的矩阵称为 A 的 (i, j) 元素的余子矩阵,记作 ($M_{ij}$)。

4.2.2 计算方法

步骤:

  1. 选择矩阵 $A$ 的一个元素 $a_{ij}$。
  2. 删除该元素所在的第 $i$ 行和第 $j$ 列。
  3. 剩下的矩阵即为 $a_{ij}$ 的余子矩阵 $M_{ij}$。
import numpy as np

def minor_matrix(matrix, i, j):
    # 删除第i行和第j列
    minor = np.delete(np.delete(matrix, i, axis=0), j, axis=1)
    return minor

A = np.mat([
    [1, 1, 2],
    [1, 3, 4],
    [1, 1, 1]])

i,j = 1,1
print(f"A:\n{A}\n")
print(f"其元素({i+1},{j+1})的余子矩阵:\n{minor_matrix(A,i,j)}")
A:
[[1 1 2]
 [1 3 4]
 [1 1 1]]

其元素(2,2)的余子矩阵:
[[1 2]
 [1 1]]

4.2.3 代数余子式(Cofactor)

代数余子式在计算 矩阵的逆 以及 行列式 时非常重要,与余子矩阵 ($M_{ij}$) 相对应的代数余子式定义为:

$$C_{ij} = (-1)^{i+j} \text{det}(M_{ij})$$

  • $\text{det}(M_{ij})$ 是余子矩阵的行列式。
import numpy as np

def cofactor(matrix, i, j):
    # 删除第i行和第j列
    minor = minor_matrix(matrix,i,j)
    # 计算余子式的行列式
    minor_det = determinant(minor)
    # 应用符号
    sign = (-1) ** (i + j)
    return sign * minor_det

# 示例矩阵
A = np.mat([
    [1, 1, 2],
    [1, 3, 4],
    [1, 1, 1]])

# 计算矩阵中元素(i,j)的代数余子式
i, j = 1, 1
print(f"矩阵:\n{A}\n")
print(f"元素({i+1},{j+1})的代数余子式: {cofactor(A, i, j)}")
矩阵:
[[1 1 2]
 [1 3 4]
 [1 1 1]]

元素(2,2)的代数余子式: -1

4.2.4 性质

性质1:如果矩阵 $A$ 是一个 $n \times n$ 的方阵,那么它的每个余子矩阵 $M_{ij}$ 是一个 $(n-1) \times (n-1)$ 的方阵。

性质2:余子矩阵用于计算行列式的展开式(Laplace 展开),即行列式可以通过其余子矩阵的行列式来表示。

4.2.5 应用

行列式的计算
通过 余子矩阵代数余子式,可以递归地计算高阶矩阵的行列式,通过其任一行(或列)的元素及其对应的余子矩阵的行列式的乘积之和来计算。

$$\text{det}(A) = \sum_{j=1}^{n} (-1)^{i+j} a_{ij} \text{det}(M_{ij})$$

  • $a_{ij}$ 是矩阵 A 的 (i,j) 元素;
  • $M_{ij}$ 是矩阵 A 的 (i,j) 元素的余子矩阵;
  • $\text{det}(M_{ij})$ 是余子矩阵 $M_{ij}$ 的行列式;

矩阵的逆
通过伴随矩阵和行列式,可以计算矩阵的逆。对于 n 阶方阵 $A_n$ (其行列式不为0),其 逆矩阵 可以通过其 代数余子式矩阵(也称 伴随矩阵 )除以 $A_n$ 的行列式来计算,即:

$$A^{-1} = \frac{1}{\text{det}(A)} \text{adj}(A)$$

  • $\text{adj}(A)$ 是 A 的 伴随矩阵 ,即由 A 的所有 代数余子式 组成的矩阵的 转置

线性方程组
在求解线性方程组时,余子矩阵和伴随矩阵也起到重要作用。

4.3 伴随矩阵(Adjoint Matrix)

4.3.1 定义

伴随矩阵(Adjoint matrix) 在数学中(特别是线性代数中)是与给定的方阵相关的另一个方阵。
对于任何一个 n 阶方阵 $A_n$ (其行列式不为0),其 伴随矩阵 是通过取原矩阵的每个元素的 代数余子式(Cofactor) 并将其 转置(Transpose) 得到的,记作 $\text{adj}(A)$。

4.3.2 计算方法

计算伴随矩阵的步骤如下:

  1. 计算代数余子式:对于矩阵 $A$ 的每个元素 $a_{ij}$,计算其代数余子式 $C_{ij}$,即 $A$ 删除第 $i$ 行和第 $j$ 列后得到的子矩阵的行列式,再乘以 $(-1)^{i+j}$。
  2. 构造余子式矩阵:将所有代数余子式 $C_{ij}$ 组成一个矩阵,这个矩阵称为余子式矩阵(Cofactor Matrix)。
  3. 转置:将余子式矩阵转置,得到伴随矩阵 $\text{adj}(A)$。
def adjoint_matrix(matrix):
    # 计算矩阵的行列式
    matrix_det = determinant(matrix)
    # 如果行列式为0,矩阵不可逆,伴随矩阵不存在
    if matrix_det == 0:
        raise ValueError("Matrix is singular and cannot have an adjoint.")
    # 取原矩阵的每个元素的代数余子式
    adj_matrix = np.mat([
        [cofactor(matrix,0,0),cofactor(matrix,0,1),cofactor(matrix,0,2)],
        [cofactor(matrix,1,0),cofactor(matrix,1,1),cofactor(matrix,1,2)],
        [cofactor(matrix,2,0),cofactor(matrix,2,1),cofactor(matrix,2,2)]])
    # 将其转置
    adj_matrix = np.transpose(adj_matrix)
    return adj_matrix

# 示例矩阵
A = np.mat([
    [1, 1, 2],
    [1, 3, 4],
    [1, 1, 1]])

# 计算伴随矩阵
adjA = adjoint_matrix(A)
print(f"矩阵 A:\n{A}\n")
print(f"矩阵A的伴随矩阵 adj(A):\n{adjA}")
矩阵 A:
[[1 1 2]
 [1 3 4]
 [1 1 1]]

矩阵A的伴随矩阵 adj(A):
[[-1  1 -2]
 [ 3 -1 -2]
 [-2  0  2]]

4.3.3 性质

性质1:如果矩阵 ( A ) 是可逆的,那么 ( A ) 的逆矩阵可以表示为:

$$A^{-1} = \frac{1}{\det(A)} \text{adj}(A)$$

  • 其中 $\det(A)$ 是矩阵 $A$ 的行列式

性质2:对于两个 $n \times n$ 矩阵 $A$ 和 $B$,其行列式的乘积有如下关系:

$$\text{adj}(AB) = \text{adj}(B) \text{adj}(A)$$

性质3:矩阵 A 与 伴随矩阵 的乘积等于 A 的行列式乘以单位矩阵,即:

$$A \times \text{adj}(A) = \text{adj}(A) \times A = \det(A) \times I$$

# 矩阵 A 与 伴随矩阵 的乘积 等于 A 的行列式乘以单位矩阵
print(f"A * adj(A):\n{np.round(A @ adjA)}\n")
print(f"adj(A) * A:\n{np.round(adjA @ A)}\n")
print(f"det(A) * I:\n{np.round(determinant(A) * np.eye(3))}")
A * adj(A):
[[-2  0  0]
 [ 0 -2  0]
 [ 0  0 -2]]

adj(A) * A:
[[-2  0  0]
 [ 0 -2  0]
 [ 0  0 -2]]

det(A) * I:
[[-2. -0. -0.]
 [-0. -2. -0.]
 [-0. -0. -2.]]

性质4:如果 $A$ 是对角矩阵,那么 $\text{adj}(A)$ 也是对角矩阵,其对角元素是 $A$ 对角元素的代数余子式。

4.4 逆矩阵(Inverse Matrix)

4.4.1 定义

对于一个 n 阶矩阵 A,若存在一个 n 阶矩阵 B,使得 $AB=BA=I_n$ ,则称 BA逆矩阵,记为 $A^{-1}$ ;

4.4.2 计算方法

4.4.2.1 伴随矩阵法

对于 $( n \times n )$ 矩阵 ( A ),其逆矩阵可以通过伴随矩阵 $( \text{adj}(A) )$ 和行列式 $( \det(A) )$ 计算:

$$A^{-1} = \frac{1}{\det(A)} \text{adj}(A)$$

def inverse_matrix(matrix):
    # 计算矩阵的行列式
    matrix_det = determinant(matrix)
    # 如果行列式为0,矩阵不可逆,伴随矩阵不存在
    if matrix_det == 0:
        raise ValueError("Matrix is singular and cannot have an adjoint.")
    inv_matrix = (1 / determinant(matrix)) * adjoint_matrix(matrix)
    return inv_matrix
    
# 计算逆矩阵
invA = inverse_matrix(A)
print(f"矩阵A的逆矩阵 inv(A):\n{invA}\n")
print(f"inv(A) * A = I:\n{np.round(invA @ A)}")
矩阵A的逆矩阵 inv(A):
[[ 0.5 -0.5  1. ]
 [-1.5  0.5  1. ]
 [ 1.  -0.  -1. ]]

inv(A) * A = I:
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
4.4.2.2 高斯-约当消去法

通过将矩阵 ( A ) 转化为单位矩阵,同时对单位矩阵进行相同的行变换,最终得到 $( A^{-1} )$

import numpy as np

def gauss_jordan_inverse(matrix):
    # 获取矩阵的行数和列数
    rows, cols = matrix.shape
    # 创建增广矩阵 [matrix | I]
    augmented_matrix = np.hstack((matrix, np.eye(rows)))
    # 遍历每一列
    for i in range(rows):
        # 寻找主元
        max_row = i + np.argmax(np.abs(augmented_matrix[i:, i]))
        # 交换当前行和具有最大主元的行
        augmented_matrix[[i, max_row]] = augmented_matrix[[max_row, i]]
        # 归一化主元行
        augmented_matrix[i] = augmented_matrix[i] / augmented_matrix[i, i]
        # 消去其他行的当前列
        for j in range(rows):
            if j != i:
                augmented_matrix[j] = augmented_matrix[j] - augmented_matrix[j, i] * augmented_matrix[i]
    # 提取逆矩阵
    inverse_matrix = augmented_matrix[:, cols:]
    return inverse_matrix

# 示例矩阵
A = np.mat([
    [1, 1, 2],
    [1, 3, 4],
    [1, 1, 1]],
    dtype=float)

invA = gauss_jordan_inverse(A)
print(f"矩阵A:\n{A}\n")
print(f"矩阵A的逆矩阵 inv(A):\n{invA}")
矩阵A:
[[1. 1. 2.]
 [1. 3. 4.]
 [1. 1. 1.]]

矩阵A的逆矩阵 inv(A):
[[ 0.5 -0.5  1. ]
 [-1.5  0.5  1. ]
 [ 1.  -0.  -1. ]]
4.4.2.3 LU 分解法

将矩阵 $A$ 分解为 $LU$ 形式,然后通过解两个三角方程组求解 $ A^{-1} $

import numpy as np
from scipy.linalg import lu, inv

def lu_inverse(matrix):
    # Perform LU decomposition
    P, L, U = lu(matrix)
    # Calculate the inverse of L and U
    L_inv = np.linalg.inv(L)
    U_inv = np.linalg.inv(U)
    # The inverse of the original matrix is U_inv * L_inv
    inverse_matrix = U_inv @ L_inv
    return inverse_matrix

# 示例矩阵
A = np.mat([
    [1, 1, 2],
    [1, 3, 4],
    [1, 1, 1]],
    dtype=float)

invA = lu_inverse(A)
print(f"矩阵A:\n{A}\n")
print(f"矩阵A的逆矩阵 inv(A):\n{invA}")
矩阵A:
[[1. 1. 2.]
 [1. 3. 4.]
 [1. 1. 1.]]

矩阵A的逆矩阵 inv(A):
[[ 0.5 -0.5  1. ]
 [-1.5  0.5  1. ]
 [ 1.   0.  -1. ]]

4.4.3 性质

唯一性:如果矩阵 $A$ 存在逆矩阵,则逆矩阵是唯一的;

逆矩阵的逆矩阵:$(A^{-1})^{-1} = A$

转置矩阵的逆矩阵:$(A^T)^{-1} = (A^{-1})^T$

矩阵乘积的逆矩阵:$(AB)^{-1} = B^{-1}A^{-1}$

标量乘积的逆矩阵:对于非零标量 ( c ),$(cA)^{-1} = \frac{1}{c}A^{-1}$

$$\mathbf{A_n^{-1}}\mathbf{A_n}=\mathbf{A_n}\mathbf{A_n^{-1}}=\mathbf{I_n}$$ $$\mathbf{A_n^{-1}}=\frac{1}{\left|\mathbf{A_n}\right|} \cdot \text{adj}(A_n)$$

  • $\text{adj}(A_n)$ 为 $A_n$ 的 伴随矩阵
  • $\left|\mathbf{A_n}\right|$ 为 $A_n$ 的 行列式
  • $I_n$ 为 n 阶单位矩阵

相关文章:

矩阵的几何应用-二维变换
相关文章: 矩阵的数学定义关于矩阵的数学定义,包括:矩阵类型、矩阵基本运算、矩阵分解及特殊矩阵运算。Kinknow BlogsBeiJiaan 1 基本概念 在几何应用中,矩阵是一个非常强大的工具,广泛用于各种变换和操作。以下是矩阵在几何应用中的主要知识点: 1.1 点和向量: 在几何中,点和向量可以用矩阵表示。 例如,二维点 (x, y) 可以表示为列向量: $$\begin{bmatrix} x \\ y \end{bmatrix}$$ 1.2 齐次坐标(Homogeneous Coordinate): 使用齐次坐标可以将平移变换表示为矩阵乘法,从而统一各种几何变换的表示形式。 例如,二维点 (x, y) 在齐次坐标中表示为: $$\begin{bmatrix} x \\ y \\ 1 \end{bmatrix}$$ 为什么需要齐次坐标?
矩阵的几何应用-三维变换
waitting 矩阵的几何应用-二维变换相关文章: 矩阵的数学定义关于矩阵的数学定义,包括:矩阵类型、矩阵基本运算、矩阵分解及特殊矩阵运算。Kinknow BlogsBeiJiaan WaittingKinknow BlogsBeiJiaan