2.1 线性映射的直觉
《线性代数的本质》最精彩的洞察之一是:矩阵是线性映射的紧凑表示。理解线性映射,比理解矩阵更重要。
一个映射 T: V → W 是线性的,如果满足:
- T(u + v) = T(u) + T(v) (保持加法)
- T(av) = aT(v) (保持数乘)
直觉
线性映射把直线映射为直线(或点),保持原点不动。网格线保持平行且等距分布。这是"线性"一词的几何来源。
图 2-1:线性映射保持网格平行性
示例:微分算子
微分 d/dx 是一个线性映射:d/dx(f + g) = df/dx + dg/dx,d/dx(af) = a(df/dx)。它将多项式空间 Pₙ 映射到 Pₙ₋₁。这是线性代数超越"箭头"的绝佳例证。
线性映射的核心性质
线性映射完全由它在基上的作用决定。如果我们知道 T 将基向量映射到哪里,就知道了 T 的一切。这是矩阵表示的理论基础。
T(v) = T(∑ cᵢvᵢ) = ∑ cᵢT(vᵢ)
2.2 矩阵表示
选定基之后,每个线性映射对应唯一的矩阵。《Linear Algebra Done Right》将矩阵推迟到第3章,正是因为 矩阵只是映射的"坐标化"表示。
给定基 {v₁, ..., vₙ},映射 T 的矩阵第 j 列就是 T(vⱼ) 在该基下的坐标。
示例:旋转矩阵
二维平面中逆时针旋转 θ 角的线性映射,在标准基下的矩阵为:
R(θ) = [[cos θ, -sin θ], [sin θ, cos θ]]
验证:R(θ)e₁ = (cos θ, sin θ)ᵀ,正是 e₁ 旋转后的位置。
theta = pi/6;
R = [cos(theta) -sin(theta); sin(theta) cos(theta)];
v = [1; 0];
Rv = R * v;
RTR = R' * R;
theta_grid = linspace(0, 2*pi, 100);
circle = [cos(theta_grid); sin(theta_grid)];
rotated = R * circle;
plot(circle(1,:), circle(2,:), 'b--'); hold on;
plot(rotated(1,:), rotated(2,:), 'r');
axis equal; legend('原圆','旋转30°');
基变换与相似矩阵
同一个线性映射在不同基下的矩阵是相似的:A' = P⁻¹AP。相似矩阵代表同一个映射,只是"观察角度"不同。
核心洞察
寻找"好"的基,使得矩阵尽可能简单(对角、上三角等),是线性代数的核心主题之一。
2.3 矩阵乘法
矩阵乘法 AB 的直觉是:先做 B 映射,再做 A 映射。因此 AB 的列是 A 对 B 各列的映射结果。
矩阵乘法不满足交换律(AB ≠ BA),这对应于"先旋转再拉伸"与"先拉伸再旋转"通常得到不同结果。
示例:复合变换
先旋转 90°,再沿 x 轴拉伸 2 倍:
A = [[2, 0], [0, 1]], B = [[0, -1], [1, 0]]
AB = [[0, -2], [1, 0]] ≠ BA = [[0, -1], [2, 0]]
逆矩阵
若矩阵 A 可逆,则 A⁻¹ 是"撤销"A 变换的映射。A 可逆当且仅当 det(A) ≠ 0,即变换不"压扁"空间。
A⁻¹A = AA⁻¹ = I
2.4 综合例题
第一步:验证加法保持性
设 u = (u₁, u₂),v = (v₁, v₂)
T(u+v) = T(u₁+v₁, u₂+v₂) = (2(u₁+v₁)-(u₂+v₂), (u₁+v₁)+3(u₂+v₂))
= (2u₁+2v₁-u₂-v₂, u₁+v₁+3u₂+3v₂)
第二步:计算 T(u)+T(v) 并比较
T(u) + T(v) = (2u₁-u₂, u₁+3u₂) + (2v₁-v₂, v₁+3v₂)
= (2u₁-u₂+2v₁-v₂, u₁+3u₂+v₁+3v₂)
= (2(u₁+v₁)-(u₂+v₂), (u₁+v₁)+3(u₂+v₂))
与 T(u+v) 相等 ✓
第三步:验证数乘保持性
T(cu) = T(cu₁, cu₂) = (2cu₁-cu₂, cu₁+3cu₂) = c(2u₁-u₂, u₁+3u₂) = cT(u) ✓
第四步:求矩阵表示
T(e₁) = T(1, 0) = (2×1-0, 1+3×0) = (2, 1)
T(e₂) = T(0, 1) = (2×0-1, 0+3×1) = (-1, 3)
以 T(e₁)、T(e₂) 为列构成矩阵
T 是线性映射,其矩阵表示为 A = [[2, -1], [1, 3]]
第一步:计算行列式
det(A) = 1×4 - 2×3 = 4 - 6 = -2 ≠ 0,因此 A 可逆
第二步:利用伴随矩阵公式求逆
A⁻¹ = (1/det(A)) · adj(A)
交换对角线元素并取负非对角线元素:[[4, -2], [-3, 1]]
A⁻¹ = (1/-2) · [[4, -2], [-3, 1]] = [[-2, 1], [3/2, -1/2]]
第三步:验证
AA⁻¹ = [[1,2],[3,4]] · [[-2,1],[3/2,-1/2]]
= [[1×(-2)+2×(3/2), 1×1+2×(-1/2)], [3×(-2)+4×(3/2), 3×1+4×(-1/2)]]
= [[-2+3, 1-1], [-6+6, 3-2]] = [[1,0],[0,1]] ✓
A⁻¹ = [[-2, 1], [3/2, -1/2]]
第一步:计算 AB
AB = [[1,0],[2,1]] · [[0,1],[1,0]]
= [[1×0+0×1, 1×1+0×0], [2×0+1×1, 2×1+1×0]]
= [[0, 1], [1, 2]]
第二步:计算 BA
BA = [[0,1],[1,0]] · [[1,0],[2,1]]
= [[0×1+1×2, 0×0+1×1], [1×1+0×2, 1×0+0×1]]
= [[2, 1], [1, 0]]
第三步:比较 AB 与 BA
AB = [[0,1],[1,2]],BA = [[2,1],[1,0]]
AB ≠ BA,矩阵乘法不满足交换律
AB = [[0,1],[1,2]],BA = [[2,1],[1,0]],AB ≠ BA(矩阵乘法不满足交换律)
2.5 工程应用:图像变换
在计算机图形学中,每个图像变换都是矩阵乘法。二维图像上的每个点 (x, y) 被矩阵映射到新位置。
工程实例:仿射变换与齐次坐标
平移不是线性映射(不保持原点),但使用齐次坐标 (x, y, 1) 后,平移可以用矩阵表示:
T = [[1, 0, tx], [0, 1, ty], [0, 0, 1]]
这使得旋转、缩放、平移都可以统一为矩阵乘法,GPU 可以高效并行处理。
三维图形管线:模型变换 → 视图变换 → 投影变换,每一步都是 4×4 矩阵乘法。现代 GPU 每秒可以执行数十亿次这样的运算。
I = imread('cameraman.tif');
theta = pi/6; s = 0.8;
T = [s*cos(theta) -s*sin(theta) 0;
s*sin(theta) s*cos(theta) 0;
0 0 1];
tform = affine2d(T);
J = imwarp(I, tform);
imshowpair(I, J, 'montage');
title('原图(左)与变换后(右)');