🎯 本章学习目标
- 建立「矩阵 = 线性变换 = 一种对空间的拉伸/旋转/挤压」的直觉。
- 理解「矩阵由它的列决定」:列就是基向量被送到的新位置。
- 从「先做 B、再做 A」的复合动作,一步步推导出行乘列规则。
- 体会为什么「乘法不交换」是必然的——动作顺序不能乱。
- 会用「列 = 基向量去向」写出小变换矩阵,并用「列接力」算复合。
5.1矩阵是一种「动作」
回到第 3 章的「列视角」:矩阵的每一列,可以看成一个向量。但更进一步——矩阵不只是「一堆向量」,它还能对向量做动作。
具体来说,一个矩阵 A 作用在一个向量 v 上,记作 Av,结果是一个新向量:
Av = 「用 A 的各列,以 v 的分量为系数,做线性组合」
举个例子。设 A = [[2,0],[0,1]],它对向量 v=(1,1) 做什么?
Av = 1·(2,0) + 1·(0,1) = (2,0) + (0,1) = (2,1)
结果 (2,1) 和原向量 (1,1) 相比,x 方向被拉长到了 2 倍,y 方向没变。也就是说,矩阵 [[2,0],[0,1]] 这个「动作」,是「横向拉伸 2 倍」。
于是我们得到一个全新的、更深刻的看法:
核心思想 矩阵 = 线性变换 = 一种「把整个空间拉伸/旋转/挤压」的动作。矩阵乘向量 Av,就是「对向量 v 施加这个动作,得到新向量」。这一章之后,请永远把矩阵和「动作」联系在一起。
为什么叫「线性」变换?因为这种动作有两个「老实」的性质(都是第 1 章线性运算的翻版):
- A(u+v) = Au + Av(和的变换 = 变换的和);
- A(kv) = k(Av)(缩放的变换 = 变换的缩放)。
简单说:变换后,直线还是直线,原点不动。这是「线性」二字的严格含义。
这两条代数性质的几何威力,值得看一次完整的推导。取平面上任意两点 u、v,连接它们的线段上的点都能写成 (1−t)u + t·v(0 ≤ t ≤ 1,两端 t=0、t=1 时正好是 u、v 自己)。作用 A 之后:A((1−t)u + t·v) = (1−t)·Au + t·Av(两条线性性质合用)——像点仍按同样的比例插在 Au、Av 之间。也就是说,线段变成线段,不弯、不断、不挤成弧。再验证原点:A(0) = A(0+0) = A(0) + A(0),移项得 A(0) = 0,原点纹丝不动。于是整张坐标网格变形后仍是平行四边形网格——「直线还是直线」不是口诀,是可证明的推论。
反过来看「不线性」长什么样,印象会更深。取 f(x, y) = (x², y)(把第一分量平方,第二分量照抄):f(2, 0) = (4, 0),而 2·f(1, 0) = 2·(1, 0) = (2, 0)——同样的输入翻倍,输出没有跟着翻倍,缩放性当场破产。几何上,直线 y = x 上的点 (t, t) 被送到 (t², t),满足 x = y²——一条直线被掰成了抛物线。线性变换做不到这种事:它只会把网格「整体地」拉伸、旋转、剪切,绝不会把直线掰弯。
一个高频误区要提前拆掉:中学说的「一次函数」f(x) = 2x + 1,图像是直线,但在本课意义下它不是线性变换——f(0) = 1 ≠ 0,原点被挪走了;f(u+v) = 2(u+v) + 1,而 f(u) + f(v) = 2u + 2v + 2,两者差 1,叠加性也破产。严格说它是「仿射」的:线性变换再叠加一个平移。中学的「线性」说的是图像形状(直线),本课的「线性」说的是结构性质(可叠加、可缩放、原点不动),两个词撞了衫。往后读工程文献说「线性系统」,指的都是后者。
再练一个反例,这次破坏的是叠加性:f(x, y) = (|x|, y)(第一分量取绝对值)。f((1,0) + (−1,0)) = f(0,0) = (0,0),而 f(1,0) + f(−1,0) = (1,0) + (1,0) = (2,0)——两头对不上,叠加性破产。值得注意的是它的缩放性对非负倍数倒是成立的:f(2,0) = 2f(1,0)。这提醒你:两条性质必须都验,只验一条可能被骗。绝对值、取整、饱和限幅——这些工程信号处理里的常见环节,个个都是叠加性的杀手,这也是「理想线性」在真实系统里如此金贵的原因。
也举两个正面的最小例子:单位换算 f(x) = 2.54x(英寸转厘米)——f(u+v) 与 f(ku) 都逐条成立,原点也不动,是标准线性变换(一维矩阵就是 [2.54]);固定增益的放大、成比例的缩放同理。而「先放大、超过量程再限幅」的组合就不线性了——限幅那个环节会把叠加性拦腰斩断。判别一个环节线性与否,永远回到两条性质 + 原点,逐条验,别凭感觉。
📐 例题 1 线性性质逐条数值验证
A = [[1,2],[0,3]],u = (1,1),v = (2,0),k = 3。验证:(1) A(u+v) = Au + Av;(2) A(k·u) = k·(Au)。
思路 老老实实两头各算一遍,看是否逐分量相等。
解 (1) Au = 1·(1,0) + 1·(0,3) = (1,3)?不对——先按列组合:Au = 1×(第1列) + 1×(第2列) = (1,0)+(2,3) = (3,3);Av = 2×(1,0) + 0×(2,3) = (2,0)。故 Au + Av = (5,3)。另一边:u+v = (3,1),A(u+v) = 3×(1,0) + 1×(2,3) = (3,0)+(2,3) = (5,3)。相等 ✓。(2) k·u = (3,3),A(3u) = 3×(1,0) + 3×(2,3) = (3,0)+(6,9) = (9,9);另一边 k·(Au) = 3×(3,3) = (9,9)。相等 ✓。
答:A(u+v) = Au + Av = (5,3),A(3u) = 3(Au) = (9,9),两条性质均成立。 ⚠ 易错点:算 Av 时系数 0 也要老老实实乘第 2 列(0×(2,3) = (0,0)),别跳步跳丢;「先组合后作用」与「先作用后组合」的次序可以自由选择,正是这两条性质给你的自由。
这两条性质在工程里对应一个大词:可叠加。理想放大器里,两路信号分别放大后叠加,与混合后再放大,结果一致——A(u+v) = Au + Av 的电路版;增益拧到 3 倍,输出精确跟着变 3 倍——A(kv) = k(Av) 的面板版。一旦放大器饱和,线性假设破产,叠加失效,失真就藏不住。结构力学里的载荷叠加、振动分析里的模态叠加,方法大厦的地基都是这两条性质——工程里大量「分开算再加起来」的套路,数学上全部押注在「系统足够线性」这一句上。
最后把两种视角正式并置。同一张数表,第 4 章当它是「数据的排布」(预算表、材料表),本章当它是「空间的动作」——两种身份不冲突,而是同一张表的两种读法。何时用哪个?存数据、查表、做预算、画热力图,用表格视角;理解乘法、逆矩阵、行列式、特征值,用动作视角。后文会在这两种视角之间反复切换,每切一次都请你问一句:现在这张表,是在「记事」还是在「做事」?两个特殊动作先点名:零矩阵 O——把一切压到原点,信息全毁,是动作世界的「0」;单位矩阵 I = [[1,0],[0,1]]——列就是 e₁、e₂ 本尊,什么都不做,是动作世界的「1」。它们将在复合、求逆的剧情里反复出场。
5.2矩阵由它的「列」决定
一个惊人的事实:只要知道矩阵把两个基向量 (1,0) 和 (0,1) 送到了哪里,整个变换就完全确定了。
道理很简单。任意向量 (x,y) 都能写成基向量的组合:
(x, y) = x·(1,0) + y·(0,1)
变换 A 是线性的,所以:
A(x, y) = x·A(1,0) + y·A(0,1)
也就是说,A 对任意向量的作用,完全由它对两个基向量的作用决定。而这两个「基向量被送到的新位置」,恰好就是 A 的两列:
- A(1,0) = A 的第一列;
- A(0,1) = A 的第二列。
底层原理 矩阵的每一列,就是对应基向量经过变换后的新位置。第 1 列 = e₁=(1,0) 的去向,第 2 列 = e₂=(0,1) 的去向。所以「读矩阵的列」,就是在读「这个变换把坐标轴掰到了哪里」。
拿 [[2,0],[0,1]] 验证:第一列 (2,0) 说明 e₁=(1,0) 被拉到 (2,0)(x 轴拉长 2 倍);第二列 (0,1) 说明 e₂=(0,1) 原地不动。完全吻合「横向拉伸 2 倍」的直觉。
把这条逻辑链完整重写一遍,值得逐行确认。任意向量 (x, y) = x·e₁ + y·e₂;两边同时作用 A:A(x, y) = A(x·e₁ + y·e₂);用线性性拆开:= x·A(e₁) + y·A(e₂);而 A(e₁)、A(e₂) 恰是 A 的第一列、第二列。于是——矩阵乘向量,就是把向量的分量当「配方比例」,去混合矩阵的列。第 3 章讲过「列视角」,那时它只是记账技巧;现在你知道它是全部事情的源头:变换的全部信息,都存在两根坐标轴的去向里,其余的一切都是组合。
📐 例题 2 由「基向量的去向」反写矩阵
某变换把 e₁ = (1,0) 送到 (3,1),把 e₂ = (0,1) 送到 (−2,2)。(1) 写出该变换的矩阵 M;(2) 求 M 作用在 (2,1) 与 (1,1) 上的像。
思路 矩阵的列 = 基向量的去向:第一列放 (3,1),第二列放 (−2,2);求像就是「用分量去混合列」。
解 (1) M = [[3, −2],[1, 2]]。(2) M(2,1) = 2×(3,1) + 1×(−2,2) = (6,2) + (−2,2) = (4,4);M(1,1) = (3,1) + (−2,2) = (1,3)。
答:M = [[3,−2],[1,2]];M(2,1) = (4,4),M(1,1) = (1,3)。 ⚠ 易错点:列的编号 = 基向量的编号,第一列必须对应 e₁ 的去向,填反整张「配方表」就乱;求 Mv 时用「分量混合列」看懂在做什么、用「行乘列」快速出数,两条路结果必然一致,可以互查。
这个性质是测量标定的理论地基。一台两输入两输出的线性设备,不必穷举所有输入组合——只需用两个「基准输入」测出各自的输出(它们就是矩阵的两列),其余任何输入的响应便自动可知。传感器标定用的标准砝码、校准台给的标准量,扮演的正是基向量的角色:工程上的标定,数学上就是「测出矩阵的列」。两输入两输出要 4 个标定系数,n 输入 m 输出要 mn 个——这个 mn 既是矩阵元素个数,也是「标定工作量」的量化。
为什么偏偏是「列」决定一切,而不是行?看一张网格纸的变形就明白。所有竖直网格线都能写成 c·e₁ + t·e₂(c 固定、t 跑遍全部实数)——是一条过 c·e₁、沿 e₂ 方向的直线。作用 A 后:A(c·e₁ + t·e₂) = c·Ae₁ + t·Ae₂,仍是直线,方向由 Ae₂ 定,起点由 c·Ae₁ 定。竖线族变形后仍是一族平行直线,只是方向和间距被两列重新决定;横线同理。所以网格变形后仍是平行四边形网格,整个变形由两列完全掌控——这就是「列 = 基向量去向」的几何分量。顺带看清行与列的分工:列读输入,行读输出——第 j 列是「第 j 个输入通道的响应」,第 i 行是「各输入对第 i 个输出的贡献」。工程表格里行标输出通道、列标输入通道,正是这个约定的活化石。
把常见的基本动作认全,往后见到任何矩阵都能先估个体形:拉伸 [[2,0],[0,1]]——e₁ 加倍、e₂ 不动,横胖竖瘦;旋转 [[0,−1],[1,0]]——e₁ 转 90° 到 y 轴正方向,e₂ 转 90° 到 x 轴负方向;剪切 [[1,1],[0,1]]——e₁ 不动、e₂ 水平错位,方块变平行四边形;反射 [[1,0],[0,−1]]——e₁ 不动、e₂ 翻到对称位置,镜像。复杂动作不是凭空出现,而是基本动作的连乘——像乐高一样拼出来。这也是「矩阵分解」思想的雏形:第 8 章你会看到,任何可逆变换都能拆成「旋转×拉伸×旋转」的组合。
养成「看列辨动作」的读表习惯:拿到矩阵先扫两列,e₁、e₂ 各自被送去了哪里。单位矩阵——两列就是 e₁、e₂ 本尊,「不做」;[[2,0],[0,1]]——e₁ 翻倍、e₂ 原地,「横向拉伸」;[[0,−1],[1,0]]——e₁ 上 y 轴、e₂ 下 x 轴,「旋转」;[[1,1],[0,1]]——e₁ 不动、e₂ 斜挪,「剪切」;[[1,0],[0,−1]]——e₂ 翻面,「镜像」;[[1,0],[0,0]]——e₂ 直接归零,「投影压扁」。两列像两张名片,动作的身份一目了然——这个习惯将在第 7、8 章算行列式、求逆矩阵时持续发挥作用。
这套读法还能倒着用:想设计一个动作——「e₁ 送到 (3,1)、e₂ 送到 (−2,2)」——把两个去向竖着填进两列,矩阵立刻写完,例题 2 已经演练过一遍。正读(由矩阵报出动作)、反写(由动作拼出矩阵)双向都通,矩阵与变换之间才算真正打通。
顺带看一眼非方阵:2×3 矩阵有三列、每列是 2 维向量——它是「把三维空间压进平面」的动作,e₁、e₂、e₃ 三个基向量各自被送到平面上的某一点。所以 2×3 矩阵吃三维向量、吐二维向量,维数对不上时接口根本插不上。三维信息被压进二维,难免「有损」——不同输入可能共享同一输出。这句预告牵出后面一整串剧情:消去律为什么失效(第 4 章例题 7 埋的问号)、什么样的变换可逆(第 8 章),根源都在「压扁」二字。
5.3两个动作连着做:复合变换
现在到了最关键的一步。假设有两个变换:
- B:先做一个动作;
- A:再做第二个动作。
「先 B 后 A」这个连着做的动作,本身也是一个线性变换,我们把它记作 AB(注意:写在左边的是后做的那个,因为 ABv 的意思是先算 Bv,再对结果用 A)。
于是「矩阵乘法」的定义就浮出水面了:
定义 矩阵乘法 AB,就是「先做变换 B、再做变换 A」的复合变换。(AB)v = A(Bv)。
看,乘法根本不是「数字相乘」,而是「动作的组合」。那么问题来了:这个复合变换 AB,它的矩阵长什么样?它的各列是什么?
用上一节的方法:要确定 AB,只需看它把基向量送到哪。
- e₁=(1,0) 先经过 B,变成 B 的第一列,记作 b₁;再经过 A,变成 Ab₁。所以 AB 的第一列 = A·b₁。
- 同理,AB 的第二列 = A·b₂,其中 b₂ 是 B 的第二列。
先用一维热个身,看「复合 = 乘法」的骨架。f(x) = 3x(放大 3 倍)、g(x) = 2x(放大 2 倍):先 g 后 f,得 f(g(x)) = f(2x) = 6x——复合动作是「放大 6 倍」。一维的「变换矩阵」就是单个数 a,「矩阵乘法」退化成普通乘法,复合 = 相乘:3×2 = 6。二维不会是这句的简单重复,但骨架不变:两个变换的复合也是线性变换(用两条线性性质可直接验证),而线性变换必有自己的矩阵——复合矩阵怎么由两个矩阵拼出来,正是下一节要推导的事。
动手之前先做个「读列」练习,把本章前两节的功夫用上:R = [[0, −1],[1, 0]] 是逆时针旋转 90°。读它的列:第一列 (0,1)——e₁ 被转到 y 轴正方向;第二列 (−1,0)——e₂ 被转到 x 轴负方向。两根坐标轴整体逆时针转了 90°,这就是「旋转矩阵」的全部含义。再看 S = [[1, 1],[0, 1]]:第一列 (1,0)——e₁ 原地不动;第二列 (1,1)——e₂ 被水平推到 (1,1)。x 方向纹丝不动、竖直方向被「搓」斜——这叫剪切。两个矩阵你都能「望列生义」了,下面把它们连招。
📐 例题 3 先旋转后剪切 vs 先剪切后旋转
R = [[0,−1],[1,0]](逆时针旋转 90°),S = [[1,1],[0,1]](水平剪切)。(1) 求「先 R 后 S」的复合矩阵 SR 与「先 S 后 R」的复合矩阵 RS;(2) 把两者分别作用到 v = (1,0) 上,比较结果。
思路 复合矩阵 = 列接力:SR 的第 1 列 = S·(R 的第 1 列)。两个方向都算出来,再各作用一次 v。
解 (1) R 的两列是 (0,1)、(−1,0)。SR 第 1 列 = S·(0,1) = 0×(1,0) + 1×(1,1) = (1,1);SR 第 2 列 = S·(−1,0) = −1×(1,0) + 0×(1,1) = (−1,0)。故 SR = [[1, −1],[1, 0]]。S 的两列是 (1,0)、(1,1)。RS 第 1 列 = R·(1,0) = (0,1);RS 第 2 列 = R·(1,1) = R(1,0) + R(0,1) = (0,1) + (−1,0) = (−1,1)。故 RS = [[0, −1],[1, 1]]。(2) 作用到 v = (1,0):(SR)v = SR 的第 1 列 = (1,1);(RS)v = RS 的第 1 列 = (0,1)。
答:SR = [[1,−1],[1,0]],RS = [[0,−1],[1,1]],两个复合矩阵不同;作用在 (1,0) 上分别得 (1,1) 与 (0,1)——同样的两个动作,先后对调,结局完全不同。 ⚠ 易错点:「SR」读作先 R 后 S,矩阵永远从右往左作用;算复合矩阵时用「列接力」最稳——外层矩阵依次吃进内层矩阵的每一列。
拿行乘列抽查复核,确认「列接力」没有骗你:SR 的 (1,1) 元 = S 第 1 行 [1, 1] 点乘 R 第 1 列 (0, 1) = 1×0 + 1×1 = 1,与列接力所得第一列 (1,1) 的首个分量一致;(1,2) 元 = [1, 1] 点乘 R 第 2 列 (−1, 0) = −1,同样对上。两条路算的是同一个东西——上一章末尾埋的「AB 第 j 列 = A·(B 第 j 列)」在这里正式兑现。
三个动作连做时,(AB)C 与 A(BC) 都表示「先 C、再 B、后 A」,结果自然相同——结合律在「动作」视角下几乎不用证,它是「按既定顺序执行」的直接体现。工程价值在于分组自由:一长串变换连乘,可以先合并任意相邻两个,谁好算先合并谁,结果分毫不差;软件里变换链的化简、化简后再批量作用到成千上万个点上,靠的就是这份自由。
还有一个逻辑环节要补严:复合变换凭什么有自己的矩阵?因为复合仍是线性变换。证明只要两行:复合作用 (u+v) 时,先 B 后 A,得 A(B(u+v)) = A(Bu + Bv)(B 的线性)= A(Bu) + A(Bv)(A 的线性)——叠加性继承;缩放性同样逐字继承。既然复合是线性变换,它就必有自己的矩阵——「乘法规则必然存在」这句话的逻辑前提就此补全,下一节只剩下把规则的具体长相算出来。
把上一章背过的运算律拿到动作世界对账,你会发现每条都有画面:AI = IA = A——「先不做再做事」与「先做事再不做」都是只做那件事;AO = OA = O——与「全毁」组合必全毁;A²·A = A·A²——同一动作连做三次,从哪头数都是三次;结合律是分组自由,上一段刚证。代数式是动作的账本,账本上的每条规则,对应动作世界里的一件实事。读法纪律也定下来:AB 一律读「先 B 后 A」——函数记号 f∘g 是先 g 后 f,(AB)v = A(Bv) 括号先算右边,工程流程图从输入端往回读:三处约定完全一致,因为它们本来就是同一件事的三种写法。
顺手把「幂」也安顿好:A² = A·A,同一动作连做两遍;A³ 连做三遍。由本节规则,A² 的列 = A 作用 (A 的列)——不必对每个向量一步步接力,直接矩阵乘矩阵就能合成。幂序列 A, A², A³, … 在数值算法里天天露面:反复应用同一变换、观察系统是否趋于稳定,数学骨架就是它;什么样的变换连做很多次会「收敛」、什么样的会越跑越远,这是特征值理论要回答的问题,第 8 章见。
🧠 一句话记忆 「AB 的列 = A 去作用 B 的列」。因为「先 B 后 A」,B 先动基向量,A 再接力。
5.4推导:行乘列是怎么逼出来的
现在把「AB 的列 = A·b₁, A·b₂」展开,行乘列规则就会自动浮现,不用背。
设 A 的两列是 a₁=(a₁₁, a₂₁)、a₂=(a₁₂, a₂₂);B 的两列是 b₁=(b₁₁, b₂₁)、b₂=(b₁₂, b₂₂)。
先算 AB 的第一列 Ab₁。把 b₁ 写成分量形式,用「列线性组合」展开:
Ab₁ = b₁₁·a₁ + b₂₁·a₂ = b₁₁·(a₁₁, a₂₁) + b₂₁·(a₁₂, a₂₂)
看它的第一个分量(即 AB 的 (1,1) 元素):
a₁₁·b₁₁ + a₁₂·b₂₁
这恰好是 A 的第 1 行 (a₁₁, a₁₂) 与 B 的第 1 列 (b₁₁, b₂₁) 的「对应相乘再相加」!
再看 AB 的 (1,2) 元素,来自第一列推导中「第 2 个分量」…… 不,更系统地:AB 的第 i 行第 j 列元素,就是 A 第 i 行 与 B 第 j 列 的点积。完整写出:
结论(推导完成) 矩阵乘法「行乘列」规则,等价于「先做 B、再做 A 的复合变换」。这不是谁拍脑袋定的,而是「动作组合」这件事在数字上的必然样子。
这也是为什么维度必须「中间对齐」:A 要对 B 的列做线性组合,A 的列数(也就是每个列向量的长度)必须等于 B 的列的长度(即 B 的行数)。中间对不上,动作就接不上。
📐 例题 4 三条路算同一个 AB
A = [[2,1],[1,1]],B = [[1,3],[2,0]]。(1) 用行乘列计算 AB;(2) 用「AB 的第 j 列 = A·(B 的第 j 列)」再算一遍并核对;(3) 取 v = (1,1),验证 (AB)v = A(Bv)。
思路 同一个乘积走三条路:行乘列(教科书算法)、列接力(几何意义)、结合律(动作次序),看是否殊途同归。
解 (1) AB = [[2×1+1×2, 2×3+1×0],[1×1+1×2, 1×3+1×0]] = [[4, 6],[3, 3]]。(2) B 的第 1 列 b₁ = (1,2):A·b₁ = 1×(2,1) + 2×(1,1) = (2,1)+(2,2) = (4,3),恰为 AB 第 1 列;B 的第 2 列 b₂ = (3,0):A·b₂ = 3×(2,1) + 0×(1,1) = (6,3),恰为 AB 第 2 列。与 (1) 完全一致。(3) (AB)v = 1×(4,3) + 1×(6,3) = (10,6);另一边 Bv = 1×(1,3) + 1×(2,0) = (3,3)?核对:按行乘列 Bv = (1×1+3×1, 2×1+0×1) = (4,2)。再算 A(Bv) = A(4,2) = 4×(2,1) + 2×(1,1) = (8,4)+(2,2) = (10,6)。相等。
答:AB = [[4,6],[3,3]],三条路全部对上;(AB)v = A(Bv) = (10,6)——「先 B 后 A」与「合并后再作用」永远等价。 ⚠ 易错点:算 A·b 时,b 的分量是乘在 A 的列上的组合系数,不是拿去点乘 A 的行;本步中 Bv 那个「(3,3) 的小诱惑」就是没按列组合出的错——三条路互查,错在哪儿立刻现形。
这套推导自始至终没用过「方阵」这个条件。设 A 是 m×n、B 是 n×p:B 的每一列是 n 维向量,恰好能被 A 吃进去(A 能处理 n 维输入),吐出 m 维向量——所以 AB 有 p 列、每列 m 维,总尺寸 m×p。「中间的 n」是两个动作接口的尺寸,接不上就断路。维度规则从此不用背:它是「动作接口必须匹配」的自动结果。
把推导的慢镜头完整放一遍,确认没有跳步。目标:找出复合矩阵 C,使对一切 v 都有 Cv = A(Bv)。而矩阵由列决定,所以只需逐列确定 C:C 的第 j 列 = C·eⱼ = A(B(eⱼ))(复合的定义)= A·(B 的第 j 列)(B 作用 eⱼ 恰好交出 B 的第 j 列,本章第 2 节)。到此 C 的每一列都被定死,规则已经在手。把它按元素写开:A·(B 的第 j 列) 的第 i 个分量 = A 第 i 行 [aᵢ₁, aᵢ₂] 与 B 第 j 列 (b₁ⱼ, b₂ⱼ) 的逐项相乘再相加 = aᵢ₁b₁ⱼ + aᵢ₂b₂ⱼ——行乘列四个字,就是这句算术的缩写。n 维推广逐字成立;代价是计算量:m×n 乘 n×p 的矩阵要做 m×n×p 次乘法,大矩阵连乘动辄百亿次运算——「稀疏矩阵」(大量元素为 0)的整套算法学,研究的就是怎样少跟 0 打交道。
工程里这种「动作连乘」天天上演。飞行力学分析常在三套坐标系间换算:机体坐标系 → 风轴坐标系 → 地面坐标系,每步一个矩阵,连续换算就是矩阵连乘;连乘次序必须严格对应实际流程,一旦写反——乘法不可交换!——姿态数据立刻错得离谱。这类 bug 的典型症状是:静止时读数不为零、旋转方向反着来,翻遍代码最后发现,就是两个变换矩阵的次序写反了。
现在可以正面回答本章标题的问题:行乘列规则「凭什么」?因为「先 B 后 A」这个复合动作真实存在,而复合变换作为线性变换必然有自己的矩阵;这个矩阵的列 = A 作用 B 的列——把这句话展开成数字,行乘列就自己掉出来了。规则不是发明,是发现。它也顺手解释了第 4 章留下的悬念:乘法不交换,因为动作次序不可换;消去律失效,因为有的动作「有损」——这个根源,下一节用一张被压扁的平面给你看个明白。
再送一副护目镜:以后每次写乘积,先默念一遍「从右往左」。A₁A₂A₃v 的执行顺序是 v 先过 A₃、再过 A₂、最后过 A₁——离向量最近的矩阵最先动手。初学者最常见的两类事故:一是把 AB 当成「先 A 后 B」,算出的复合方向全反;二是在软件里把变换连乘的次序写反,症状是「静止时读数不为零、旋转方向颠倒」。两类的药方相同:写连乘之前,先把「动作流程」用文字念出来,再按念出的顺序从右往左排矩阵。
5.5为什么乘法不交换
有了「乘法 = 复合动作」的理解,上一章那个「AB ≠ BA」就不再神秘了。
AB 表示「先 B 后 A」;BA 表示「先 A 后 B」。生活里,「先旋转再拉伸」和「先拉伸再旋转」结果通常不一样——所以 AB 和 BA 一般不同。
所以,矩阵乘法不交换,恰恰是「动作顺序不可随意调换」的体现——它不是缺点,而是它忠实反映了现实。
🧠 一句话记忆 乘法 = 连着做动作;AB 先 B 后 A;顺序不同结果不同,所以 AB ≠ BA。
第 4 章例题 7 留了一句「根源下一章揭晓」,现在兑现承诺。取投影矩阵 P = [[1,0],[0,0]]——它把任何点 (x,y) 沿竖直方向压到 x 轴上。这个「压扁」动作,就是消去律失效的几何现场。
📐 例题 5 投影:消去律失效的几何现场
P = [[1,0],[0,0]]。(1) 计算 P·(3,4) 与 P·(3,5);(2) 计算 P²,并用一句话解释「投影两次 = 投影一次」;(3) 把 (3,4)、(3,5) 看作两个 2×1 矩阵 A、B,解释为什么 P·A = P·B 成立而「约去 P」非法。
思路 先算两头看输出是否撞车;再算 P²;最后从「输出相同」反推「输入不可复原」。
解 (1) P·(3,4) = 3×(1,0) + 4×(0,0) = (3,0);P·(3,5) = 3×(1,0) + 5×(0,0) = (3,0)。两个不同的输入,同一个输出。(2) P² = [[1×1+0×0, 1×0+0×0],[0×1+0×0, 0×0+0×0]] = [[1,0],[0,0]] = P:已在 x 轴上的点再投一次,原地不动。(3) P·A = P·B = (3,0) 但 A ≠ B——y 分量 4 与 5 被 P 压没了,输出里根本没有它们的信息;既然两个输入都通向同一输出,从输出就无从判断输入是谁,「约去 P」等于假装信息还在。
答:P·(3,4) = P·(3,5) = (3,0);P² = P;消去律失效的几何根源 = 投影有损。 ⚠ 易错点:矩阵等式两边「约去公因子」的前提是那个公因子代表「信息不丢」的动作;凡是把空间压扁的变换(投影、压平)都不可逆,乘上它们的等式都不能约。
📐 例题 6 旋转与拉伸为何不可交换
M = [[2,0],[0,1]](沿 x 轴拉 2 倍),R = [[0,−1],[1,0]](逆时针转 90°)。(1) 计算 MR 与 RM;(2) 把两者分别作用到 v = (1,0) 上;(3) 用一句话说清「为什么顺序不能换」。
思路 分别按列接力计算;再用「先 M 后 R」「先 R 后 M」两种流程走一遍同一个 v,对比落点。
解 (1) MR 第 1 列 = M·(R 第 1 列) = M·(0,1) = (0,1),第 2 列 = M·(−1,0) = (−2,0),故 MR = [[0,−2],[1,0]];RM 第 1 列 = R·(M 第 1 列) = R·(2,0) = (0,2),第 2 列 = R·(0,1) = (−1,0),故 RM = [[0,−1],[2,0]]。(2) (MR)v = (0,1):先旋转,(1,0) 转到 (0,1),再沿 x 轴拉伸——但点已在 y 轴上,x 拉伸使不上劲,落点 (0,1);(RM)v = (0,2):先拉伸,(1,0) 变 (2,0),再旋转 90°,落点 (0,2)。(3) 旋转会改变「拉伸所指的方向轴」——拉伸沿 x 轴使劲,旋转偏偏把 x 轴挪走,所以先后必不同。
答:MR = [[0,−2],[1,0]],RM = [[0,−1],[2,0]],作用在 (1,0) 上分别得 (0,1) 与 (0,2)。 ⚠ 易错点:MR、RM 都算得动(2×2 乘 2×2 接口对得上),「能算」不等于「相等」;不可交换是常态,可交换才是需要理由的例外。
哪几类矩阵可以交换,值得记成白名单:(1) A 与 I、A 与 O 永远可交换——与「不做」「全毁」为伴,谈不上顺序;(2) A 与自己的幂可交换——A²·A³ 与 A³·A² 都是「连做五次」;(3) 两张对角矩阵可交换:[[2,0],[0,3]]·[[4,0],[0,5]] = [[8,0],[0,15]],反乘一样——各轴独立缩放、互不干涉。一个快速判断口诀:若两个动作「在同一组轴上各自为政」,多半可交换;一旦有旋转、剪切这类「会挪动坐标轴」的动作进场,交换几乎必坏。这张白名单后文大有用处——特征向量的定义,恰恰就是「与某个缩放动作可交换」的那些特殊方向。
把投影家族认全,例题 5 那张「压扁」的画面就有了全家福:[[1,0],[0,0]] 沿竖直方向压到 x 轴;[[0,0],[0,1]] 沿水平方向压到 y 轴;[[0.5,0.5],[0.5,0.5]] 把每个点沿垂直方向压到对角线 y = x 上——比如 (2,0) 被送到 (1,1)、(0,2) 同样被送到 (1,1),两点合流,信息有损;可以验证它同样满足「投影两次 = 投影一次」。工程里大名鼎鼎的数据降维,数学内核就是选一个「尽量少丢信息」的投影方向,把高维数据压到低维——高维点云沿哪个方向看最「厚实」,就往哪个方向投影。你在第 8 章会遇到它的严格版本。
本章的三个画面请打包带走:矩阵是动作,乘法是连招,顺序不可乱,压扁不可逆。它们不是四句漂亮话,而是后文全部剧情的引子——行列式衡量「动作把面积放大几倍」,逆矩阵回答「哪个动作能撤销它」,秩数清点「动作把空间压剩几维」。下一章回到方程组时你会发现,「解方程」无非是反过来问:哪个向量被矩阵作用后,恰好落到了给定的 b 上?而高斯消元,就是机械地把这个「反问题」查个水落石出的手段。
带着三个问题预习下一章:如果矩阵可逆,「反问题」就恰有一解——逆矩阵是怎么把动作「倒放」的?如果矩阵把空间压扁,方程组就会出现「无穷多解」或「无解」——消元过程中哪一行会把这个结局暴露出来?解的「自由度」个数,与被压剩下的维数有什么关系?你会发现:方程组的全部剧情,早在本章「动作」的几何里写好了剧本。
辨析:矩阵乘法是函数复合的『表格版』 中学的复合函数 f(g(x)) 先算内层再算外层,矩阵乘 AB 与它完全同构:向量先被 B 接走、再交给 A,「右边的先动」从来不是矩阵的新发明。由此一脉相承:复合记号 (f∘g)∘h 与 f∘(g∘h) 从不吵架——这正是结合律的函数版;f(g(x)) 与 g(f(x)) 也早就分家(先平方再减一,与先减一再平方,结果不同)——不可交换并非矩阵的怪脾气,而是「复合」这类操作的共性,矩阵只是把其中「线性」的那一批做成了表格。往第 10 章看一眼:线性变换就是满足 f(x+y) = f(x)+f(y)、f(kx) = kf(x) 的函数,矩阵是它们的铭牌——本章问「乘法为什么这样定义」,答案的最高层其实是:它是复合函数在线性世界里的标准化身。
本章小结
- 矩阵 = 线性变换 = 一种动作;Av 是对向量 v 施加动作后的结果。
- 矩阵由列决定:第 i 列 = 基向量 ei 被送到的新位置。
- 矩阵乘法 = 复合变换:AB 表示「先 B 后 A」。
- 「行乘列」规则是从「AB 的列 = A·(B 的列)」推导出来的,不是死记硬背。
- 乘法不交换,因为动作顺序不可调换。
- 复合变换必有自己的矩阵,它的列 = A 作用 B 的列——行乘列规则是被「复合」逼出来的必然,不是人为约定。
- 「压扁」类变换不可逆:不同输入共享同一输出,这正是消去律失效的几何根源。
读完本章,你应该能……
- 说出矩阵 [[2,0],[0,1]] 对空间做了什么动作。
- 解释「矩阵由它的列决定」这句话,并指出第一列、第二列的几何含义。
- 从「先 B 后 A」推导出 (AB) 第一列 = A·(B 的第一列)。
- 用「动作顺序」解释为什么 AB ≠ BA。
- 用「列接力」算一个复合矩阵(如先旋转 90° 再剪切),并用行乘列抽查核对。
- 解释为什么标定线性设备只需测「基准输入」的响应。
- 用投影矩阵演示「变换有损」,并说明它如何解释消去律失效。
- 说出三类「可交换」的矩阵组合,并各给一个理由。
- 写连乘 A₁A₂A₃ 时,先念一遍「从右往左」的执行顺序。
- 说明矩阵乘法为何要求「中间维度对齐」。
思考题
1. 矩阵 [[0,−1],[1,0]] 对向量 (1,0) 和 (0,1) 分别做了什么?整体是什么动作?
提示:(1,0)→(0,1),(0,1)→(−1,0),是把坐标轴逆时针旋转 90°,即旋转动作。
2. 用自己的话解释:为什么矩阵乘法的定义「注定」是行乘列,而不是逐元素相乘?
提示:因为乘法代表复合变换,而复合变换要求「AB 的列 = A 作用 B 的列」,展开后就是行乘列。
3. 设 B 先做「逆时针旋转 90°」,A 再做「横向拉伸 2 倍」,那么 (AB) 的第一列是什么?
提示:先算 B 的第一列(即 e₁ 旋转 90° = (0,1)),再被 A 作用(横向拉伸 2 倍 → (0,1)),所以第一列 = (0,1)。
4. 为什么「先旋转再拉伸」和「先拉伸再旋转」一般不同?这如何解释 AB ≠ BA?
提示:两种顺序作用于同一箭头,结果方向不同;矩阵乘法记录的是动作顺序,顺序不同自然结果不同。
5. f(x, y) = (x², y) 是线性变换吗?用线性性质检验,并指出它把哪条直线掰弯成了什么曲线。
提示:不是。f(2,0) = (4,0) ≠ 2·f(1,0) = (2,0),缩放性破产;直线 y = x 上的点 (t,t) 被送到 (t²,t),满足 x = y²,直线被掰成抛物线。
6. 变换 M 把 e₁ 送到 (2,0)、e₂ 送到 (0,3)。写出 M,并求 M·(1,1);它相当于把平面怎么变形?
提示:M = [[2,0],[0,3]];M(1,1) = 1×(2,0) + 1×(0,3) = (2,3)。它沿两轴分别放大:x 方向拉 2 倍、y 方向拉 3 倍,网格仍是矩形网格,只是疏密变了。
7. 为什么标定一台两输入两输出的线性设备,只需两个「基准输入」?换成三输入两输出,要测几组基准?
提示:两个基向量的响应定死整个线性变换——矩阵的列全知道了,任何输入的响应都是列的组合。三输入设备需要 3 个基准输入,每个响应是二维的,共 3×2 = 6 个标定系数,恰好等于 2×3 矩阵的元素个数。
8. 把 [[0.5,0.5],[0.5,0.5]] 分别作用到 (2,0) 和 (0,2) 上,两个结果说明了什么?这个矩阵是投影吗?
提示:(2,0) → (1,1),(0,2) → (1,1)——不同输入合流到同一输出,信息有损;它的两列都是 (0.5,0.5),把 e₁、e₂ 都送到对角线方向,且可以验证它平方等于自身(投影两次 = 投影一次),是沿垂直方向压到直线 y = x 的投影。
9. 取两个简单「变换」:f(x) = 2x(拉伸)与 g(x) = x + 1(右移)。(1) 算出 f(g(0)) 与 g(f(0)),验证复合顺序不可交换;(2) g 有没有 2×2 矩阵替身?说明理由。
提示:(1) f(g(0)) = f(1) = 2;g(f(0)) = g(0) = 1——顺序不同,结果不同。(2) 没有。任何 2×2 矩阵 A 作用在 (0, 0) 上仍是 (0, 0)(每项都是「乘 0 再加 0」),而 g 把 0 送到了 1——平移会把原点挪走,矩阵乘法只能表达原点原地不动的线性作用。所以平移注定挤不进矩阵的表格,这一限制要到齐次坐标才被打破。