线性代数研究什么:方程、向量与变换
先从一个很小的问题开始。
社团开放日前,要做两类展板。数据展板每块需要 2 小时排版,说明展板每块需要 1 小时排版,今晚一共能用 5 小时;同时,数据展板要比说明展板多做 1 块。设两类展板的数量分别是 x 和 y,条件可以写成:
{2x+y=5x−y=1
你当然可以用代入法,很快算出 x=2,y=1。可线性代数真正关心的不只是这两个数。它还会追问:两个条件为什么可以画成两条直线?系数为什么能排成矩阵?矩阵乘向量为什么要用行乘列?矩阵又为什么能表示对整个平面的拉伸、旋转或压扁?
有意思的是,这些问题并没有各自独立的答案。方程组、向量组合、矩阵方程和线性变换,其实是在用四种语言描述同一个过程。本章就从这组简单的数字出发,把四种语言一层层接起来。

方程给出条件,列向量给出可用的方向,矩阵则把所有条件和方向收进同一个规则。
先把“线性”说清楚
一次还不够,关键是能叠加
只看式子的外形,线性表达式由下面这类项相加而成:
a1x1+a2x2
每个未知数只乘一个固定系数。未知数之间不相乘,不出现平方、开方、指数或三角函数。因此下面两个表达式是线性的:
3x−2y+7z,4u−v
下面三个不是:
x2+y,xy+z,sinx+y
但只记住“未知数是一次数”还不够。线性更值得记住的含义是:不同输入产生的效果可以直接叠加。
回到展板问题。把计划 (x,y) 送进第一个条件,得到所需时间 2x+y。如果计划甲需要的时间是 L(u),计划乙需要的时间是 L(v),把两份计划合在一起,需要的时间就是:
L(u+v)=L(u)+L(v)
把一份计划扩大到原来的 c 倍,所需时间也扩大到 c 倍:
L(cu)=cL(u)
这两条性质分别叫可加性和齐次性。合在一起,它们说的就是同一件事:先组合输入再计算,和先计算各自效果再组合,结果相同。矩阵之所以好用,根子就在这里。
右端常数不会破坏方程的线性
线性方程通常写成:
a1x1+⋯+anx
右边的 b 可以不是零。线性的是左边把未知数送到一个输出的规则;方程则要求这个输出恰好等于目标 b。在展板问题中,2x+y 是总时间规则,5 是今晚的时间上限;x−y 是数量差规则,1 是要求达到的差值。
这也解释了一个常见困惑:f(x)=2x+1 的图像虽然是一条直线,但它不是线性变换,因为 f(0)=1,零输入没有被送到零输出。更准确地说,它是带平移的仿射规则。图像是不是直的,只是线性的一个表面线索;能不能保留加法和数乘,才是判断标准。
“线性方程”和“线性变换”不要混成一句话。方程 Ax=b 可以有非零目标 b;真正的线性变换是左边的规则 x↦Ax,它一定把零向量送到零向量。
表达式、方程、方程组
这三个词处在不同层次。2x+y 是一个表达式,它根据 x,y 算出一个量。2x+y=5 是一个方程,它给输入加上一条必须满足的条件。把几条方程放在一起,并要求同一组未知数同时满足,才得到方程组。
说得直接一点:表达式负责计算,方程负责筛选,方程组负责同时筛选。
行图像:把每个条件画出来
先从最熟悉的平面坐标看原问题:
{2x+y=5x−y=1
第一个方程可以改写为 y=5−2x,所以它在 xy 平面上是一条直线。直线上的每个点都满足第一个条件。第二个方程可以改写为 y=x−1,它是另一条直线,线上每个点都满足第二个条件。
方程组要求两个条件同时成立,因此解必须同时待在两条直线上。两条直线唯一的公共点是 (2,1),这就是方程组的解。

逐行看方程组,每一行给出一条直线;两行都满足的位置就是交点。
因为矩阵中的每一行将来会记录一个方程,所以这种几何观察叫行图像。它让“同时满足”变得非常具体:在第一条线上还不够,还必须也在第二条线上。
用消去法把交点算出来
图能帮我们看懂问题,但精确坐标仍要靠代数计算。这里用一次消去:
把第二个方程乘以 2,得到 2x−2y=2。这一步没有改变满足第二个方程的点,只是把等式两边按同样倍数缩放。
代数给出的解还要放回语境检查。这里的 x,y 表示展板数量,所以必须是非负整数;(2,1) 正好符合。若方程算出 x=2.4,它在纯代数上可以是解,在这个制作问题里却不能直接解释成 2.4 块展板。建模时,方程负责关系,语境负责额外限制。
消元不是凭空发明新条件,而是在不改变共同解的前提下,把原条件换成更容易读取的等价条件。交换两条方程、把某条方程乘以非零常数、把一条方程的倍数加到另一条上,都会保留原来的解集。后面学习高斯消元时,我们会把这套动作做成稳定的算法。
解不一定是一个点
两条直线只有三种相对位置:相交于一点、互相平行、完全重合。因此二元方程组也可能有三种结果。
例如,x+y=3 与 2x+2y=7 的左边明明是两倍关系,右边却不是,所以不可能同时成立。消元会把矛盾暴露成 0=1 一类假等式。反过来, 与 描述同一条直线,第二个条件没有增加任何限制,于是整条线上的点都是解。
方程比未知数多,不代表一定无解;方程比未知数少,也不保证一定有解。真正决定结果的是条件之间有没有矛盾,以及其中有没有重复信息。
列图像:把目标向量拼出来
现在不逐行看条件,改为按未知数收集系数。原方程组可以写成:
x[21]+y[
这里的两列不是随便从表格里切出来的。第一列 [21] 记录“增加一块数据展板”对两个条件分别带来什么变化:总时间增加 2,数量差增加 1。第二列 [1−1] 记录“增加一块说明展板”的影响:总时间增加 1,数量差减少 1。
右端向量 [51] 则把两个目标打包在一起:总时间是 5,数量差是 1。
于是求解方程组变成一个很直观的问题:第一种影响取 x 份,第二种影响取 y 份,能不能拼出目标?当 x=2,y=1 时:
2[21]+1[

列图像不再寻找两条直线的交点,而是缩放并相加矩阵的列,直到合成目标向量。
向量在这里是一个信息包
向量不一定非要表示空间中的箭头。在这个问题里,[51] 的第一项是时间,第二项是数量差,它更像一个有顺序的信息包。不过,只要分量可以相加、可以按倍数缩放,我们仍然能用箭头帮助想象这些运算。
把一个向量乘以 x,相当于沿同一方向拉长、缩短或反向;把两个向量相加,相当于把两段位移首尾相接。像 xa1+ya2 这样的结果叫线性组合。改变 x,y,就能看到两列究竟可以拼出多大的范围。
如果两列不在同一条直线上,它们通常可以拼出整个平面中的任意目标。如果第二列只是第一列的倍数,那么无论怎样调 x,y,结果都只能留在一条直线上。此时,直线外的目标无解;直线上的目标则往往有不止一种拼法。
这就是列图像最有用的地方:它不只问某一个 b 有没有解,还开始追问矩阵能够到达哪些 b。
矩阵方程:把两种图像收进同一个式子
把所有系数排成长方形数组,再把未知数和目标各自排成列向量:
A=[21
原来的两个方程就压缩成:
Ax=b
这一行并没有丢掉任何信息。把左边展开,仍然是:
[211−1
同一个乘法有两种读法
从行的角度看,输出的第一个分量来自矩阵第一行与 x 的对应位置相乘再相加,第二个分量来自第二行做同样的事:
Ax=[第一行⋅x第二行⋅x]
这就是行乘列规则。它适合实际计算,因为每一行直接算出一个输出分量。
从列的角度看,Ax 是矩阵各列按 x 中的分量做线性组合:
Ax=x[21]+y[
它更适合理解结构,因为你能直接看出输出是由哪些方向拼成的。
行读法和列读法没有使用两套乘法。它们用的是完全相同的四次乘法和两次加法,只是把计算按输出分量组织,或按输入分量组织。矩阵乘向量的规则之所以长成“行乘列”,正是为了让这两种理解得到同一个结果。
尺寸也在讲故事
如果 A 是一个 m×n 矩阵,那么它有 n 列、m 行。要让 Ax 有意义,输入向量必须有 n 个分量;每一行产生一个输出,所以结果有 m 个分量:
m×n
可以把它读成:n 个输入变量,经过 m 条测量规则,产生 m 个输出。中间的 n 必须对得上,不是排版规定,而是每一行都要拿到完整的 n 个输入。
残差告诉我们差在哪里
猜一个 x 后,Ax 是它实际产生的输出,b 是目标。两者之差:
r=Ax−b
叫残差。r=0 表示每个条件都正好满足。只要有一个分量不为零,就说明至少有一条方程没有满足。
下面的实验台把行图像和列图像放在一起。拖动 x,y 时,左边的候选点会移动,右边的列向量组合也会同步变化;两边显示的差距其实都是同一个残差 Ax−b。
变换视角:矩阵是一台输入输出机器
现在先把目标 b 放到一边,只看规则本身:
T(x)=Ax
它喂进去一个向量,吐出来另一个向量。对本章的矩阵来说:
T([xy])=[
输入可以理解为两类展板的数量,输出可以理解为总时间和数量差。若把输入、输出都画成平面中的点,矩阵就会同时移动整个平面上的所有点。它可能拉伸、剪切、旋转、镜像,也可能把整个平面压到一条线上。

矩阵不是静止的数字表,它说明每个输入向量该被送到哪里。
为什么它确实是线性的
矩阵乘法天然保留加法:
A(u+v)=Au+Av
也保留数乘:
A(cu)=cAu
所以它会保留所有线性组合:
A(c1v1+⋯+c
这条等式会在整门课里反复出现。输入怎样由一些基本方向拼成,输出就用完全相同的系数,由这些基本方向的新位置拼成。

线性变换把网格线送成直线或压缩后的点,并固定原点;非线性规则可能把网格线弯曲。
“线性变换保持直线”不能反过来当成完整定义。平移也会把直线送成直线,却会移动原点,因此不满足线性。可靠的检查仍是可加性与齐次性;特别快的一步是先看零向量是否仍被送到零向量。
两根基向量就能决定整个平面
二维平面中最基本的两根向量是:
e1=[10],e
任何输入向量都能写成:
[xy]=xe1+ye
由于变换保留线性组合:
Ax=xAe1+yAe2
而 Ae1 恰好取出矩阵第一列,Ae2 恰好取出第二列:
Ae1=[21],
这下列图像和变换视角彻底接上了:矩阵的列,就是基本输入方向经过变换后的新位置。知道这些列,就知道任意输入会去哪里。
求解方程就是寻找原像
重新把目标 b 放回来。方程:
Ax=b
现在可以读成:哪个输入 x 会被变换 A 送到目标 b?
如果没有任何输入能到达 b,方程无解。如果只有一个输入能到达,方程有唯一解。如果许多输入被压到同一个 b,方程就有许多解。行图像中的交点数量、列图像中的拼法数量、变换中的原像数量,说到底是同一个数量。
三个未知数:图画变难,结构不变
看一个三元系统:
⎩⎨⎧x+y
在三维空间中,每个方程描述一个平面。一个解必须同时落在三个平面上。这个例子中的三个平面交于同一点 (1,2,3)。

三个方程逐行看是三个平面;共同交点同时满足三个条件。
消元仍然是在删除重复信息
我们一步步求这个共同点:
用第二个方程减去第一个方程,x 和 z 同时消掉,只剩 y=2。这一步把两条条件之间真正不同的部分抽了出来。
把同一件事按列重写,则是:
x
按矩阵和变换来写,则是:
你会发现,变量从两个增加到三个,计算量变多了,语言却完全没有变。再增加到十个、上千个变量也一样,只是我们无法继续靠画图观察,只能更依赖矩阵结构和算法。
下面可以直接调节候选点,观察三条方程各自的残差。一个点靠近某个平面,只代表其中一条残差较小;三个残差一起归零,才是方程组的解。
四种视角其实在问同一件事
现在把四种语言放在一起。仍以 Ax=b 为中心:
对本章的二维例子:
[211−1]
行图像说两条直线交于 (2,1);列图像说 2 份第一列加 1 份第二列得到目标;矩阵方程说 x=[21];变换视角说输入 被 送到了 。
不是四个相似的结论,而是同一个事实被翻译了四遍。熟练之后,你会按问题选择视角:要看条件是否相容,就看行;要看能否到达目标,就看列;要组织计算,就写矩阵;要理解整个空间怎样改变,就看变换。
线性模型能做什么,也不能做什么
现实问题很少一上来就递给我们矩阵。通常先出现的是守恒、配比、叠加或近似比例关系。把变量挑出来,再把每条关系写成“固定系数乘变量后相加”,矩阵才会出现。

交通流守恒、像素数据、趋势拟合和行业投入关系都能整理成向量与矩阵问题。
在路口,流入量与流出量的平衡会给出线性方程;在图像中,像素可以排成向量,许多处理步骤可以写成矩阵运算;在数据拟合中,我们常用线性组合靠近一组观测值;在投入产出问题中,一个部门的需求可以由多个部门的产出按固定比例相加。
不过,写出线性模型意味着我们做了假设。展板例子默认每多做一块,耗时都按固定数量增加,没有启动成本,也不会因为疲劳而越来越慢。若现实中存在固定准备时间、折扣、饱和、相互促进或拥堵,关系就可能不是线性的。有时我们仍在一个小范围内用线性模型近似它,但要记得近似有适用范围。
线性代数的优势不在于声称一切都是线性的,而在于:只要关系确实能叠加,或者在研究范围内近似能叠加,我们就有一套统一语言处理成千上万个变量。
容易走偏的几个地方
把行和列的角色记反
矩阵的每一行产生一个输出分量,对应方程组中的一个条件;每一列记录一个输入变量对全部输出的影响。看 m×n 矩阵时,可以先说一遍:n 个输入,m 个输出。这样不容易把 Ax 的尺寸写反。
把矩阵乘向量当成逐项相乘
矩阵不是和向量在相同位置上各乘各的。Ax 必须同时满足两种解释:每行算出一个输出,每列按输入系数组合。逐项相乘无法表达这些列的共同作用,也无法表示一个输入同时影响多个输出。
只检查一条方程
候选点满足第一条直线,不代表它是方程组的解。必须把它代入全部方程,或者直接检查残差向量是否为零。系统中的“且”不能悄悄换成“或”。
看到直线就断言是线性变换
f(x)=2x+1 的图像是直线,但它移动了原点。判断变换是否线性,先检查 T(0)=0,再检查它是否保留加法与数乘。
把点和向量完全混为一谈
坐标 (2,1) 可以表示平面中的位置,也可以表示从原点出发的位移。计算时两者常用相同数字,但含义不同:点回答在哪里,向量回答移动多少、朝哪个方向。后面讨论向量组合时,这个区别会越来越清楚。
练习
练习一:从条件建立方程
一家工作室制作普通海报和精装海报。普通海报每张用 2 份纸材,精装海报每张用 3 份纸材,共用 18 份;两类海报合计制作 7 张。设数量分别为 x,y。
写出方程组、矩阵方程,并求 x,y。
两条条件分别是纸材总量和海报总数:
{2x+3y=18x+y=7矩阵方程为:
练习二:判断线性
判断下面哪些表达式是变量 x,y,z 的线性表达式:
3x−2y+7z,x(y+1),−4x+y,x
再判断 F(x,y)=3x−2y 与 G(x,y)=3x−2y+ 哪一个是线性变换。
3x−2y+7z 和 −4x+y 是线性表达式;x(y+1)= 含有未知数乘积, 含有开方,所以不是。
练习三:一遍乘法,两种读法
设:
A=[1−123]
分别用行读法和列读法计算 Av。
按行计算:
Av=[1×2+2×(−1)−
练习四:判断解的数量
不必完整求解,判断下面三个系统分别有唯一解、无解还是无穷多解。
(a){x+y=3x−y=1
(b){x+y=32x+2y=6
(c){x+y=32x+2y=7
(a) 两条直线斜率不同,相交于一点,所以有唯一解。
(b) 第二个方程正好是第一个方程的 2 倍,两条直线重合,所以有无穷多解。
(c) 左边要求第二条等式应当是第一条的 2 倍,右边却从 3 变成了 7,产生矛盾,所以无解。
练习五:读出基向量的去向
设:
B=[0123]
求 Be1、Be2 和 B[,并用列向量解释最后一个结果。
两根基向量的去向就是矩阵两列:
Be1=[01],
练习六:检查三元系统的残差
对本章的三元系统,取候选向量:
q=122
计算 Aq−b,说明它满足了哪些方程、没有满足哪些方程。
代入三个左端,得到:
Aq=1
把地图收进一个问题
这一章一直围绕同一个问题打转:给定 A 和 b,怎样理解 Ax=b?
行图像把解看成所有条件的共同位置;列图像把解看成拼出目标所需的系数;矩阵方程把问题整理成可计算的形式;变换视角则把解看成目标的原像。以后遇到消元、逆矩阵、行列式、秩或特征向量,这张地图仍然会在背后工作。
但地图里还有一个词,我们只是不断使用,却没有真正拆开:线性组合。要弄清矩阵的列究竟能拼出哪些目标,就得先把向量加法、数乘、方向、张成这些基本动作摸透。当一组向量摆在面前时,哪些只是重复方向,哪些真的带来新的可能,也会从这些动作中自然显出来。