矩阵把空间分成四个子空间
把一个向量送进矩阵 A,出来的是另一个向量。但并非每个输入都受同样对待:有些方向原样活着出来,有些方向被整个压成零。所以一个矩阵就把空间分成四块。输出一侧坐着列空间(像),也就是你能到达的所有结果;输入一侧坐着零空间,也就是死成零的那些方向。把活下来的方向数(秩)和死掉的方向数(零度)相加,总是等于输入维数。有了这一张图,A x = b 为什么会无解、恰好一解、或者无穷多解,就一下子全都说清了。这正是单凭逆矩阵看不见的结构。
拖动输入向量 x。这个矩阵 A 是一个扁平矩阵,它的两列指向同一方向(det=0),所以无论你拖到哪里,输出 A x 都只落在一条直线上。那条直线就是列空间。为什么?因为 A x 归根结底是第一列的若干倍加上第二列的若干倍,也就是两列的组合,而两列平行,这种组合能造出的只有那条平行方向的直线。输出绝不能离开那条线。所有能到达的结果都被困在这条一维直线上。这就是像,也就是列空间。
在同一个扁平矩阵上,这次看输入一侧。有些输入会死成零。拖动 x 你会发现,当你把它放到某条直线上时,输出 A x 正好贴在原点。那条直线就是零空间。沿那个方向进来的输入被整个压成零,连痕迹都不留。只要稍微偏离那条线,输出立刻跳上列空间。不是单独一点,而是整条直线都映成零。所以 A x = 0 的解不只是 x = 0,而是无穷多个。零空间不为零这一事实本身,马上就成了解为什么会有许多个的钥匙。
现在用滑块把矩阵从活的状态压向扁平状态。滑块在一端时,A 是满秩 2:单位正方形变成一个正常的平行四边形,唯一映成零的输入是 x = 0,所以零度为 0。转动滑块,让一列倒向另一列,两列就变平行(det 趋于 0),平行四边形塌成一条线段。那一刻秩为 1,零度为 1,因为现在有一整条直线映成零。无论哪种情况,秩加零度始终是 2:输入维数被恰好分给两个孩子。活下来的维数(秩)和死掉的维数(零度),其和总等于进来的维数 n。这就是秩-零度定理。
再看输入平面。零空间不是孤单的:行空间也在输入一侧。行空间是矩阵两行所张成的方向,在扁平矩阵上它同样是一条直线。用开关点亮这两条线,你会看到行空间和零空间恰好成 90 度相交。两者是一对直角互补的搭档。为什么?因为 A x 的每个分量都是某一行与 x 的点积,而若 x 在零空间里,那个点积就是 0,意思是 x 垂直于每一行。所以每个输入向量都裂成两片:行空间那一片在输出里活下来,零空间那一片消失为零。让其存活的一半和让其死亡的一半,是以直角分开的。
现在用四个子空间的图来解 A x = b。用滑块移动目标 b。如果 b 不在列空间那条直线上,就根本没有能到达它的输入:零个解。把 b 抬到列空间上,解突然出现,而且不止一个:一个特解加上整个零空间,也就是沿零空间方向平移的一整条直线,全都是解。无穷多个。特解是到达 b 的一个输入,再往上加任何映成零的方向,输出仍然是 b。要是这矩阵是满秩、零空间只有 0,那么解恰好一个,就是逆矩阵给出的答案。零个、一个、无穷多个,这三条岔路全都直接源自四个子空间的形状。