矩阵与线性方程组
上一章里,我们一直在做线性组合:拿若干个向量,各乘一个系数,再把结果加起来。当时我们关心的是“给定这些方向,能拼出哪些向量”。这一章把问题反过来:目标向量已经摆在面前,我们要找的是那组系数。
这正是线性方程组在做的事。
第一次看到矩阵方程时,很多人会觉得原本熟悉的方程被压成了三个字母:
Ax=b
信息好像变少了。其实恰好相反。这个写法把一个方程组的骨架露了出来:A 记录每个未知量会怎样影响结果,x 记录我们可以调的量,b 记录想达到的目标。同一个式子既能按行读成一组约束,也能按列读成一次线性组合,还能整体读成一台“输入向量、输出向量”的变换机器。
我们先不急着学习一整套消元算法。先把这三个视角看成同一件事,后面再复杂的方程组也不会只剩下一堆机械计算。
从一组同时成立的约束开始
假设一场活动卖出成人票和学生票共 20 张。成人票每张 45 元,学生票每张 30 元,总收入是 720 元。设成人票卖了 a 张,学生票卖了 s 张。
“一共 20 张”给出第一条约束:
a+s=20
“收入一共 720 元”给出第二条约束:
45a+30s=720
把它们放在一起,才是完整的问题:
{a+s=20,45a+30s=720.
这里的“组”字很重要。我们不是分别找第一条方程的解和第二条方程的解,而是在找同一对 (a,s),让两条方程同时成立。(20,0) 满足票数约束,却让收入变成 900 元;(0,24) 能带来 720 元,却卖出了 24 张票。它们都不是方程组的解。
真正的解是 (8,12)。代回去检查:
8+12=20
并且
45×8+30×12=720
两个等式都成立。
方程组的一个解不是某个孤立的数字,而是一整组按固定顺序排列的数。只要其中一条方程不成立,这组数就不能进入解集。
这个例子也说明了线性方程从哪里来。每个未知量只以一次方出现,不与别的未知量相乘,也不被放进平方、根号或三角函数里。像 45a+30s=720 是线性的;as=20、a2+s2=20 都不是本章讨论的线性方程。
把方程组整理成 Ax=b
先把刚才的方程组原样摆出来:
{a+s=20,45a+30s=720.
每条方程都有三类信息:未知数前面的系数、未知数本身、等号右边的结果。矩阵记号做的事,就是把这三类信息分开。
系数矩阵 A
按 a,s 的顺序固定两列,再按两条方程的顺序固定两行:
A=[145130]
第一列收集 a 在每条方程里的系数,第二列收集 s 的系数。第一行来自票数约束,第二行来自收入约束。
未知向量 x
把未知数按同样的列顺序竖着放:
x=[as]
这里把向量写成 x,是为了提醒你:它不是一个数,而是一列待确定的数。以后常会简写成 x,含义不变。
右端向量 b
把每条方程等号右边的数按行顺序竖着放:
b=[20720]
于是原方程组变成:
[145130][as]=[20720]
也就是
Ax=b
矩阵乘向量以后,第一行与未知向量配对,得到 a+s;第二行与未知向量配对,得到 45a+30s。所以这个矩阵等式并没有改题,只是把两条普通方程一次写完了。
尺寸为什么必须匹配
如果方程组有 m 条方程、n 个未知数,那么:
A∈Rm×n,x∈Rn,b∈Rm
A 的 n 列要与 x 的 n 个分量一一配对,乘完以后得到 m 个结果,正好与 b 的 m 个分量比较。尺寸关系可以直接记成:
(m×n)(n×1)=m×1
如果 A 有 3 列,x 却只有 2 个分量,就像题目列了三种可调方案,你只交来了两个用量,乘法本身都无法完成。
缺项必须补 0
把下面的方程组写成矩阵时,最容易在第三行出错:
⎩⎨⎧2x−y+3z=7,−x+4y+z=2,5x+2z=9.
第三个方程没有 y 项,不是说第三行可以少写一格,而是 y 的系数为 0。固定列顺序为 x,y,z 后:
2−15−140312xyz=729
矩阵没有自动识别变量名的能力。列的含义完全由我们约定的顺序决定。中途把 x,y,z 的顺序换掉,或者遇到缺项时不补 0,都会悄悄把原问题换成另一个问题。
同一个 Ax=b 的三种读法
矩阵方程真正有用的地方,不只是写得短,而是允许我们从三个方向看同一件事。下面仍用一个具体方程组贯穿三种读法:
{x+2y=7,3x−y=7.
它的矩阵形式是:
[132−1][xy]=[77]
按行看:每一行是一条约束
第一行说 x+2y 必须等于 7,第二行说 3x−y 必须等于 7。在 xy 平面里,每条二元一次方程都是一条直线。解要同时满足两条约束,所以它一定落在两条直线的公共部分。
下图另取 x+y=2 和 x−y=2 作示意。方程换了,读图方法不变:两条线的交点就是同时满足两行的解。

按行看,每一行都在未知量空间里划出一条约束;解是所有约束的公共部分。
在三元方程组里,每一行通常给出三维空间中的一个平面,解是若干平面的公共部分。未知数再多时,我们很难把图画出来,但“每行是一条约束”仍然成立。
矩阵乘法的行读法也正好对应这个意思。设 A 的第 i 行是
[ai1ai2⋯ain]
它与 x 做点乘,给出第 i 条方程:
ai1x1+ai2x2+⋯+ainxn=bi
所以按行计算 Ax,就是逐条检查输入 x 是否满足所有约束。
按列看:未知数是组合系数
把矩阵按列拆开:
A=∣a1∣∣a2∣⋯∣an∣
那么矩阵乘向量等于:
Ax=x1a1+x2a2+⋯+xnan
对我们的例子来说:
x[13]+y[2−1]=[77]
这时 x,y 不再只是平面上一个点的坐标。它们还是两根列向量前面的“用量”:第一列取 x 倍,第二列取 y 倍,两者相加后要刚好拼出目标 b。

按列看,解告诉我们每一列该取多少倍,才能合成目标向量。
这就和上一章接上了。所有可能的 Ax,恰好是 A 的列向量能拼出的全部向量,也就是这些列向量的张成。于是:
Ax=b 有解⟺b 能由 A 的列向量线性组合得到
通常把所有列组合构成的集合叫作 A 的列空间,记作 Col(A)。因此也可以说:
Ax=b 有解⟺b∈Col(A)
在上面的交互里,先选“两列独立:b 可达”,拖动 x1,x2,看合成向量怎样在平面中移动;再切到“两列共线”的两个情形。你会直接看到:当两列只能张成一条线时,目标 b 在不在这条线上,决定了方程有没有解。
整体看:A 是一台线性变换机器
最后先把行和列都放下,把整个矩阵看成一个函数:
T(x)=Ax
它把 n 维输入向量变成 m 维输出向量:
T:Rn⟶Rm
回到售票问题,输入
x=[as]
是一份“卖多少张成人票、多少张学生票”的方案。矩阵 A 把它送进机器,输出
Ax=[a+s45a+30s]
也就是“总票数、总收入”这两个结果。方程 Ax=b 在问:哪些输入方案会被这台机器送到指定输出 b?
这个读法把“解”换成了一个很直观的词:b 的原像。
- 恰好一个输入被送到 b,就是唯一解。
- 没有输入能被送到 b,就是无解。
- 许多不同输入都被送到同一个 b,就是无穷多解。
三种视角并不争夺谁更正确。按行看适合读约束,按列看适合判断目标能否合成,整体看适合理解矩阵怎样把输入变成输出。它们用的是同一批乘加运算,只是把注意力放在了不同对象上。
增广矩阵:把题目收进一张数字表
写方程组时,x,y,z 会在每一行反复出现。只要变量顺序已经固定,我们可以暂时省掉变量名,把系数矩阵 A 和右端向量 b 并排放在一起:
[A∣b]
这叫增广矩阵。比如:
⎩⎨⎧2x−y+3z=5,x+4y−2z=0,3y+z=7
对应:
210−1433−21507

增广矩阵省略了反复出现的变量名,但保留了解方程组需要的全部数字。
竖线只是在做分区:左边是输入怎样影响输出的规则,右边是这一次指定的目标。它不是绝对值符号,也不表示某种新的矩阵运算。
如果 A 是 m×n 矩阵,那么 [A∣b] 是 m×(n+1) 矩阵。多出来的一列不是新的未知数,它仍然是等号右边的常数列。
增广矩阵还有一个很实际的好处:以后用一个方程的倍数去替换另一个方程时,左边系数和右边常数必须同步变化。把它们放在同一行里,不容易漏改右端。
对增广矩阵操作时,分隔线两边必须一起动。只改系数、不改右端常数,相当于把方程左边换了,却仍要求它等于旧结果,解集当然可能改变。
这一章只把增广矩阵当作一份紧凑记录。怎样用它稳定地整理约束、又为什么整理后解集不变,会在下一章正式展开。
解为什么只有三种数量
一个线性方程组的解集可能为空,可能只有一个元素,也可能有无穷多个元素。不会出现“刚好两个解”或“刚好五个解”。二维直线图先给我们直觉:两条直线可能平行、相交或重合。

二维里的三种图像,对应空集、一个点和无穷多个点。
但图只能说明二元情形。要知道任意维数为什么也只有三种,我们从代数上看。
两个不同解会带出一整条解
假设 x(1) 和 x(2) 都满足
Ax=b
并且它们不是同一个向量。对任意实数 t,取两者之间的线性插值:
x(t)=(1−t)x(1)+tx(2)
利用矩阵乘法对加法和数乘的保持性:
Ax(t)=A((1−t)x(1)+tx(2))=(1−t)Ax(1)+tAx(2)=(1−t)b+tb=b
所以每个 t 都给出一个解。只要已经找到两个不同解,就会顺带得到一整条无穷解。这就是“恰好两个解”不可能发生的原因。
齐次方程揭示解能不能移动
假设我们已经找到一个特解 xp,满足:
Axp=b
再看齐次方程:
Ah=0
如果 h 是齐次方程的解,那么:
A(xp+h)=Axp+Ah=b+0=b
所以 xp+h 仍然是原方程的解。反过来,任意另一个解 x 与特解的差都满足:
A(x−xp)=b−b=0
因此,只要方程有解,它的全部解都能写成:
x=xp+h,Ah=0
这句话很值得慢一点读。xp 负责把我们带到解集里的某一个位置;h 负责描述到达那里后,还能沿哪些方向移动而不改变输出。
再把 Ah=0 按列展开,就会得到:
h1a1+h2a2+⋯+hnan=0
如果存在非零的 h,这正说明 A 的列向量之间有一条非平凡的线性关系,也就是列向量线性相关。这样的矩阵会把某个非零方向压到零,因此同一个可达目标会有不止一种输入。反过来,如果列向量线性无关,Ah=0 只有零解;只要目标 b 可达,组合系数就是唯一的。
这里要把“能不能到达”和“到达方式是否唯一”分开。列向量相关并不自动等于无解:b 在列空间外时无解,b 在列空间内时则有无穷多解。
- 如果连特解都找不到,解集为空。
- 如果齐次方程只有 h=0,特解不能移动,原方程只有一个解。
- 如果存在非零的 h,那么 xp+th 对任意 t 都是解,原方程有无穷多解。
这也解释了整体变换视角下的现象:若 Ah=0,机器无法分辨输入 xp 和 xp+h,因为它们得到完全相同的输出。
把三种解放在代数与几何里对照
下面不只看图,也看列组合、齐次方向和增广矩阵分别在说什么。
唯一解:目标可达,而且没有隐藏方向
考虑:
{x+y=4,2x−y=5.
两条直线相交于 (3,1)。按列看:
x[12]+y[1−1]=[45]
两根列向量不共线,能用唯一一组系数拼出这个目标。相应的齐次方程
x[12]+y[1−1]=[00]
只有 x=y=0,没有可以偷偷加入而又不改变输出的非零方向。因此解一旦存在,就是唯一的。
无解:目标在可达范围之外
考虑:
{x+2y=3,2x+4y=7.
第二个方程左边永远是第一个方程左边的 2 倍。如果第一行等于 3,第二行就只能等于 6,不可能等于 7。这不是计算不够巧,而是两条约束互相冲突。
从列视角看:
x[12]+y[24]=[37]
第二列是第一列的 2 倍,两列所有组合都只能落在形如
[t2t]
的直线上。目标 (3,7) 不满足第二个分量是第一个分量的 2 倍,所以它不在列空间里。
从增广矩阵看:
[122437]
左边第二行是第一行的 2 倍,右边却没有保持同样关系。把两倍第一行从第二行中减去,会暴露出:
0=1
一旦出现这种矛盾,解集就是空集。
无穷多解:目标可达,但组合方式不唯一
把上一个例子的右端稍微改一下:
{x+2y=3,2x+4y=6.
现在第二条方程只是第一条的 2 倍,没有增加新约束。目标
[36]
落在列空间的那条直线上,因此有解;但两列本身共线,同一个目标能用许多组系数拼出来。
令 y=t,由 x+2y=3 得:
x=3−2t
全部解可以写成:
[xy]=[30]+t[−21],t∈R
向量 (3,0) 是一个特解,方向向量满足齐次方程:
[1224][−21]=[00]
几何上,解集是一整条直线;代数上,t 是可以任意选择的参数;变换视角下,沿方向 (−2,1) 移动不会改变输出。
用交互页的“相交、平行、重合”三个预设比较一下,再手动调整系数。观察重点不是记住某个判别公式,而是看清两件事:左侧系数决定两条约束的方向关系,右端常数决定目标位置是否与这种关系相容。
完整例题:把三个视角对到同一个答案
求解:
{x+2y=7,3x−y=7.
并分别说明这个答案在行视角、列视角和变换视角下是什么意思。
先整理成矩阵方程。列顺序固定为 x,y:
[132−1][xy]=[77]这一章还没正式学习系统消元,所以先用熟悉的代入法算出答案。由第一式得:
x=7−2y代入第二式:
3(7−2y)−y=7整理得到:
21−7y=7所以 y=2,再代回得到 x=3。
检查两条约束:
3+2×2=73×3−2=7两条都成立,所以解是:
x=[32]按行看,点 (3,2) 同时落在直线 x+2y=7 和 3x−y=7 上,是两条约束唯一的公共点。
按列看,解给出了拼法:第一列取 3 倍,第二列取 2 倍。
3[13]+2[2−1]=[77]按整体变换看,矩阵把输入 (3,2) 送到输出 (7,7)。而且没有别的输入会得到同一个输出,所以这个目标只有一个原像。
如果只会代入,我们当然也能算出 x=3,y=2。线性代数多做的那一步,是把“怎么算”连接到了“为什么有解、为什么唯一、答案在空间里意味着什么”。这份理解会在方程规模变大后继续有效。
一个真实模型:两种餐盒怎样用完库存
一家中央厨房要制作甲、乙两种餐盒。每制作一批甲餐盒,要消耗 2 单位主食、1 单位配菜、1 单位包装;每制作一批乙餐盒,要消耗 1 单位主食、3 单位配菜、1 单位包装。
当天可用于这两种餐盒的库存分别是:主食 8 单位、配菜 9 单位、包装 5 单位。问甲、乙各做多少批,能把三类库存刚好用完?
设甲做 u 批,乙做 v 批。逐项写约束:
⎩⎨⎧2u+v=8,u+3v=9,u+v=5.主食配菜包装
矩阵形式是:
211131[uv]=895
这个 3×2 矩阵很适合用来区分“行”和“列”的现实含义。
- 每一行对应一类资源约束。
- 每一列对应一种完整方案的资源消耗清单。
- 未知向量记录每种方案做多少批。
- 右端向量记录希望刚好达到的库存总量。
按列看,问题是:
u211+v131=895
第三条约束先告诉我们:
u+v=5
第一条与第三条相减,得到 u=3;于是 v=2。再检查第二条:
3+3×2=9
所以三条约束确实同时成立。
这个例子里,代数解 (3,2) 也是可执行方案,因为批数都是非负整数。真实建模常常还有这些附加要求:产量不能是负数,整批生产时不能取小数,库存也可能允许剩余而不是要求刚好用完。它们不会自动写进 Ax=b,必须根据现实语义另行说明。
矩阵只忠实执行你写进去的关系。模型算对了,不等于现实问题一定建对了。解释每一行、每一列和每个单位,是检查模型不可省略的一步。
常见误区:看起来像结论,其实还差条件
方程数等于未知数数,所以一定有唯一解
不成立。下面两个方程有两个未知数,却无解:
{x+y=1,2x+2y=3.
下面同样是两个方程、两个未知数,却有无穷多解:
{x+y=1,2x+2y=2.
数一数行和列,只能知道问题的尺寸,不能判断约束是否独立,也不能判断右端是否相容。
方程比未知数多,所以一定无解
也不成立。额外方程可能只是已有约束的重复。例如:
⎩⎨⎧x+y=3,x−y=1,2x=4.
第三条其实能由前两条相加得到,没有引入冲突,解仍是 (2,1)。
未知数比方程多,所以一定有无穷多解
还要先确认“有解”。一个方程也可能自己就矛盾,例如整理后出现 0=1。正确说法是:没有矛盾,并且整理后确实留下可自由选择的变量,才会有无穷多解。
看到 0=0 就能断定无穷多解
0=0 只说明某一行没有提供新信息。其他行仍可能把所有未知数确定下来,也可能藏着 0=1 的矛盾。判断解型时,要看整个方程组,而不是盯住一行。
增广矩阵最后一列也是 A 的一列
在 [A∣b] 里,b 是目标,不是系数矩阵的一部分。讨论 A 的列空间时,只使用竖线左边的列;问题恰恰是在问竖线右边的 b 是否落在这些列张成的空间中。
找到一组数就算完成
如果题目问“解方程组”,就要确认这是全部解。找到一个特解只证明“至少有解”,不能排除还有别的解。接着检查齐次方程 Ah=0 是否存在非零解,才能判断特解能不能沿某些方向继续移动。
练习:把三个视角真正用起来
练习一:从方程组到矩阵
把下面方程组写成 Ax=b,并写出 A、x、b 的尺寸。
{2p−q+4r=6,3q−r=5.
固定列顺序为 p,q,r。第二行没有 p,所以第一格补 0:
[20−134−1]pqr=[65]因此 A 是 2×3,x 是 3×1,b 是 2×1。乘积尺寸为:
(2×3)(3×1)=2×1
练习二:改写成列组合
把下面的矩阵方程改写成列向量线性组合,并用一句话说明它在问什么。
[13−2104]x1x2x3=[57]
列组合形式是:
x1[13]+x2[−21]+x3[04]=[57]它在问:能不能从三根列向量中各取 x1,x2,x3 倍,拼出目标向量 (5,7);如果能,组合系数有哪些。
练习三:判断无解还是无穷多解
下面两个方程组使用同一个系数矩阵。分别判断解型,并从列空间角度解释。
甲:{x−3y=4,2x−6y=8
乙:{x−3y=4,2x−6y=9
系数矩阵的两列是:
[12],[−3−6]第二列是第一列的 −3 倍,所以列空间只是形如 (t,2t) 的一条直线。
甲的目标是 (4,8),它在这条直线上,所以有解。第二个方程与第一个重复,令 y=t,得到:
x=4+3t因此甲有无穷多解:
[xy]=[40]+t[31]乙的目标是 (4,9),不满足第二个分量是第一个分量的 2 倍,所以不在列空间里。乙无解。
练习四:写出全部解
已知:
{x+2y−z=4,2x+4y−2z=8.
写出全部解,并指出一个特解和两个齐次方向。
第二条方程是第一条的 2 倍,只需保留:
x+2y−z=4令 y=s、z=t,则:
x=4−2s+t所以全部解为:
xyz=400+s−210+t101,s,t∈R其中 (4,0,0) 是一个特解,(−2,1,0) 与 (1,0,1) 都会被系数矩阵送到零向量,所以是齐次方向。
练习五:用列组合求配比
设
a1=[12],a2=[31],b=[75]
求 u,v,使得 ua1+va2=b。
按分量写成方程组:
{u+3v=7,2u+v=5.由第一式得 u=7−3v。代入第二式:
2(7−3v)+v=5所以:
14−5v=5v=59再得到:
u=58因此:
b=58a1+59a2两根列向量不共线,所以这组组合系数也是唯一的。
练习六:为什么不能恰好有两个解
某个线性方程组已经找到两个不同解 u 和 v。请构造第三个解,并说明怎样由此得到无穷多个解。
因为
Au=b,Av=b取两者的平均:
w=21u+21v就有:
Aw=21Au+21Av=21b+21b=b所以 w 也是解。更一般地,对任意实数 t:
(1−t)u+tv都是解。由于 u=v,不同的 t 会给出无穷多个不同解。
把整理工作交给下一章
现在再看
Ax=b
它已经不是三个空洞字母了。
按行看,A 的每一行是一条必须同时满足的约束;按列看,x 的分量是组合系数,问题在问 b 能不能由 A 的列向量拼出来;整体看,A 把输入 x 变成输出,解就是目标 b 的所有原像。增广矩阵 [A∣b] 则把这份问题压缩成一张便于整理的数字表。
关于解的数量,我们也有了一条完整判断链:先问目标是否可达;如果不可达,就无解。如果可达,再问齐次方程有没有非零方向;没有就是唯一解,有就是无穷多解。
还剩下一个最实际的问题:面对十几条方程时,我们总不能靠看图、猜列关系或临时挑一种代入顺序。怎样稳定地把约束整理出层次?怎样暴露 0=1 这样的矛盾?怎样找出哪些变量被确定、哪些变量可以自由选择?下一章的高斯消元会把这些问题变成一套每一步都能检查的行变换流程。