Series · Linear Algebra · Chapter 3

矩阵作为线性变换

矩阵不是数字表格 -- 它们是变换空间的机器。本章展示如何将旋转、缩放、剪切、反射和投影视为矩阵,以及为什么矩阵乘法意味着变换的复合。

一切从一句话开始

打开任何一本传统教材,矩阵都会被介绍成"一张排成矩形的数字表格"。你被告知要怎么相加、相乘、求逆,却从来没有人解释为什么乘法规则要写成那样,为什么 $AB$ 一般不等于 $BA$。

本章只想把那个被符号掩盖掉的秘密讲清楚:

矩阵是一个把空间变形的函数。

每一个 $m\times n$ 的矩阵都是一台机器:吃进一个 $n$ 维向量,吐出一个 $m$ 维向量。一旦你看见这一点,那些奇怪的规则就不再奇怪了——它们只是"基向量被搬到哪里去了"的记账方式。

本章我们会:

  • 给出线性变换的定义,并刻画它的几何指纹;
  • 证明"一个矩阵完全由它对基向量的作用决定";
  • 用统一的"前后对照"图,把旋转、缩放、剪切、反射、投影看个遍;
  • 推导出"矩阵乘法 = 变换的复合",从而立刻解释非交换性;
  • 讨论逆矩阵(撤销变换)、核与像,以及矩阵奇异时究竟发生了什么。

前置知识。 第 1 章(向量、加法、数乘)和第 2 章(线性无关、基、张成空间)。


1. 矩阵是一个函数

请你暂时忘记"矩阵是一张数表"。矩阵 $A$ 本质上是一个函数

$$ A: \mathbb{R}^{n} \longrightarrow \mathbb{R}^{m}, \qquad \vec{v} \mapsto A\vec{v}. $$

你给它一个向量,它返回另一个向量。本章接下来要回答的,就是"这种函数能做哪些事"。

复印机类比。 把复印机的缩放旋钮拨到 150%,原稿上每一个点都被映射到距离中心 1.5 倍远的地方。这就是一种特定的变换——均匀缩放。矩阵代表的是一个更丰富的"几何机器园":旋转、剪切、反射、投影,以及它们的任意组合。

什么样的函数才算"线性"?

矩阵不是任意函数,它正好对应那些保持向量加法和数乘的函数。形式化地说,变换 $T$ 是线性的,当且仅当:

$$ T(\vec{u} + \vec{v}) = T(\vec{u}) + T(\vec{v}) \qquad \text{(加法保持)} $$$$ T(c\,\vec{v}) = c\,T(\vec{v}) \qquad \text{(数乘保持)} $$

这两条代数条件有一个非常醒目的几何指纹——只要看整数网格被允许怎么变形,就一目了然。

标准基与单位网格

线性变换可以对上面这张图做任何事情,前提是:

  • 原点不动。 $T(\vec{0}) = \vec{0}$(把 $c=0$ 代入数乘条件即可证)。
  • 直线还是直线。 不能弯曲。
  • 平行线仍然平行,间距仍然均匀。 变形之后还是网格——可能歪了、拉了、甚至被压扁,但每一个格子仍是同形状的平行四边形。

橡皮膜类比。 想象这张图画在一块钉在原点的橡皮膜上。你可以拉它、转它、剪切它、甚至把它压平,但你不能撕、不能折。能做的就是线性变换;做不到的(撕、折)就不是。

不属于线性变换的反例

知道什么不是线性变换同样重要:

  • 平移。 $T(\vec{v}) = \vec{v} + \vec{b}$ 把原点搬走了,违反 $T(\vec{0}) = \vec{0}$。它是仿射变换,不是线性变换。(稍后我们会用齐次坐标"救它一命"。)
  • 弯曲。 任何把直线变成曲线的变换。
  • 平方或分量乘积。 例如 $T(x, y) = (x^{2}, y)$ 或 $T(x, y) = (xy, y)$,违反加法保持性。

2. 关键洞察:列向量就是基向量"的目的地"

下面这句话是整章最重要的一句,请读两遍:

一个矩阵完全由它把基向量送到哪里来决定;矩阵的列恰好就是这些落点。

理由如下。在 $\mathbb{R}^{2}$ 中,标准基是 $\hat{\imath} = (1, 0)$ 与 $\hat{\jmath} = (0, 1)$。任何向量都能分解成:

$$ \vec{v} = \begin{pmatrix} x \\ y \end{pmatrix} = x\,\hat{\imath} + y\,\hat{\jmath}. $$

如果 $T$ 是线性变换,加法和数乘性质强制要求:

$$ T(\vec{v}) = T(x\,\hat{\imath} + y\,\hat{\jmath}) = x\,T(\hat{\imath}) + y\,T(\hat{\jmath}). $$

也就是说,只要知道两个向量 —— $\hat{\imath}$ 落在哪、$\hat{\jmath}$ 落在哪——你就知道整个平面里每一个向量的去处。把这两个落点按列堆起来,就是矩阵:

$$ A = \Big[\;T(\hat{\imath})\;\Big|\;T(\hat{\jmath})\;\Big] = \begin{pmatrix} a & b \\ c & d \end{pmatrix}, $$

而恒等式 $A\vec{v} = x\,T(\hat{\imath}) + y\,T(\hat{\jmath})$ 正是矩阵-向量乘法的定义:

$$ \begin{pmatrix} a & b \\ c & d \end{pmatrix}\begin{pmatrix} x \\ y \end{pmatrix} = x\begin{pmatrix} a \\ c \end{pmatrix} + y\begin{pmatrix} b \\ d \end{pmatrix} = \begin{pmatrix} ax + by \\ cx + dy \end{pmatrix}. $$

这条公式的右边请你当成配方来读:矩阵乘向量就是"把矩阵的各列按 $\vec{v}$ 的分量加权求和"。一旦把这一点内化,你就不再"算"矩阵乘法,而是开始矩阵。

例题

设 $T$ 把 $\hat{\imath} \mapsto (2, 1)$,$\hat{\jmath} \mapsto (-1, 3)$。则

$$ A = \begin{pmatrix} 2 & -1 \\ 1 & 3 \end{pmatrix}, \qquad A\begin{pmatrix} 3 \\ 2 \end{pmatrix} = 3\begin{pmatrix} 2 \\ 1 \end{pmatrix} + 2\begin{pmatrix} -1 \\ 3 \end{pmatrix} = \begin{pmatrix} 4 \\ 9 \end{pmatrix}. $$

不需要背公式——只是"3 份第一列加 2 份第二列"而已。


3. 二维变换图谱

为了建立直觉,下面五种变换我们都用同一种格式来看:左边保留原始的单位网格,右边画出变换后的网格;$\hat{\imath}$ 用蓝色、$\hat{\jmath}$ 用紫色箭头标出,绿色的单位正方形用来观察面积如何变化。

3.1 旋转

让 $\hat{\imath}$ 沿单位圆走一圈:逆时针转 $\theta$ 角后,它落到 $(\cos\theta, \sin\theta)$。同理 $\hat{\jmath}$ 从 $90^{\circ}$ 走到 $90^{\circ} + \theta$,落到 $(-\sin\theta, \cos\theta)$。把它们按列拼起来:

$$ R_{\theta} = \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix}. $$

逆时针旋转 30 度

几个值得记住的特例:

角度矩阵效果
$90^{\circ}$$\begin{pmatrix}0&-1\\1&0\end{pmatrix}$逆时针四分之一圈
$180^{\circ}$$\begin{pmatrix}-1&0\\0&-1\end{pmatrix}$半圈(等于取负)
$-90^{\circ}$$\begin{pmatrix}0&1\\-1&0\end{pmatrix}$顺时针四分之一圈

游戏开发的视角。 2D 游戏里每一次按"左转",玩家朝向向量都被乘上 $R_{\Delta\theta}$。旋转保持长度和角度,所以角色转身时不会被拉变形。

3.2 缩放

要在 $x$ 方向放大 $s_{x}$ 倍、在 $y$ 方向放大 $s_{y}$ 倍,只需要让 $\hat{\imath} \mapsto (s_{x}, 0)$、$\hat{\jmath} \mapsto (0, s_{y})$:

$$ S = \begin{pmatrix} s_{x} & 0 \\ 0 & s_{y} \end{pmatrix}. $$

缩放:x 方向 2 倍,y 方向 1.5 倍

单位正方形变成了 $s_{x} \times s_{y}$ 的矩形,面积放大了 $s_{x}s_{y}$ 倍。这个乘积就是行列式——下一章的主角。

Photoshop 里"调整图像大小"做的事情就是这个:每个像素坐标都被同一个对角矩阵 $S$ 乘了一下。

3.3 剪切

水平剪切让 $\hat{\imath}$ 不动,$\hat{\jmath} \mapsto (k, 1)$——它把单位正方形的"屋顶"横向推:

$$ H = \begin{pmatrix} 1 & k \\ 0 & 1 \end{pmatrix}. $$

水平剪切

变换后 $x$ 坐标变成 $x + ky$:一个点站得越高,被推得越远。斜体字就是最经典的例子——字母底部钉在原地,顶部往右倾倒。风吹高草则是垂直方向的同类变换。

请注意 $\det H = 1$:剪切不会改变面积,尽管形状被扭得很厉害。

3.4 反射

反射就是把某个方向取反,列依然在回答"基向量去哪了":

反射轴矩阵效果
关于 $x$ 轴$\begin{pmatrix}1&0\\0&-1\end{pmatrix}$上下翻转
关于 $y$ 轴$\begin{pmatrix}-1&0\\0&1\end{pmatrix}$左右翻转
关于直线 $y = x$$\begin{pmatrix}0&1\\1&0\end{pmatrix}$$x$、$y$ 互换
关于原点$\begin{pmatrix}-1&0\\0&-1\end{pmatrix}$等价于 $180^{\circ}$ 旋转

反射的行列式为 $-1$:面积没变,但方向反了(右手系变成左手系)。这一负号正是反射区别于旋转的本质特征。

3.5 投影

把整个平面投到 $x$ 轴上,意味着 $\hat{\imath} \mapsto (1, 0)$ 不变,而 $\hat{\jmath} \mapsto (0, 0)$ 被压扁:

$$ P_{x} = \begin{pmatrix} 1 & 0 \\ 0 & 0 \end{pmatrix}. $$

整张二维平面被压成一条一维直线。这正是头顶正午阳光下的"投影成影子"。更一般地,在原点穿过、方向为单位向量 $\vec{u}$ 的直线上投影,对应矩阵 $P = \vec{u}\vec{u}^{\!\top}$。

投影是我们见到的第一种会丢失信息的变换:$(1, 2)$ 和 $(1, 99)$ 都投到 $(1, 0)$。这正是它不可逆的根源——下一节我们会用奇异矩阵把这种"压扁"现象彻底讲清楚。

小结表

变换矩阵行列式是否可逆
旋转 $\theta$$\begin{pmatrix}\cos\theta&-\sin\theta\\\sin\theta&\cos\theta\end{pmatrix}$$+1$
缩放 $(s_{x}, s_{y})$$\operatorname{diag}(s_{x}, s_{y})$$s_{x}s_{y}$当两者都非零时
水平剪切$\begin{pmatrix}1&k\\0&1\end{pmatrix}$$+1$
任意反射多种形式$-1$是(自身就是它的逆)
投影到一条直线秩 1$0$

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

现在我们终于可以解释那条乘法规则。

情景。 先做 $A$,再做 $B$:

$$ \vec{v} \;\xrightarrow{A}\; A\vec{v} \;\xrightarrow{B}\; B(A\vec{v}). $$

我们想要用一个矩阵把这两步合并。无论它长什么样,对任意 $\vec{v}$ 都必须等于 $B(A\vec{v})$。矩阵乘法就是按照这个目标定义出来的,使得这个矩阵恰好是 $BA$:

$$ B(A\vec{v}) \;\equiv\; (BA)\vec{v}. $$

注意:这个等式不是要去证明的定理,而是矩阵乘法的设计规范。那条看起来很奇怪的"行乘列"算法,正是当你具体回答"$\hat{\imath}$ 先经过 $A$、再经过 $B$ 之后跑到了哪"时自然落出来的结果。

从右往左读的口诀。 在 $CBA\vec{v}$ 这样的表达式里,最右边的矩阵最先作用。读法是"先 $A$、再 $B$、最后 $C$"。这跟中文(和英文)从左到右的语序正好相反,是图形学代码里 bug 高发的来源——所以每次写下这种式子都值得在心里默念一遍。

顺序为什么重要:用图说话

取 $A = R_{45^{\circ}}$(逆时针转 45 度)和 $B = \operatorname{diag}(2, 1)$($x$ 方向拉 2 倍)。先 $A$ 后 $B$:

矩阵乘法即变换复合

第三幅图你可以从三个角度去读,三种解读完全一致:

  1. 几何上。 先把单位正方形转 45 度,再把转过的图形横向拉伸。
  2. 代数上。 $BA = \begin{pmatrix}2&0\\0&1\end{pmatrix}\begin{pmatrix}\frac{\sqrt{2}}{2}&-\frac{\sqrt{2}}{2}\\\frac{\sqrt{2}}{2}&\frac{\sqrt{2}}{2}\end{pmatrix} = \begin{pmatrix}\sqrt{2}&-\sqrt{2}\\\frac{\sqrt{2}}{2}&\frac{\sqrt{2}}{2}\end{pmatrix}$。
  3. 从列读。 $BA$ 的第一列等于 $B$ 作用在 $A$ 的第一列上,也就是 $B$ 作用在 $A\hat{\imath}$ 上——也就是 $\hat{\imath}$ 经过两次变换后的最终落点。第二列同理。

把顺序反过来——先 $B$ 后 $A$:

$$ A B = \begin{pmatrix}\frac{\sqrt{2}}{2}&-\frac{\sqrt{2}}{2}\\\frac{\sqrt{2}}{2}&\frac{\sqrt{2}}{2}\end{pmatrix}\begin{pmatrix}2&0\\0&1\end{pmatrix} = \begin{pmatrix}\sqrt{2}&-\frac{\sqrt{2}}{2}\\\sqrt{2}&\frac{\sqrt{2}}{2}\end{pmatrix} \neq BA. $$

几何上:先把正方形拉成宽长方形再旋转,得到的平行四边形和"先转再拉"完全不一样。矩阵乘法不交换,是因为变换的复合本身就不交换。 故事到此结束。

结合律带来的实际收益

矩阵乘法满足结合律:$(AB)C = A(BC)$。这不只是代数上的小性质——它是 3D 图形跑得快的根本原因。

一个典型场景里,每个顶点都要被缩放、旋转、平移:

$$ M = T \cdot R \cdot S. $$

如果你有一百万个顶点,绝对不要先把 $S$ 作用一遍、再把 $R$ 作用一遍、再把 $T$ 作用一遍(那是 300 万次矩阵-向量乘法)。正确做法是先把 $M$ 算出来,然后对每个顶点只做一次 $M\vec{v}$——三倍加速,外加更好的数值条件数。GPU 的整套渲染管线就是围绕这一点设计的。


5. 单位矩阵与逆矩阵:什么也不做,与撤销

单位矩阵

“什么都不做”——把每个向量映射回它自己——对应的矩阵就是单位矩阵

$$ I = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}. $$

几何上,前后两幅网格图完全一样:

恒等变换

它满足 $IA = AI = A$ 对任何 $A$ 都成立——是矩阵世界里"乘以 1"的角色。

逆矩阵

如果 $A$ 代表一个变换,逆矩阵 $A^{-1}$ 就代表撤销它的那个变换:

$$ A^{-1} A \;=\; A A^{-1} \;=\; I. $$

一旦你从几何角度想,下面几个例子都一目了然:

  • $R_{\theta}^{-1} = R_{-\theta}$(往反方向再转回去)。
  • $\operatorname{diag}(s_{x}, s_{y})^{-1} = \operatorname{diag}(1/s_{x}, 1/s_{y})$,前提是两个因子都非零。
  • 反射的逆是它自己——反射两次就回到原位。

什么时候才存在逆?

不是所有变换都能撤销。投影把 $y$ 方向的信息丢掉了,所以任何会丢失维度的变换都没有逆。$(1, 2)$ 与 $(1, 5)$ 都被投到 $(1, 0)$,仅凭 $(1, 0)$ 你无从恢复原来的 $y$。

干净的判据——下一章会正式建立——是:

$A$ 可逆 $\iff$ $A$ 不会把任何方向压扁 $\iff$ $\det(A) \neq 0$。

$2 \times 2$ 逆矩阵公式

对于 $A = \begin{pmatrix} a & b \\ c & d \end{pmatrix}$,若 $\det(A) = ad - bc \neq 0$,则

$$ A^{-1} = \frac{1}{ad - bc}\begin{pmatrix} d & -b \\ -c & a \end{pmatrix}. $$

(把它和 $A$ 乘开,会得到 $I$,建议自己验证一遍。)


6. 奇异矩阵:当平面被压扁

这一节是几何视角真正展现威力的地方。考虑

$$ S = \begin{pmatrix} 1 & 2 \\ 2 & 4 \end{pmatrix}. $$

第二行是第一行的两倍,第二列也是第一列的两倍。代数上 $\det(S) = 1\cdot 4 - 2\cdot 2 = 0$。几何上:

奇异矩阵把平面压成直线

平面上的每一个点都被送到了同一条直线 $y = 2x$ 上——也就是列向量 $(1, 2)$ 张成的那条线。单位正方形被压成一段长度有限、面积为零的线段。右图里的橙色"变换后网格"全部叠在那条线上,因为所有输入都被映射到那条线上去了。

这就是奇异(不可逆)矩阵。现在我们要给两个有趣的子空间起名字。

核:被压成零的方向

矩阵 $A$ 的(或叫零空间)是被它送到零向量的所有向量:

$$ \ker(A) = \{\,\vec{v} : A\vec{v} = \vec{0}\,\}. $$

对上面的 $S$,所有形如 $\vec{v} = t\,(2, -1)$ 的向量都满足 $S\vec{v} = \vec{0}$——这正是图中那条灰色虚线箭头标的"kernel direction"(核方向)。这个核是一条 1 维直线。

直觉:核就是矩阵把哪些方向消灭掉。一个矩阵可逆当且仅当它的核里只有零向量。

像:所有可能的输出

(或值域)是所有可能的输出向量的集合:

$$ \operatorname{Im}(A) = \{\,A\vec{v} : \vec{v} \in \mathbb{R}^{n}\,\}. $$

对 $S$ 来说,像就是直线 $y = 2x$。它也叫列空间,因为它就是矩阵各列张成的子空间。$S$ 的两列分别是 $(1, 2)$ 和 $(2, 4)$,都躺在同一条线上,所以它们只能张成一条直线,而不是整个平面。

秩-零化度定理

核与像永远满足下面这条记账等式:

$$ \dim\ker(A) + \dim\operatorname{Im}(A) = n, $$

其中 $n$ 是输入空间的维数。翻译过来:矩阵每压扁一维(核多一维),输出就少一维(像少一维)。对我们的 $S$:$1 + 1 = 2$。第 5 章讨论线性方程组时会再次见到这条等式。


7. 三维及更高维

一切都能干净地推广。在 $\mathbb{R}^{3}$ 中,线性变换是一个 $3 \times 3$ 矩阵,三列分别是 $\hat{\imath}$、$\hat{\jmath}$、$\hat{k}$ 的落点。

绕 $z$ 轴旋转($z$ 轴不动,$xy$ 平面整体在转):

$$ R_{z}(\theta) = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix}. $$

正交投影到 $xy$ 平面(丢掉 $z$ 分量):

$$ P_{xy} = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{pmatrix}. $$

这就是上一节奇异矩阵在更高维的版本:它把三维空间压成二维平面,所以 $\det = 0$,不可逆。


8. Python 可视化

本章的所有图都由脚本 scripts/figures/linear-algebra/03-matrices-as-linear-transformations.py 生成。下面这个最小例子展示它背后的核心思路——画出矩阵对单位正方形的作用:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import numpy as np
import matplotlib.pyplot as plt

def plot_transform(A, title="变换"):
    """可视化矩阵 A 对单位正方形的作用。"""
    square = np.array([[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]).T  # 2 x 5
    transformed = A @ square                                       # 关键一行

    fig, axes = plt.subplots(1, 2, figsize=(10, 5))
    for ax, shape, label, color in [
        (axes[0], square,      "变换前",                          "#2563eb"),
        (axes[1], transformed, f"变换后 (det={np.linalg.det(A):.2f})", "#10b981"),
    ]:
        ax.fill(shape[0], shape[1], alpha=0.3, color=color)
        ax.plot(shape[0], shape[1], color=color, linewidth=2)
        ax.set_xlim(-3, 3); ax.set_ylim(-3, 3)
        ax.set_aspect("equal"); ax.grid(True, alpha=0.3)
        ax.set_title(label)
    plt.suptitle(title); plt.tight_layout(); plt.show()

plot_transform(np.array([[2,   0],   [0,   1.5]]), "缩放")
plot_transform(np.array([[1,   0.5], [0,   1  ]]), "剪切")
plot_transform(np.array([[-1,  0],   [0,   1  ]]), "关于 y 轴反射")
plot_transform(np.array([[1,   2],   [2,   4  ]]), "奇异矩阵:被压成一条直线")

一个微型 2D 游戏变换类

游戏引擎用齐次坐标把缩放、旋转、平移合并成一个矩阵:二维点 $(x, y)$ 被存成 $(x, y, 1)$,于是单个 $3 \times 3$ 矩阵就能同时处理平移:

 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
import numpy as np

class Transform2D:
    """把缩放、旋转、平移合成为一个 3x3 矩阵。"""

    def __init__(self):
        self.position = np.array([0.0, 0.0])
        self.rotation = 0.0           # 弧度
        self.scale    = np.array([1.0, 1.0])

    def matrix(self) -> np.ndarray:
        c, s = np.cos(self.rotation), np.sin(self.rotation)
        S = np.diag([self.scale[0], self.scale[1], 1.0])
        R = np.array([[c, -s, 0],
                      [s,  c, 0],
                      [0,  0, 1]])
        T = np.array([[1, 0, self.position[0]],
                      [0, 1, self.position[1]],
                      [0, 0, 1]])
        # 从右往左读:先缩放,再旋转,最后平移。
        return T @ R @ S

    def apply(self, points: np.ndarray) -> np.ndarray:
        pts = np.asarray(points)
        homo = np.ones((3, len(pts)))
        homo[:2, :] = pts.T
        return (self.matrix() @ homo)[:2, :].T

t = Transform2D()
t.position = np.array([100.0, 50.0])
t.rotation = np.pi / 4               # 45 度
t.scale    = np.array([2.0, 1.5])
print(t.apply([[-1, -1], [1, -1], [1, 1], [-1, 1]]))

这就是 Unity、Unreal、Godot 以及任何 3D 引擎都在用的"TRS"模式(Translate × Rotate × Scale)。


常见问题

平移是线性变换吗?

不是——它把原点搬走了,违反 $T(\vec{0}) = \vec{0}$。为了在矩阵里也能表达平移,计算机图形学引入了齐次坐标:把二维点 $(x, y)$ 存成三维向量 $(x, y, 1)$,然后用一个 $3 \times 3$ 矩阵把 $t_{x}$、$t_{y}$ 加到前两个坐标上。平移在 $\mathbb{R}^{2}$ 里不线性,但在 $\mathbb{R}^{3}$ 里、当我们只关心平面 $z = 1$ 时,它就是线性的了。

矩阵乘法为什么定义得这么古怪?

因为它的规则是为了让"矩阵乘积 = 变换复合"成立而反推出来的。从 $(BA)\vec{v} = B(A\vec{v})$ 这条要求出发,把每一个分量算清楚,“行乘列"那条算法就自动出来了。它不是任意的,是被几何出来的。

旋转矩阵为什么这么特殊?

它保持长度和角度。代数上,$R^{\!\top} R = I$(正交),且 $\det R = +1$(保持方向,不翻转)。这两条性质合起来定义了特殊正交群 $\mathrm{SO}(2)$,它是你看到过的所有"丝滑旋转动画"背后的数学对象。

怎么一眼看出一个矩阵是旋转、缩放、剪切还是投影?

看行列式和列向量:

  • $\det = +1$ 且各列正交单位长 $\Rightarrow$ 旋转;
  • $\det = -1$ 且各列正交单位长 $\Rightarrow$ 反射;
  • 各列与坐标轴平行 $\Rightarrow$ 沿轴向缩放;
  • $\det = 0$ $\Rightarrow$ 奇异,压扁了某个方向,没有逆;
  • 其他情况大概率是剪切、沿非轴向的一般缩放,或者它们的组合。

本章总结

需要刻进脑海的一句话:

矩阵是线性变换;它的列告诉你基向量去了哪里。

剩下的一切都是顺着这条主线推导出来的:

  • 矩阵乘向量 = 把矩阵的列按 $\vec{v}$ 的分量加权求和;
  • 矩阵乘矩阵 = 变换复合(从右往左读);
  • 非交换性来源于"先转再拉"和"先拉再转"几何上本来就不一样;
  • 单位矩阵什么也不做,逆矩阵把搭档做的事全部撤销;
  • 当且仅当矩阵把某个方向压扁时它奇异($\det = 0$):被压扁的方向叫核,幸存下来的方向叫像(也就是列空间)。

为了便于直观,我们一直在二维里讨论。下一章我们会把"变换让空间膨胀或收缩了多少"这件事量化——也就是行列式——并最终看清为什么 $\det(AB) = \det(A)\det(B)$。


下一章预告

第 4 章:行列式的秘密。 行列式是一个数字,它衡量一个变换对体积的缩放因子。我们会看到它为什么对复合相乘、为什么符号反转代表方向反转,以及为什么 $\det = 0$ 恰恰对应我们刚刚见到的奇异情形。


系列导航

Liked this piece?

Follow on GitHub for the next one — usually one a week.

GitHub