《Linear Algebra Done Right》学习指南: 面向图形开发的线性代数路线
《Linear Algebra Done Right》学习指南: 面向图形开发的线性代数路线
1. 这本书是什么
《Linear Algebra Done Right》是 Sheldon Axler 编写的一本线性代数教材.
目前最新版本为第 4 版. 官方网站提供免费的英文和中文版 PDF. 第 4 版采用 Creative Commons BY-NC 许可.
这本书并不是一本以”如何计算矩阵”为中心的教材.
它更关注:
向量空间是什么, 线性映射是什么, 以及线性映射本身具有怎样的结构.
作者将这本书定位为通常意义上的第二次线性代数学习. 书本虽然从基础定义开始, 但学习重点是定义、定理和证明, 而不是矩阵计算技巧.
因此, 更适合将其理解为:
从”会使用矩阵”, 进入”理解矩阵背后的线性代数”.
2. 这本书最重要的思想
传统工程学习中, 很容易形成这样的认识:
1
2
3
4
5
6
7
向量
↓
矩阵
↓
矩阵乘法
↓
旋转 / 缩放 / 坐标转换
但从线性代数本身来看, 更合理的结构是:
1
2
3
4
5
6
7
向量空间
↓
线性映射
↓
选择一组基
↓
矩阵
也就是说:
矩阵并不是最基础的对象.
真正的对象是线性映射.
例如:
\[T:V\rightarrow W\]表示一个从向量空间 $V$ 到向量空间 $W$ 的线性映射.
当我们分别给 $V$ 和 $W$ 选择一组基以后, 才可以使用一个矩阵 $M$ 表示这个映射:
\[[T(v)] = M[v]\]因此工程中常见的:
\[p'=Mp\]更准确的理解应该是:
1
2
3
4
5
6
7
8
9
10
11
12
13
空间中的向量 p
↓
线性映射 T
↓
空间中的向量 p'
选择坐标系之后:
p
↓
矩阵 M
↓
p'
矩阵只是线性映射在某组基下的数字表示.
这是阅读这本书时需要始终保持的核心认识.
3. 为什么这种理解对图形学有意义
图形编程中大量问题本质上都属于线性代数.
例如:
1
2
3
4
5
6
7
Object Space
↓
World Space
↓
View Space
↓
Clip Space
表面上看是在不断乘矩阵.
实际上是在不断改变:
1
2
3
4
5
向量所在空间
+
空间之间的映射
+
这些映射在指定基下的矩阵表示
理解这一点以后, 很多以前需要”记住规则”的问题会逐渐变成可以推导的问题.
例如:
- 为什么矩阵乘法有顺序.
- 为什么改变坐标系需要基变换.
- 为什么 Position 和 Direction 的变换不同.
- 为什么 Normal 不能直接使用普通的 Model Matrix 变换.
- 为什么 Normal Matrix 与逆转置矩阵有关.
- 为什么正交矩阵的逆等于转置.
- 为什么旋转可以被理解为保持长度和角度的线性映射.
- 为什么某些矩阵可以对角化.
- 特征向量到底表示什么.
- SVD 为什么可以分析一个变换究竟做了多少旋转和缩放.
这些都不只是”矩阵计算问题”.
4. 本书整体结构
第 4 版主要分为 9 章.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Linear Algebra
│
├── Chapter 1
│ Vector Spaces
│ 向量空间
│
├── Chapter 2
│ Finite-Dimensional Vector Spaces
│ 有限维向量空间
│
├── Chapter 3
│ Linear Maps
│ 线性映射
│
├── Chapter 4
│ Polynomials
│ 多项式
│
├── Chapter 5
│ Eigenvalues and Eigenvectors
│ 特征值与特征向量
│
├── Chapter 6
│ Inner Product Spaces
│ 内积空间
│
├── Chapter 7
│ Operators on Inner Product Spaces
│ 内积空间上的算子
│
├── Chapter 8
│ Operators on Complex Vector Spaces
│ 复向量空间上的算子
│
└── Chapter 9
Multilinear Algebra and Determinants
多重线性代数与行列式
其中第 7 章还包含:
1
2
3
4
5
6
7
8
9
10
11
Spectral Theorem
谱定理
QR Factorization
QR 分解
Cholesky Factorization
Cholesky 分解
Singular Value Decomposition
奇异值分解, SVD
这些内容在数值计算、图形学、几何处理和数据分析中都会出现.
5. 不建议按照工程需求从头机械读到尾
如果目标是数学专业课程, 可以按照原书顺序完整学习.
如果目标主要是图形开发, 更适合按照重要程度划分.
建议分为:
1
2
3
4
A. 核心基础
B. 图形学重要内容
C. 进阶内容
D. 暂时可以跳过
6. 第一阶段: 核心基础
6.1 Vector Space: 向量空间
重点:
1
2
3
4
5
6
7
Vector Space
Subspace
Linear Combination
Span
Linear Independence
Basis
Dimension
即:
1
2
3
4
5
6
7
向量空间
子空间
线性组合
张成
线性无关
基
维数
对应本书:
1
2
Chapter 1
Chapter 2
这是全书最重要的基础.
需要解决一个核心问题:
什么东西才是真正意义上的”向量”?
图形开发中经常把:
1
2
float3
Vector3
直接称为向量.
数学上的”向量”范围要广得多.
例如:
\[(x,y,z)\]可以是向量.
一个多项式:
\[a+bx+cx^2\]也可以被看成向量.
一个函数同样可以属于某个向量空间.
真正重要的不是它是否长得像:
1
(x,y,z)
而是它是否满足向量空间所要求的代数结构.
学习目标
完成这一阶段以后, 应该能够解释:
- 什么是向量空间.
- 什么是子空间.
- 什么是线性组合.
- 什么是张成.
- 什么是线性无关.
- 什么是基.
- 什么是维数.
- 为什么一个向量本身和它的坐标不是同一个东西.
最后一条尤其重要:
1
Vector ≠ Coordinates
坐标只是向量在指定基下的一组数字表示.
7. 第二阶段: Linear Map, 线性映射
对应:
1
Chapter 3
这是整本书的核心章节之一.
需要建立:
1
2
3
4
5
Vector Space
↓
Linear Map
↓
Matrix Representation
而不是:
1
2
3
Matrix
↓
一堆计算规则
7.1 什么是线性映射
一个映射:
\[T:V\rightarrow W\]如果满足:
\[T(u+v)=T(u)+T(v)\]以及:
\[T(\lambda v)=\lambda T(v)\]就是线性映射.
旋转、缩放等大量图形学变换都可以放入这个框架中理解.
7.2 Null Space 与 Range
需要理解:
1
2
3
4
5
6
7
8
9
10
11
Null Space
零空间
Range
值域
Injective
单射
Surjective
满射
它们描述的是一个变换:
1
2
3
丢失了哪些信息?
能够到达哪些位置?
是否可以反向恢复?
这比单纯判断:
1
matrix inverse 是否存在
更接近问题的本质.
7.3 Matrix Representation
本书直到建立线性映射以后才正式讨论矩阵.
应该重点理解:
Matrix represents a linear map with respect to chosen bases.
即:
矩阵表示的是某个线性映射在指定基下的表示.
这是以后理解坐标空间转换的基础.
8. 第三阶段: Change of Basis, 基变换
对应:
1
Chapter 3D
这是图形开发中优先级非常高的内容.
需要理解:
1
2
3
4
5
6
7
Vector
↓
Basis A 下的坐标
↓
Change of Basis
↓
Basis B 下的坐标
图形编程中的:
1
2
3
4
Object Space
World Space
View Space
Tangent Space
都可以从这个角度重新理解.
学习到这里以后, 应重新检查以下工程概念:
1
2
3
4
5
Model Matrix
View Matrix
TBN Matrix
LocalToWorld
WorldToLocal
重点不再是记住:
1
应该乘哪个矩阵.
而是能够回答:
我现在拥有的是哪个空间中的坐标, 我要得到哪个空间中的坐标?
9. 第四阶段: Dual Space, 对偶空间
对应:
1
Chapter 3F
普通工程教材很少认真讲这一部分.
但它对理解 Normal 非常有价值.
Position 和 Direction 可以自然地视为向量.
Normal 更严格地说具有不同的变换性质.
这也是为什么普通向量通常使用:
\[v'=Mv\]而法线经常需要:
\[n'=(M^{-1})^Tn\]即逆转置矩阵.
只记住:
1
Normal 使用 inverse transpose
可以完成工程工作.
理解 Dual Space 以后, 则可以进一步理解:
为什么数学结构本身要求 Normal 具有这种变换方式.
因此对于图形开发, Chapter 3F 并不是无意义的纯理论章节.
10. 第五阶段: Inner Product Space, 内积空间
对应:
1
Chapter 6
这是另一个必须重点学习的章节.
主要包括:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Inner Product
内积
Norm
范数
Orthogonal
正交
Orthonormal Basis
标准正交基
Gram-Schmidt Procedure
Gram-Schmidt 正交化
Orthogonal Complement
正交补
这些概念几乎直接对应图形学中的:
1
2
3
4
5
6
7
dot()
length()
normalize()
projection
orthogonal basis
TBN
camera basis
例如点积并不仅仅是一个 API:
1
dot(a, b)
它来自内积结构.
向量长度:
\[|v|\]也可以由内积定义:
\[|v|=\sqrt{\langle v,v\rangle}\]夹角、投影、正交等概念都由这里统一起来.
11. 第六阶段: Eigenvalue 与 Eigenvector
对应:
1
Chapter 5
即:
1
2
3
4
5
Eigenvalue
特征值
Eigenvector
特征向量
定义可以写成:
\[Tv=\lambda v\]含义是:
经过线性变换 $T$ 以后, 向量 $v$ 的方向没有发生根本改变, 只发生了由 $\lambda$ 描述的缩放.
从几何角度可以理解为:
寻找一个变换自身所具有的特殊方向.
这类思想会出现在:
- 主方向分析.
- 惯性张量.
- 协方差矩阵.
- Principal Component Analysis, 主成分分析, PCA.
- 几何数据分析.
- 变换分解.
- 物理模拟.
对于实时渲染而言不一定每天直接计算特征值, 但理解它对后续谱定理和 SVD 很重要.
12. 第七阶段: Spectral Theorem, 谱定理
对应:
1
Chapter 7B
谱定理解决的是一类非常重要的问题:
什么情况下一个线性算子能够找到一组非常好的正交基, 从而得到简单的表示?
它把之前学习的:
1
2
3
4
Eigenvalue
Eigenvector
Orthogonal Basis
Linear Operator
连接起来.
因此不建议孤立地记忆谱定理.
正确路线应该是:
1
2
3
4
5
6
7
8
9
10
11
向量空间
↓
线性映射
↓
特征向量
↓
内积
↓
正交
↓
谱定理
13. 第八阶段: SVD, 奇异值分解
对应:
1
2
Chapter 7E
Chapter 7F
SVD 全称:
Singular Value Decomposition, 奇异值分解.
本书第 4 版明确包含线性映射和矩阵形式的 SVD, 以及低维近似等后续内容.
它是非常值得掌握的工具.
SVD 可以粗略理解为将一个复杂线性变换拆解为:
1
2
3
4
5
正交变换
↓
沿特殊方向缩放
↓
正交变换
常见形式为:
\[A=U\Sigma V^*\]其中:
1
2
3
4
5
6
7
8
U
正交 / 酉部分
Σ
奇异值
V*
另一个正交 / 酉部分
SVD 的价值不只是”把矩阵分解”.
它实际上是在回答:
这个线性变换到底沿哪些方向进行了多大的拉伸?
因此在:
- 几何处理.
- 最小二乘.
- 降维.
- 数据压缩.
- 低秩近似.
- Numerical Robustness.
- Computer Vision.
- 变换分析.
中都非常重要.
14. 第九阶段: Matrix Factorization
Chapter 7 还包括:
1
2
QR Factorization
Cholesky Factorization
这些内容更偏数值线性代数.
对于纯 Shader 编写优先级不是最高.
但如果继续进入:
1
2
3
4
5
Geometry Processing
Optimization
Simulation
Computer Vision
Numerical Methods
它们会逐渐变得重要.
建议至少知道:
1
2
3
4
它解决什么问题.
输入是什么.
输出是什么.
为什么需要这种分解.
第一次学习不要求熟练手算.
15. 行列式为什么被放到了最后
传统线性代数通常很早介绍:
\[\det(A)\]Axler 则刻意将 Determinant, 即行列式, 放到第 9 章.
这是这本书最著名的特点之一. 官方对本书的介绍也明确指出, 其目标是尽可能通过线性算子的结构建立理论, 将行列式推迟到最后.
这并不意味着行列式没有用.
在图形学中它依然有明显的几何含义.
例如二维:
\[|\det(A)|\]可以描述面积缩放.
三维中可以描述体积缩放.
符号还可以用于判断:
1
2
3
orientation
handedness
reflection
例如:
1
det(M) > 0
和:
1
det(M) < 0
意味着变换的 orientation 存在区别.
因此行列式应该学习.
只是没有必要把它当作整个线性代数的中心.
16. 可以暂时降低优先级的内容
第一次学习时, 以下内容不需要投入同等精力.
Chapter 4: Polynomials
需要理解它为什么会进入线性算子理论.
但不需要一开始大量投入.
Chapter 5B: Minimal Polynomial
即最小多项式.
对理解线性算子的完整理论有价值, 但对于第一轮图形学学习优先级不高.
Chapter 8: Generalized Eigenvectors 与 Jordan Form
包括:
1
2
3
4
5
6
7
8
Generalized Eigenvectors
广义特征向量
Nilpotent Operators
幂零算子
Jordan Form
Jordan 标准形
属于进一步研究线性算子结构的内容.
第一次可以降低优先级.
Chapter 9D: Tensor Products
Tensor Product, 即张量积.
这是非常重要的数学结构, 但第一次建立图形学线性代数基础时无需强行掌握.
以后学习:
1
2
3
4
Tensor
Differential Geometry
Physics
Machine Learning
时再深入更合适.
17. 面向图形开发的推荐学习顺序
不建议简单按照:
1
1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9
平均投入精力.
第一轮建议:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Chapter 1
Vector Spaces
↓
Chapter 2
Basis / Dimension
↓
Chapter 3A ~ 3D
Linear Maps / Matrix / Change of Basis
↓
Chapter 3F
Dual Space
↓
Chapter 6
Inner Product Spaces
↓
Chapter 5
Eigenvalues / Eigenvectors
↓
Chapter 7B
Spectral Theorem
↓
Chapter 7E ~ 7F
SVD
形成的知识结构为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
向量空间
│
├── 子空间
├── 线性组合
├── 线性无关
├── 基
└── 维数
│
↓
线性映射
│
├── 零空间
├── 值域
├── 可逆性
└── 矩阵表示
│
↓
基变换
│
├── 坐标空间
└── 对偶空间
│
↓
内积空间
│
├── 长度
├── 正交
├── 投影
└── 正交基
│
↓
特征值 / 特征向量
│
↓
谱定理
│
↓
SVD
这可以作为第一轮学习的主干.
18. 第一轮学习优先级
可以进一步划分为:
必须理解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Vector Space
Linear Combination
Span
Linear Independence
Basis
Dimension
Linear Map
Matrix Representation
Invertibility
Change of Basis
Inner Product
Norm
Orthogonal
Orthonormal Basis
Eigenvalue
Eigenvector
强烈建议理解
1
2
3
4
5
6
7
Null Space
Range
Dual Space
Orthogonal Complement
Gram-Schmidt
Spectral Theorem
SVD
第二轮再深入
1
2
3
4
5
6
Minimal Polynomial
Quotient Space
Generalized Eigenvector
Jordan Form
Multilinear Form
Tensor Product
19. 不建议使用”看完一章”作为学习完成标准
数学书和普通技术文档不同.
作者在学生序言中也明确提醒, 数学不能像小说一样快速连续阅读, 本书强调对定义、定理和证明的深入理解.
因此学习单位应该从:
1
今天看完 Chapter 2
改成:
1
今天理解 Basis.
或者:
1
今天解决 Change of Basis.
20. 推荐的学习循环
每个概念都采用下面的过程.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1. Definition
定义
2. Geometric Meaning
几何意义
3. Simple Example
简单例子
4. Theorem
相关定理
5. Why
为什么成立
6. Graphics Mapping
与图形学中的概念对应
7. Implementation
用代码验证
例如学习 Basis:
1
2
3
4
5
6
7
8
9
10
11
Basis 的数学定义
↓
二维空间中的几何直觉
↓
为什么坐标必须依赖 Basis
↓
Change of Basis
↓
Object / World / View Space
↓
写一个简单程序验证
这样数学概念不会与工程经验割裂.
21. 学习过程中需要特别避免的问题
21.1 不要把向量和坐标混为一谈
必须区分:
1
Vector
与:
1
Coordinates of Vector
这是后续基变换的基础.
21.2 不要把矩阵当成变换本身
更准确的是:
1
2
3
4
5
Linear Map
↓
在指定基下
↓
Matrix Representation
21.3 不要只记公式
例如:
\[n'=(M^{-1})^Tn\]如果只记住:
1
Normal 要乘 inverse transpose.
那么数学学习并没有真正解决问题.
应该继续追问:
1
2
3
4
为什么 Position 可以正常变换?
为什么 Normal 不可以?
Normal 到底表示什么?
它必须保持什么关系?
21.4 不要求第一次就能独立证明所有定理
证明应该阅读.
但第一轮的目标不是训练成为纯数学专业学生.
更现实的目标是:
1
2
3
4
5
6
7
理解定义
↓
理解定理说了什么
↓
理解证明的大致逻辑
↓
知道它与工程中的什么问题有关
复杂证明可以在第二轮学习时重新处理.
22. 配套视频
作者官方网站提供与第 4 版各章节对应的视频和部分配套幻灯片. 官方说明这些视频主要用于提供直觉、动机和章节辅助理解.
因此遇到难以仅通过文字建立直觉的章节时, 可以采用:
1
2
3
4
5
6
7
先看书中的 Definition
↓
看对应视频
↓
重新阅读 Definition / Theorem
↓
完成几个 Exercise
不建议完全用视频替代教材.
23. 最终学习目标
学习这本书的目标不应该是:
1
会做更多矩阵题.
而应该逐渐完成下面的认识转换.
第一阶段:
1
矩阵就是用来变换向量的.
↓
第二阶段:
1
矩阵表示一个线性变换.
↓
第三阶段:
1
2
线性映射独立于矩阵存在.
矩阵只是它在指定基下的表示.
↓
第四阶段:
1
2
通过选择合适的基,
可以看清线性映射自身的结构.
↓
第五阶段:
1
2
3
4
5
6
7
Eigenvalue
Spectral Theorem
SVD
本质上都在研究:
如何找到合适的方向和表示方式,
使复杂的线性映射变得简单.
这才是《Linear Algebra Done Right》最值得学习的部分.
24. 建议的实际学习计划
第一轮先完成:
1
2
3
4
5
6
7
阶段 1:
Chapter 1 + Chapter 2
目标:
Vector Space
Basis
Dimension
然后:
1
2
3
4
5
6
7
阶段 2:
Chapter 3A ~ 3D
目标:
Linear Map
Matrix Representation
Change of Basis
然后:
1
2
3
4
5
6
7
8
阶段 3:
Chapter 3F + Chapter 6
目标:
Dual Space
Inner Product
Orthogonal
Projection
然后:
1
2
3
4
5
6
7
阶段 4:
Chapter 5
目标:
Eigenvalue
Eigenvector
Diagonalization
最后:
1
2
3
4
5
6
阶段 5:
Chapter 7B + 7E + 7F
目标:
Spectral Theorem
SVD
完成这一轮以后, 再根据实际需要返回:
1
2
3
4
5
Chapter 4
Chapter 5B
Chapter 7D
Chapter 8
Chapter 9
进行第二轮学习.
25. 总结
《Linear Algebra Done Right》不应该被当成一本:
矩阵计算手册.
它真正适合解决的是:
已经接触了大量向量、矩阵和坐标变换以后, 如何建立这些工具背后的统一数学结构.
对于图形开发而言, 最值得建立的核心关系是:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Vector
↓
Vector Space
↓
Basis
↓
Coordinates
Linear Map
↓
Matrix Representation
↓
Change of Basis
Inner Product
↓
Length / Angle / Orthogonal / Projection
Eigenvalue
↓
Spectral Theorem
↓
SVD
学习完成以后, 希望达到的状态不是记住更多公式, 而是面对新的矩阵和空间问题时, 能够判断:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
现在讨论的对象是什么?
它属于哪个空间?
当前坐标基是什么?
这个矩阵表示什么映射?
这个映射是否可逆?
它保持了什么?
它破坏了什么?
是否存在更合适的基来观察它?
当这些问题能够自然出现时, 线性代数才真正开始从”计算工具”变成理解图形问题的基础语言.