第三十 矩阵(Matrix)
矩阵(Matrix)是线性代数的核心概念,是由 $m \times n$ 个数排成的 $m$ 行 $n$ 列的矩形数表。矩阵不仅是描述线性变换的工具,也是解决线性方程组、数据分析、机器学习等问题的基础。
一、矩阵的基本概念
1.1 矩阵的定义
一个 $m \times n$ 矩阵 $A$ 可以表示为:
$$A = \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \ a_{21} & a_{22} & \cdots & a_{2n} \ \vdots & \vdots & \ddots & \vdots \ a_{m1} & a_{m2} & \cdots & a_{mn} \end{pmatrix}$$
其中 $a_{ij}$ 表示第 $i$ 行第 $j$ 列的元素。
1.2 特殊矩阵
| 矩阵类型 | 定义 | 示例 |
|---|---|---|
| 零矩阵 | 所有元素为 0 | $O$ |
| 单位矩阵 | 主对角线为 1,其余为 0 | $I_n$ |
| 对角矩阵 | 非主对角线元素全为 0 | $\text{diag}(d_1, d_2, \ldots, d_n)$ |
| 数量矩阵 | 单位矩阵的常数倍 | $kI$ |
| 上三角矩阵 | 主对角线下方全为 0 | — |
| 下三角矩阵 | 主对角线上方全为 0 | — |
| 对称矩阵 | $A^T = A$ | — |
| 反对称矩阵 | $A^T = -A$ | — |
| 正交矩阵 | $A^T A = I$ | 旋转矩阵 |
use nalgebra as na;
use na::{Matrix2, Matrix3};
fn main() {
// 单位矩阵
let i2 = Matrix2::<f64>::identity();
println!("单位矩阵 I₂:\n{}", i2);
// 对角矩阵
let diag: Matrix3<f64> = Matrix3::from_diagonal(&na::Vector3::new(1.0, 2.0, 3.0));
println!("对角矩阵 diag:\n{}", diag);
// 零矩阵
let zero: Matrix2<f64> = Matrix2::zeros();
println!("零矩阵 zero:\n{}", zero);
}
二、矩阵的基本运算
2.1 矩阵的加法与减法
两个同型矩阵(行数和列数相同)可以相加或相减,对应元素相加减:
$$C[i,j] = A[i,j] + B[i,j]$$
$$C[i,j] = A[i,j] - B[i,j]$$
2.2 矩阵的数乘
矩阵与标量相乘,每个元素都乘以该标量:
$$(kA)[i,j] = k \cdot A[i,j]$$
2.3 矩阵的乘法
矩阵乘法是线性代数中最重要的运算。设 $A$ 是 $m \times n$ 矩阵,$B$ 是 $n \times p$ 矩阵,则 $AB$ 是 $m \times p$ 矩阵:
$$C[i,j] = \sum_{k=1}^{n} A[i,k] \cdot B[k,j]$$
注意: 矩阵乘法不满足交换律,即一般情况下 $AB \neq BA$。
fn matrix_multiply(a: &Vec<Vec<f64>>, b: &Vec<Vec<f64>>) -> Option<Vec<Vec<f64>>> {
let rows_a = a.len();
let cols_a = a[0].len();
let cols_b = b[0].len();
if cols_a != b.len() {
return None;
}
let mut result = vec![vec![0.0; cols_b]; rows_a];
for i in 0..rows_a {
for j in 0..cols_b {
for k in 0..cols_a {
result[i][j] += a[i][k] * b[k][j];
}
}
}
Some(result)
}
fn main() {
let a = vec![vec![1.0, 2.0], vec![3.0, 4.0]];
let b = vec![vec![5.0, 6.0], vec![7.0, 8.0]];
if let Some(c) = matrix_multiply(&a, &b) {
println!("A × B =");
for row in &c {
println!(" {:?}", row);
}
// [19, 22]
// [43, 50]
}
}
2.4 矩阵乘法的性质
| 性质 | 说明 |
|---|---|
| 结合律 | $(AB)C = A(BC)$ |
| 分配律 | $A(B+C) = AB + AC$ |
| 单位元 | $AI = IA = A$ |
| 不满足交换律 | 一般 $AB \neq BA$ |
| 转置性质 | $(AB)^T = B^T A^T$ |
2.5 矩阵的转置
将矩阵的行和列互换:
$$(A^T){ij} = A{ji}$$
转置的性质:
- $(A^T)^T = A$
- $(A + B)^T = A^T + B^T$
- $(kA)^T = kA^T$
- $(AB)^T = B^T A^T$
- $(A^{-1})^T = (A^T)^{-1}$
fn transpose(matrix: &Vec<Vec<f64>>) -> Vec<Vec<f64>> {
let rows = matrix.len();
let cols = matrix[0].len();
let mut result = vec![vec![0.0; rows]; cols];
for i in 0..rows {
for j in 0..cols {
result[j][i] = matrix[i][j];
}
}
result
}
fn main() {
let a = vec![vec![1.0, 2.0, 3.0], vec![4.0, 5.0, 6.0]];
let at = transpose(&a);
println!("A 的转置:");
for row in &at {
println!(" {:?}", row);
}
// [1, 4]
// [2, 5]
// [3, 6]
}
三、方阵的行列式
对于 $n$ 阶方阵 $A$,其行列式具有以下性质:
| 性质 | 公式 |
|---|---|
| 转置不变 | $\det(A^T) = \det(A)$ |
| 数乘矩阵 | $\det(kA) = k^n \det(A)$ |
| 乘积性质 | $\det(AB) = \det(A) \det(B)$ |
| 幂性质 | $\det(A^m) = (\det(A))^m$ |
四、可逆矩阵
4.1 定义
$n$ 阶方阵 $A$,如果存在 $n$ 阶方阵 $P$,使得 $PA = AP = I$,则称 $P$ 为 $A$ 的逆矩阵,记作 $A^{-1} = P$。
方阵可逆的充要条件: 矩阵的行列式不为零($\det(A) \neq 0$)。
当 $\det(A) = 0$ 时,$A$ 称为奇异矩阵(不可逆);否则称为非奇异矩阵(可逆)。
4.2 逆矩阵的计算公式
$$A^{-1} = \frac{1}{|A|} \cdot A^*$$
其中 $A^*$ 是 $A$ 的伴随矩阵。
4.3 逆矩阵的性质
| 性质 | 公式 |
|---|---|
| 唯一性 | 逆矩阵若存在则唯一 |
| 双重逆 | $(A^{-1})^{-1} = A$ |
| 转置的逆 | $(A^{-1})^T = (A^T)^{-1}$ |
| 乘积的逆 | $(AB)^{-1} = B^{-1} A^{-1}$ |
| 数乘的逆 | $(kA)^{-1} = \frac{1}{k} A^{-1}$ |
fn inverse_2x2(a: f64, b: f64, c: f64, d: f64) -> Option<[[f64; 2]; 2]> {
let det = a * d - b * c;
if det == 0.0 {
return None;
}
Some([
[d / det, -b / det],
[-c / det, a / det],
])
}
fn main() {
match inverse_2x2(1.0, 2.0, 3.0, 4.0) {
Some(inv) => {
println!("逆矩阵:");
for row in &inv {
println!(" {:?}", row);
}
}
None => println!("矩阵不可逆"),
}
}
五、伴随矩阵
5.1 定义
伴随矩阵 $A^*$(或 $\text{adj}(A)$)是由 $A$ 的代数余子式矩阵转置而来:
$$(A^*){ij} = C{ji} = (-1)^{i+j} M_{ji}$$
5.2 性质
$$AA^* = A^*A = |A|I$$
六、初等矩阵与初等变换
6.1 三种初等行变换
- 交换两行:$r_i \leftrightarrow r_j$
- 某行乘以非零常数:$r_i \times k$
- 某行的 $k$ 倍加到另一行:$r_i + k r_j$
6.2 初等矩阵
由单位矩阵经过一次初等变换得到的矩阵称为初等矩阵。
定理:
- 用一个初等矩阵左乘 $A$,相当于对 $A$ 进行一次相应的初等行变换
- 用一个初等矩阵右乘 $A$,相当于对 $A$ 进行一次相应的初等列变换
重要推论: 一个矩阵 $A$ 可逆当且仅当它可以表示为一系列初等矩阵的乘积。
七、矩阵的秩
7.1 定义
矩阵的秩(Rank)是矩阵中非零子式的最高阶数,也等于矩阵的行秩(线性无关行的最大个数)或列秩。
7.2 性质
- $0 \le r(A) \le \min(m, n)$
- $r(A) = r(A^T)$
- $r(AB) \le \min(r(A), r(B))$
- 初等变换不改变矩阵的秩
7.3 秩与线性方程组的解
对于 $n$ 元线性方程组 $Ax = b$:
| 条件 | 解的情况 |
|---|---|
| $r(A) < r(A, b)$ | 无解 |
| $r(A) = r(A, b) = n$ | 有唯一解 |
| $r(A) = r(A, b) < n$ | 有无穷多解 |
use nalgebra::Matrix3;
fn main() {
let a = Matrix3::new(
1.0, 2.0, 3.0,
4.0, 5.0, 6.0,
7.0, 8.0, 9.0,
);
println!("矩阵的秩: {}", a.rank(1e-9)); // 2
}
八、特征值与特征向量
8.1 定义
对于 $n$ 阶方阵 $A$,如果存在数 $\lambda$ 和非零向量 $\vec{v}$,使得:
$$A\vec{v} = \lambda\vec{v}$$
则称 $\lambda$ 为 $A$ 的特征值,$\vec{v}$ 为对应的特征向量。
特征值和特征向量描述了线性变换中“方向不变“的量。特征值表示在该方向上的缩放倍数。
8.2 特征值的计算
特征值是特征方程 $|\lambda I - A| = 0$ 的根。
8.3 相似矩阵
若存在可逆矩阵 $P$,使得 $P^{-1}AP = B$,则称 $A$ 与 $B$ 相似。
相似矩阵的性质:
- 秩相同
- 行列式相同
- 特征值相同
- 迹相同
8.4 矩阵的对角化
若 $n$ 阶矩阵 $A$ 有 $n$ 个线性无关的特征向量,则 $A$ 可以对角化:
$$P^{-1}AP = \Lambda = \text{diag}(\lambda_1, \lambda_2, \ldots, \lambda_n)$$
其中 $P$ 的列是 $A$ 的特征向量,$\Lambda$ 是对角矩阵。
use nalgebra::{Matrix2, Vector2};
fn main() {
let a = Matrix2::new(3.0, 1.0, 1.0, 3.0);
// 计算特征值
let eigen = a.symmetric_eigen();
println!("特征值: {:?}", eigen.eigenvalues);
println!("特征向量:\n{}", eigen.eigenvectors);
}
九、正交矩阵与旋转矩阵
9.1 正交矩阵
若方阵 $A$ 满足 $A^T A = I$,则称 $A$ 为正交矩阵。
性质:
- $A^{-1} = A^T$
- 行(列)向量组为单位正交向量组
- $\det(A) = \pm 1$
9.2 旋转矩阵
二维旋转矩阵:
$$R(\theta) = \begin{pmatrix} \cos\theta & -\sin\theta \ \sin\theta & \cos\theta \end{pmatrix}$$
性质:
- 旋转矩阵是正交矩阵
- $\det(R(\theta)) = \cos^2\theta + \sin^2\theta = 1$
use nalgebra::{Rotation2, Vector2};
fn main() {
let v = Vector2::new(1.0, 0.0);
let angle = std::f64::consts::FRAC_PI_4; // 45°
let rotation = Rotation2::new(angle);
let rotated = rotation * v;
println!("原向量: {:?}", v);
println!("旋转 45° 后: {}", rotated);
// (0.7071, 0.7071)
}
三维旋转矩阵:
-
绕 X 轴旋转 θ $$R_x(\theta) = \begin{pmatrix} 1 & 0 & 0 \ 0 & \cos\theta & -\sin\theta \ 0 & \sin\theta & \cos\theta \end{pmatrix}$$
-
绕 Y 轴旋转 θ $$R_y(\theta) = \begin{pmatrix} \cos\theta & 0 & \sin\theta \ 0 & 1 & 0 \ -\sin\theta & 0 & \cos\theta \end{pmatrix}$$
-
绕 Z 轴旋转 θ $$R_z(\theta) = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \ \sin\theta & \cos\theta & 0 \ 0 & 0 & 1 \end{pmatrix}$$
use nalgebra::{Rotation3, Vector3, UnitVector3};
fn main() {
let v = Vector3::new(1.0, 1.0, 1.0);
let angle = std::f64::consts::FRAC_PI_4; // 45°
// 旋转轴:Z轴单位向量
let axis = UnitVector3::new_normalize(Vector3::new(0.0, 0.0, 1.0));
let rotation = Rotation3::from_axis_angle(&axis, angle);
let rotated = rotation * v;
println!("原向量: {:?}", v);
println!("绕Z轴旋转45°后: {:.4?}", rotated);
}
三维旋转 想象一下是向量在旋转(x轴、y轴不动)
十、矩阵分解
矩阵分解是将复杂矩阵分解为更简单矩阵乘积的方法,在数值计算和机器学习中广泛应用。
10.1 LU 分解
将矩阵分解为下三角矩阵 $L$ 和上三角矩阵 $U$ 的乘积:
$$A = LU$$
LU 分解常用于求解线性方程组。
use nalgebra::{Matrix3, Vector3};
fn main() {
let a = Matrix3::new(
5.0, -3.0, -4.0,
4.0, -10.0, 5.0,
2.0, 1.0, -10.0,
);
let b = Vector3::new(10.0, -20.0, -12.0);
// LU 分解求解
let x = a.lu().solve(&b).expect("矩阵奇异");
println!("解 x = {}", x);
println!("验证 A*x = {}", a * x);
}
10.2 QR 分解
将矩阵分解为正交矩阵 $Q$ 和上三角矩阵 $R$ 的乘积:
$$A = QR$$
use nalgebra as na;
fn main() {
let a = na::Matrix3::new(
1.0, 2.0, 3.0,
4.0, 5.0, 6.0,
7.0, 8.0, 10.0,
);
let qr = a.qr();
let q = qr.q();
let r = qr.r();
println!("Q:\n{}", q);
println!("R:\n{}", r);
println!("验证 Q*R:\n{}", &q * &r);
}
10.3 奇异值分解(SVD)
SVD 是线性代数中最重要的矩阵分解之一,可以应用于任意形状的矩阵:
$$A = U\Sigma V^T$$
其中 $U$ 和 $V$ 是正交矩阵,$\Sigma$ 是对角矩阵(对角线元素为奇异值,非负且按降序排列)。
SVD 是 PCA、最小二乘、图像压缩、推荐系统的数学基础。
use nalgebra::Matrix3;
fn main() {
let a = Matrix3::new(
1.0, 2.0, 3.0,
4.0, 5.0, 6.0,
7.0, 8.0, 10.0,
);
let svd = a.svd(true, true);
println!("奇异值: {:?}", svd.singular_values);
}
十一、实对称矩阵与二次型
11.1 实对称矩阵的性质
- 特征值均为实数
- 特征向量可以取为实向量
- 一定可以对角化
- 不同特征值对应的特征向量正交
11.2 二次型
$n$ 元二次型可以表示为:
$$f(x_1, x_2, \ldots, x_n) = \sum_{i=1}^{n} \sum_{j=1}^{n} a_{ij} x_i x_j = \vec{x}^T A \vec{x}$$
其中 $A$ 是实对称矩阵。
11.3 正定矩阵
若对任意非零向量 $\vec{x}$,都有 $\vec{x}^T A \vec{x} > 0$,则称 $A$ 为正定矩阵。
判定条件:
- 所有特征值大于 0
- 所有顺序主子式大于 0
十二、矩阵的等价关系
| 关系 | 定义 | 不变量 |
|---|---|---|
| 等价 | $A \sim B$:存在可逆 $P, Q$ 使 $PAQ = B$ | 秩 |
| 相似 | $A \sim B$:存在可逆 $P$ 使 $P^{-1}AP = B$ | 秩、行列式、特征值、迹 |
| 合同 | $A \simeq B$:存在可逆 $P$ 使 $P^TAP = B$ | 秩、正/负惯性指数 |
| 正交相似 | 存在正交 $Q$ 使 $Q^TAQ = B$ | 秩、行列式、特征值 |
十三、总结
| 概念 | 要点 |
|---|---|
| 矩阵乘法 | $C[i,j] = \sum_k A[i,k]B[k,j]$,不满足交换律 |
| 转置 | $(AB)^T = B^T A^T$ |
| 逆矩阵 | $A^{-1} = A^* / |
| 秩 | 非零子式的最高阶数,初等变换不变 |
| 特征值 | $ |
| 对角化 | $P^{-1}AP = \Lambda$,需 $n$ 个线性无关特征向量 |
| 正交矩阵 | $A^T A = I$,$A^{-1} = A^T$ |
| LU 分解 | $A = LU$,用于解方程组 |
| QR 分解 | $A = QR$,$Q$ 正交,$R$ 上三角 |
| SVD | $A = U\Sigma V^T$,最通用的分解 |
矩阵是描述线性变换的代数工具。理解矩阵的各种运算和分解,是掌握线性代数、机器学习、计算机图形学等领域的基础。
练习建议:
- 实现矩阵乘法、转置、求逆的基本算法
- 用特征值分解判断矩阵是否正定
- 使用 SVD 进行图像压缩实验