跳至主要内容
数学
线性代数 · 从 Ax = b 开始

矩阵的四个基本子空间

这一页从向量出发,把矩阵看成对向量的变换。在矩阵与线性变换页面,矩阵 A 把向量 x 移到新的向量 Ax;所以解 Ax = b,就是在问:哪一个 x 会被送到给定的 b?在行列式页面,行列式为零时,平面会被压到一条直线,或进一步缩成原点。这时有些输出根本得不到,而不同的输入也可能落到同一个位置。这一页要整理的正是这两种情况。

我们先把 Ax = b 看成一个过程:放入向量 x,经过矩阵 A,得到向量 b。如果现在给出 b,是否一定能找到对应的 x?如果能找到,会不会有不止一个?这两个问题会带我们分别观察输出和输入。我们会从具体的向量开始,再给其中的几个集合起名字,而不是一开始就记住四个空间的定义。

回顾:矩阵与线性变换 · 回顾:点积

01我们要求什么?

先回想矩阵线性变换那一页的做法:从向量 x 出发,应用矩阵 A,得到新的向量 b。Ax = b 就是把这个过程写在一行里。这里固定 A,主讲解会一直使用同一个矩阵。

A=(1224),x=(13),Ax=(714)A=\begin{pmatrix}1&2\\2&4\end{pmatrix},\qquad x=\begin{pmatrix}1\\3\end{pmatrix},\qquad Ax=\begin{pmatrix}7\\14\end{pmatrix}

左图中的深色箭头是原来的 x。播放变换,可以跟随它的端点走到 Ax。右图单独记录输出。两图使用相同的坐标尺度;右图的坐标轴叫 b₁ 和 b₂,因为我们在那里读取输出。

看清当前这一步以后,再选择下一步。观察图形时,讲解不会自动向前。

从输入出发

x-20-20-10-1010102020x₁x₂0

读取输出

b = Ax-20-20-10-1010102020b₁b₂0
1
3
0%

动画把起点和终点连接起来,帮助我们看清变化。A 表示给出最终位置的规则,并不是说向量真的沿这条路径运动。

02四个空间叫什么?

同一个矩阵 A 把输入送到输出。在这个过程中会出现四组向量,它们各有一个名字。下表说明每组包含什么向量,并给出它的维数。后面的章节会解释:每一组告诉了我们这个变换的什么信息。

先约定:mm 数矩阵 AA 的行,nn 数它的列,所以输入有 nn 个分量,输出有 mm 个分量。空间的维数,数的是要用几个独立方向才能组合出其中的全部向量:过原点的直线需要一个,平面需要两个。列空间的维数叫矩阵的秩,记为 rr。本例的第二列是第一列的两倍,所以输出都在经过 (1,2)(1,2) 的直线上;这条线上的每个点又能由输入 (t,0)(t,0) 得到。因此 m=n=2m=n=2、r=1r=1。下表先预览四个数量。n−rn-r、m−rm-r 和下方的关系,会在逐个构造空间之后推导,现在不需要把它们当作新规则记住。

四个子空间的名字、定义和维数
名字里面有什么位于维数
Row⁡(A)\operatorname{Row}(A)行空间A 的每一行都是输入空间里的一个向量。这些行的全部线性组合组成行空间。Rn\mathbb R^nrr
Col⁡(A)\operatorname{Col}(A)列空间A 的每一列都是输出空间里的一个向量。这些列的全部线性组合组成列空间,所以它正好是所有能得到的输出。Rm\mathbb R^mrr
Null⁡(A)\operatorname{Null}(A)零空间所有被 A 变成零的输入 x,也就是 Ax = 0 的全部解。Rn\mathbb R^nn−rn-r
Null⁡(AT)\operatorname{Null}(A^{T})左零空间输出这一端的整体空间中,所有被 Aᵀ 变成零的向量 y,也就是 Aᵀy = 0 的全部解。这里的 y 不一定是 A 真正能得到的输出 Ax。把 Aᵀy = 0 两边转置,得到 yᵀA = 0,yᵀ 写在 A 的左边,这就是“左”字的来源。Rm\mathbb R^mm−rm-r

这四个空间和 A 本身有什么关系?A 把行空间里的每个向量都送到列空间里,而且不丢失信息:行空间中不同的向量,输出也不同。A 把零空间里的每个向量送到零。在输出这一端,Aᵀ 把左零空间里的每个向量送到零。

这两对空间还互相垂直。在输入空间里,行空间的每个向量都垂直于零空间的每个向量;在输出空间里,列空间的每个向量都垂直于左零空间的每个向量。下图中的直角符号标出的就是这两对关系。

ℝnℝm输入 · n = 2输出 · m = 2A行空间Row(A)dim = r = 1零空间Null(A)dim = n − r = 1列空间Col(A)dim = r = 1左零空间Null(Aᵀ)dim = m − r = 1Axr = bAx = bAxn = 000xrbxnx = xr + xn几何关系示意 · 直角符号表示子空间正交 · 实际维数请看标签

四个色片分别标出四个子空间:输入这一端是行空间 Row(A) 与零空间 Null(A),输出这一端是列空间 Col(A) 与左零空间 Null(Aᵀ)。这里的形状只是关系示意图;在本例中每个子空间都是一条直线。

03列空间:哪些输出可以得到?

在使用 A 的列之前,先回到普通坐标。向量 (a, b) 就是 a 个 (1, 0) 与 b 个 (0, 1) 相加。这两个基本向量正是单位矩阵 I 的两列,所以乘以 I 后,向量保持不变。

看清当前这一步以后,再选择下一步。观察图形时,讲解不会自动向前。

Ix=1(10)+(1)(01)=(11)Ix=1\begin{pmatrix}1\\0\end{pmatrix}+(1)\begin{pmatrix}0\\1\end{pmatrix}=\begin{pmatrix}1\\1\end{pmatrix}

原来的列向量

e₁e₂-4-4-2-22244b₁b₂0

把各个倍数相加

x₁e₁x₂e₂b-4-4-2-22244b₁b₂0
1
1

一次只改变一个系数。第二根箭头从第一根的末端出发,沿着两根箭头走完就得到它们的和。系数为负数时,对应箭头会反向。

04行空间:哪些向量可以输入?

刚才我们用列来拼出输出。现在把同一个乘法按行读一遍:输出的每一个分量,是一整行与整个输入向量的点积。点积就是把对应分量相乘,再把结果加起来。

Ax=(r1⋅xr2⋅x)=(1x1+2x22x1+4x2)Ax=\begin{pmatrix}r_1\cdot x\\r_2\cdot x\end{pmatrix}=\begin{pmatrix}1x_1+2x_2\\2x_1+4x_2\end{pmatrix}

一个 m 行 n 列的矩阵,每一行有 n 个数。为了让点积有意义,输入也要有 n 个分量。矩阵有 m 行,所以输出有 m 个分量。这给出 A: ℝⁿ → ℝᵐ。ℝⁿ 中的每个向量都可以输入,并不要求输入本身是各行的线性组合。

这些行确实在输入空间里张成了一个子空间,我们把它叫作 Row(A)。在本例中,r₂ = 2r₁,所以行空间是左图中的金色直线。试试 x = (1, 3):它不在这条线上,但乘法仍然得到 (7, 14)。可见,整个输入空间与行空间是两件不同的事。

Row⁡(A)=span⁡{r1,…,rm}⊆Rn\operatorname{Row}(A)=\operatorname{span}\{r_1,\ldots,r_m\}\subseteq\mathbb R^n

输入:整个 ℝ² 中的向量都能用

r₁x-5-5-2.5-2.52.52.555x₁x₂0

输出:两次行点积的结果

Ax-20-20-10-1010102020b₁b₂0
1
3
r1⋅x=1+2(3)=7r_1\cdot x=1+2(3)=7
r2⋅x=2(1)+4(3)=14r_2\cdot x=2(1)+4(3)=14

为了容纳输出,右图使用更大的数值范围。这是两份分开的 ℝ²。此处 Row(A) 与 Col(A) 方向恰好相同,因为这个矩阵是对称的;其他矩阵不一定如此。

接下来要问的是

不同输入可能给出相同的行点积。那么,一个非零输入能不能让每一行的结果都变成零?

05零空间:哪些输入会变成零?

零向量经过 A 当然还是零。但只有零向量才会这样吗?仍然用同一个矩阵,试试 x = (2, −1)。第一行得到 2 − 2 = 0,第二行得到 4 − 4 = 0。我们找到了一个会被 A 变成零的非零输入。

A(2−1)=(2−24−4)=(00)A\begin{pmatrix}2\\-1\end{pmatrix}=\begin{pmatrix}2-2\\4-4\end{pmatrix}=\begin{pmatrix}0\\0\end{pmatrix}

看清当前这一步以后,再选择下一步。观察图形时,讲解不会自动向前。

输入:c(2, −1)

xₙ-6-6-3-33366x₁x₂0

输出:两列的贡献互相抵消

x₁a₁x₂a₂Ax = 0-10-10-5-5551010b₁b₂0
1
xn=(2−1),Axn=(00)x_n=\begin{pmatrix}2\\-1\end{pmatrix},\qquad Ax_n=\begin{pmatrix}0\\0\end{pmatrix}

紫色输入可以沿整条直线移动。右图中,第二项的贡献总是把我们带回原点。

06左零空间:输出这一端又怎样?

把矩阵的列改写成行,就得到它的转置,记作 Aᵀ。如果 A 有 m 行 n 列,那么 Aᵀ 有 n 行 m 列,所以它接受一个有 m 个分量的输入。我们把这个输入叫作 y,避免与原来的 x 混在一起。

A:Rn→Rm,AT:Rm→RnA:\mathbb R^n\to\mathbb R^m,\qquad A^T:\mathbb R^m\to\mathbb R^n

看清当前这一步以后,再选择下一步。观察图形时,讲解不会自动向前。

现在问哪些 y 满足 Aᵀy = 0。这就定义了 Null(Aᵀ),它位于原来 A 的输出空间里。本例恰好有 Aᵀ = A,所以 y = c(2, −1) 再次成立。但这里的 y 属于输出这一份 ℝ²,尽管坐标恰好与前面的零空间向量一样。

Null⁡(AT)={y∈Rm:ATy=0}\operatorname{Null}(A^T)=\{y\in\mathbb R^m:A^Ty=0\}

转置不是把原来的变换撤销,Aᵀ 通常也不是 A⁻¹。这里是构造一个新的矩阵,再对它提出输出为零的问题。

07这些空间怎样组成整体?

现在我们已经有了四组向量。在把它们放进一张图之前,要先解释它们之间的关系。从输入这一端开始:为什么零空间中的每个向量,都与行空间中的每个向量正交?

看清当前这一步以后,再选择下一步。观察图形时,讲解不会自动向前。

任取 Null(A) 中的 xₙ。按照定义,Axₙ = 0。按行读这个乘法,就得到每个 rᵢ · xₙ 都等于零。注意,rᵢ 与整个 xₙ 做点积,不是只与其中一个分量相乘。两个非零向量点积为零,表示它们垂直;零向量也与所有向量正交。

Axn=(r1⋅xn⋮rm⋅xn)=0⟹ri⋅xn=0(1≤i≤m)Ax_n=\begin{pmatrix}r_1\cdot x_n\\\vdots\\r_m\cdot x_n\end{pmatrix}=0\quad\Longrightarrow\quad r_i\cdot x_n=0\quad(1\le i\le m)

行空间中的向量是这些行的线性组合。把这个线性组合与 xₙ 做点积,再展开;每一项都为零,所以整体也为零。这证明的是整个行空间与零空间正交,而不仅是图中画出的几行。

(c1r1+⋯+cmrm)⋅xn=c1(r1⋅xn)+⋯+cm(rm⋅xn)=0(c_1r_1+\cdots+c_mr_m)\cdot x_n=c_1(r_1\cdot x_n)+\cdots+c_m(r_m\cdot x_n)=0

反过来,如果 x 与每一行都正交,那么 Ax 的每个分量都为零,所以 x 属于 Null(A)。因此,Null(A) 恰好由所有垂直于 Row(A) 的向量组成。对 Aᵀ 做同样的推理,就得到输出这一端的对应关系。

Null⁡(A)=Row⁡(A)⊥,Null⁡(AT)=Col⁡(A)⊥\operatorname{Null}(A)=\operatorname{Row}(A)^\perp,\qquad\operatorname{Null}(A^T)=\operatorname{Col}(A)^\perp

上标 ⊥ 表示在同一个输入或输出空间中,所有与所写空间正交的向量组成的集合。

08为什么不同输入得到同一输出?

回到输入 (1, 3),它给出 (7, 14)。我们又已经知道 (2, −1) 给出零。把这两个输入的和乘以 A,会得到什么?利用矩阵乘法对加法的分配律展开,分别写出每一项的结果。

A[(13)+(2−1)]=(714)+(00)=(714)A\left[\begin{pmatrix}1\\3\end{pmatrix}+\begin{pmatrix}2\\-1\end{pmatrix}\right]=\begin{pmatrix}7\\14\end{pmatrix}+\begin{pmatrix}0\\0\end{pmatrix}=\begin{pmatrix}7\\14\end{pmatrix}

新的输入是 (3, 2),输出没有改变。这一步即使 (1, 3) 不属于 Row(A) 也成立。因此,我们先把它叫作一个特解 x₀,而不叫 xᵣ。接下来再找真正位于行空间中的那个解。

看清当前这一步以后,再选择下一步。观察图形时,讲解不会自动向前。

给出同一输出的输入

x₀cxₙx-7-7-3.5-3.53.53.577x₁x₂0

输出始终是 (7, 14)

b = Ax-18-18-9-9991818b₁b₂0
1
x=(13)+1(2−1)=(32)x=\begin{pmatrix}1\\3\end{pmatrix}+1\begin{pmatrix}2\\-1\end{pmatrix}=\begin{pmatrix}3\\2\end{pmatrix}
Ax = (7, 14)

虚线所示的解集与 Null(A) 平行,但这个非零 b 的解集不经过零点,所以解集本身不是向量子空间。右图使用较大的数值范围。

09把四个空间联系起来

把左半边读作输入空间,右半边读作输出空间。金色与紫色分解输入,青色与玫红色分解输出。直角符号标出正交关系。穿过 A 的箭头表示三个结果:xᵣ 到 b,xₙ 到零,而 xᵣ + xₙ 仍到同一个 b。

这是一张关系图,不是把两边放进同一个坐标系。在本例的 2×2 矩阵中,四个子空间都是直线,因此维数都是 1。下面的色片代表子空间,画出来的宽度并不表示它们是二维。播放可以同时跟随三条映射,也可以拖动进度,在任何位置停下。

ℝnℝm输入 · n = 2输出 · m = 2A行空间Row(A)dim = r = 1零空间Null(A)dim = n − r = 1列空间Col(A)dim = r = 1左零空间Null(Aᵀ)dim = m − r = 1Axr = bAx = bAxn = 000xrbxnx = xr + xn几何关系示意 · 直角符号表示子空间正交 · 实际维数请看标签
0%

对于一个 m 行 n 列的实矩阵,把 Col(A) 的维数记作 r,叫作矩阵的秩。下表列出四个空间的维数。在使用这些数量之前,先说明:刚才证明的对应为什么保证维数相同,剩余维数又为什么可以用减法得到。

维数是在数一组基需要多少条向量。基必须同时做到两件事:组合能够到达空间中的每条向量,而且其中任何一条都不能由其他条拼出。第二个条件叫线性无关。等价地,只有所有系数都为零时,组合才能等于零。

为什么经过 A 的对应会保留这个数量?选取 Row⁡(A)\operatorname{Row}(A) 的一组基 u1,…,uku_1,\dots,u_k。每个列空间输出都有行空间输入,所以都可以写成 A(c1u1+⋯+ckuk)A(c_1u_1+\dots+c_ku_k)。线性关系允许把系数移出来,因此 Au1,…,AukAu_1,\dots,Au_k 张成 Col⁡(A)\operatorname{Col}(A)。还需要检查新的方向有没有多余。

c1Au1+⋯+ckAuk=0⟹A(c1u1+⋯+ckuk)=0c_1Au_1+\cdots+c_kAu_k=0\quad\Longrightarrow\quad A(c_1u_1+\cdots+c_ku_k)=0

括号中的向量属于 Row⁡(A)\operatorname{Row}(A)。如果 A 把它送到零,它又属于 Null⁡(A)\operatorname{Null}(A)。前面证明过,这两个垂直空间只有零向量重合,所以括号内的向量就是零。由于 u 原本线性无关,每个 c 都只能为零。因此它们的像也组成一组基,两边同样有 k 条基向量,所以 k 就等于秩 r。

再把 Row⁡(A)\operatorname{Row}(A) 的基与 Null⁡(A)\operatorname{Null}(A) 的基放在一起。由于每个输入都有刚才构造的分解,它们能够到达所有输入。它们还线性无关:若一个行空间组合加一个零空间组合等于零,前者就是后者的相反数,属于两个空间,只能是零。因此两组组合都为零,所有系数也都为零。这组基的总数就是输入维数 n,所以 r+dim⁡Null⁡(A)=nr+\dim\operatorname{Null}(A)=n。对 m 维输出空间重复这一步,就得到另一边的数量。

dim⁡Null⁡(A)=n−r,dim⁡Null⁡(AT)=m−r\dim\operatorname{Null}(A)=n-r,\qquad\dim\operatorname{Null}(A^T)=m-r
四个定义,以及它们所在的整体空间
子空间定义位于维数
Row(A)span⁡{r1,…,rm}\operatorname{span}\{r_1,\ldots,r_m\}Rn\mathbb R^nrr
Null(A){x:Ax=0}\{x:Ax=0\}Rn\mathbb R^nn−rn-r
Col(A)span⁡{a1,…,an}\operatorname{span}\{a_1,\ldots,a_n\}Rm\mathbb R^mrr
Null(Aᵀ){y:ATy=0}\{y:A^Ty=0\}Rm\mathbb R^mm−rm-r
再试一次最初的问题

对于本例的矩阵,b = (3, 6) 能得到吗?(3, 5) 呢?如果能得到,找出一个具体的解,并说明怎样从它写出全部解。

查看完整解答

(3, 6) = 3(1, 2),所以它属于 Col(A)。一个输入是 (3, 0),因为 A(3, 0) = (3, 6)。全部解是 (3, 0) + c(2, −1),其中 c 是任意实数。行空间中唯一的解是 (3/5, 6/5)。(3, 5) 不是 (1, 2) 的倍数,并且 2 × 3 − 5 = 1 ≠ 0,所以它无解。

继续:在三维中使用同样的推理