矩阵与线性变换

矩阵与线性变换

学习目标

完成本节后,你将能够: - 将矩阵理解为线性变换 - 理解矩阵乘法对应变换的复合 - 用列视角解释矩阵乘法 - 理解不可交换性

1. 线性变换——矩阵的本质

### 1.1 什么是线性变换?

定义:映射 \(T: \mathbb{R}^n \to \mathbb{R}^m\) 是线性变换,如果:

\[T(\mathbf{u} + \mathbf{v}) = T(\mathbf{u}) + T(\mathbf{v})\] \[T(c\mathbf{u}) = c T(\mathbf{u})\]

合并:\(T(c\mathbf{u} + \mathbf{v}) = cT(\mathbf{u}) + T(\mathbf{v})\)

几何意义:线性变换保持网格线平行且等距分布。原点映射到原点。直线映射为直线(或点)。

> **直觉 (3Blue1Brown)**:想象你面前有一个无限大的网格。线性变换就是对这个网格的"操作"——拉伸、旋转、剪切、压缩,但网格线保持直线且等距分布。任何弯曲或扭曲都不是线性变换。

### 1.2 矩阵 = 线性变换 + 选择基

关键定理:任何线性变换 \(T: \mathbb{R}^n \to \mathbb{R}^m\) 都可以用矩阵表示。

矩阵 \(A\) 的第 \(j\) 列 = \(T(\mathbf{e}_j)\),即标准基向量 \(\mathbf{e}_j\) 被变换后的位置。

> **直觉 (3Blue1Brown)**:矩阵的列告诉我们每个基向量去哪儿了。因为我们知道变换后基向量的位置,就知道整个空间如何变换——任何向量都可以表示为基向量的线性组合。

# 例:旋转 90 度的变换 def rotate_90(T): return np.array([-T[1], T[0]])

# 矩阵形式:第j列 = T(e_j) e1, e2 = np.array([1, 0]), np.array([0, 1]) A = np.column_stack([rotate_90(e1), rotate_90(e2)]) print("旋转90度的矩阵:") print(A) # [[0, -1], # [1, 0]]

# 验证 v = np.array([1, 2]) print(f"T(v) = {rotate_90(v)}") # [-2, 1] print(f"A @ v = {A @ v}") # [-2, 1] ```

2. 矩阵乘法 = 变换的复合

### 2.1 核心思想

先应用 \(B\) 变换,再应用 \(A\) 变换 = 应用 \(AB\) 变换。

注意顺序:\(AB\) 的意思是先 B 后 A(因为 \(AB\mathbf{x} = A(B\mathbf{x})\))。

### 2.2 不可交换性

\[AB \neq BA\]

几何原因:旋转后剪切 ≠ 剪切后旋转。变换的顺序很重要。

# 旋转90度
R = np.array([[0, -1], [1, 0]])
# 剪切

print("先旋转再剪切:\n", S @ R) print("先剪切再旋转:\n", R @ S) # 结果不同! ```

### 2.3 矩阵乘法的列视角(最重要!)

\[C = AB\]

extbf{C 的第 j 列} = \(A\) 乘以 \(B\) 的第 \(j\) 列。

这为什么重要? 因为它告诉我们:\(AB\) 的列是 \(A\) 对 \(B\) 的列应用变换的结果。也就是说,\(B\) 的每一列都是一个"向量",\(A\) 分别变换这些向量。

> **直觉 (3Blue1Brown)**:矩阵乘法 \(AB\) 的每一列告诉我们:在复合变换中,第 \(j\) 个基向量去哪里了。它先被 \(B\) 变换,然后结果被 \(A\) 变换。

3. 常见的线性变换

### 3.1 缩放 \[\begin{bmatrix} c & 0 \\ 0 & c \end{bmatrix}\] 均匀放大 c 倍。

### 3.2 旋转角度 θ \[\begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}\]

### 3.3 剪切 \[\begin{bmatrix} 1 & k \\ 0 & 1 \end{bmatrix}\] x 坐标保持不变,y 坐标增加 x 的 k 倍。

4. 本节习题

  1. 找出关于 x 轴反射的 2×2 矩阵
  2. 找出将单位正方形变为 \((0,0), (2,1), (1,3), (3,4)\) 的矩阵
  3. 证明:两个线性变换的复合仍是线性变换
  4. 找出一个非零矩阵使得 \(A^2 = \mathbf{0}\)
  5. 用 Python 验证:\((AB)^T = B^T A^T\)

总结

- 矩阵 = 线性变换在选定基下的表示 - 矩阵乘法 = 变换的复合 - 列视角:\(AB\) 的列是 \(A\) 变换 \(B\) 的列的结果 - 矩阵乘法**不可交换**