跳至主要内容
数学
线性代数 · 一行与一列

一行与一列,相遇成积

从原点向右走 1、再向上走 2,就到达坐标为 (1,2)(1,2) 的点。原点就是我们计算位置时的起点。用一个箭头把起点和终点连起来。现在按同一条规则移动平面上的每一个点,这个箭头会指向哪里?一小张数表又怎样告诉我们答案?

在矩阵与线性变换中,我们用两列分别记录 (1,0)(1,0) 和 (0,1)(0,1) 这两个箭头的新位置,得到一张叫作矩阵的数表。一个向量由这两个基本方向组合而成,所以两列的变化也决定了它的新位置。这里的每一次乘法、每一次加法,都要和这个组合过程对应起来。两个矩阵相乘时,我们仍然要回答同一个问题:每个基本方向最终去了哪里?

01矩阵在移动什么?

I =
1001
→
A =
2131

箭头 (1,0)(1,0) 变成了第一列 (2,3)(2,3),箭头 (0,1)(0,1) 变成了第二列 (1,1)(1,1)。左边的 II 叫单位矩阵:它的两列让这两个箭头留在原处。

这里的向量告诉我们横向和竖直方向各移动多少,用从原点出发的箭头表示。从原点出发,(x,y)(x,y) 会到达坐标为 (x,y)(x,y) 的点。其中 xx 是横向的移动量,yy 是竖直的移动量。正数向右或向上,负数向左或向下。我们可以分两部分搭出它:x(1,0)=(x,0)x(1,0)=(x,0),y(0,1)=(0,y)y(0,1)=(0,y),相加就是 (x,0)+(0,y)=(x,y)(x,0)+(0,y)=(x,y)。现在选用这样一条规则:保留这两个倍数,把两个基本箭头换成它们的新位置,再组合起来。这样的规则叫线性变换。矩阵的两列就记录了这些新位置。倍数为负时,箭头反向;倍数是分数时,就取相应比例的长度。

x =
12
→
A x =
45

取 x=1x=1、y=2y=2,这份配方给出 (4,5)(4,5):第一列取 1 份,第二列取 2 份。

先分别乘倍数:1(2,3)=(2,3)1(2,3)=(2,3),2(1,1)=(2,2)2(1,1)=(2,2)。再相加:(2,3)+(2,2)=(4,5)(2,3)+(2,2)=(4,5)。

02为什么取列,不取行?

给四个数分别命名,并把输入竖着写: A=(abcd),x=(xy).A=\begin{pmatrix}a&b\\c&d\end{pmatrix},\qquad \mathbf{x}=\begin{pmatrix}x\\y\end{pmatrix}. 粗体 x\mathbf{x} 表示整个向量,普通的 xx、yy 表示它的两个分量。竖着写成一列,就叫列向量。把这一列横着写成一行,叫作转置,记作 xT=(x y)\mathbf{x}^{T}=(x\ y)。 为什么取 AA 的列?因为我们约定把两个基本箭头的新位置放在两列里,同时把输入写成列向量。因此,保留原来的两个倍数,就得到: Ax=x(ac)+y(bd).A\mathbf{x}=x\begin{pmatrix}a\\c\end{pmatrix}+y\begin{pmatrix}b\\d\end{pmatrix}.

每一列乘上相应倍数,得到两个向量。把它们相同位置的分量相加,就是输出向量。我们把这两步分别写出来。

x(a,c)=(ax,cx)x(a,c)=(ax,cx)y(b,d)=(by,dy)y(b,d)=(by,dy)每个倍数都要乘到这一列的两个分量上。

对应位置的分量分别相加:第一个分量是 ax+byax+by,第二个分量是 cx+dycx+dy,所以 (ax,cx)+(by,dy)=(ax+by,cx+dy).(ax,cx)+(by,dy)=(ax+by,cx+dy).

A(2×2)·x(2×1)=b (2×1)
A x =
45

看第一个输出 ax+byax+by:它把 x,yx,y 与 AA 第一行的 a,ba,b 配对。第二个输出 cx+dycx+dy,则把同样的 x,yx,y 与第二行的 c,dc,d 配对。把相同位置的数相乘,再把乘积相加,就叫点积。例如,(1,2)⋅(2,1)=1×2+2×1=4(1,2)\cdot(2,1)=1\times2+2\times1=4。若第一组数记作 (u,v)(u,v),第二组记作 (s,t)(s,t),就写成 (u,v)⋅(s,t)=us+vt(u,v)\cdot(s,t)=us+vt。所以,点积是计算刚才那份列组合的另一种办法。点积也有几何解释,这里只需要它的计算方法。

尺寸必须对得上:AA 有两列,xx 就必须有两个分量。2×22×2 矩阵乘三分量向量没有定义;没有第三列可取。

03把 x 抬到 A 上方

我们继续计算刚才的 Ax=bA\mathbf{x}=\mathbf{b}。输出从上到下的两个分量,分别记作 b1b_1、b2b_2。点击播放,也可以用前后箭头或步骤滑条逐步看。青色数字来自输入向量,标着 x\mathbf{x};其余数字来自 AA。原来的列向量先抬起,展开成一行,放到 AA 上方。它的每个分量与高亮行的一个数配对,中间出现乘号。两个数靠拢,变成乘积;两个乘积再靠拢,变成总和,最后移入输出。处理下一行前,输入向量回来,方便再次使用。A 的每一行都留在原位,直到这一行的数字合并成乘积;完成两个输出后,再恢复原矩阵。暂停会停住当前动作,前后箭头和滑条可以查看每一步完成时的画面。这里的移动和转置只是为了看清计算;原来的乘法仍然是矩阵乘列向量。

A x从 A 和列向量 x 开始
1 / 16
从 A 和列向量 x 开始
1 / 16
A(12)=(??)A\begin{pmatrix}1\\2\end{pmatrix}=\begin{pmatrix}?\\?\end{pmatrix}

第一行算出 1×2+2×1=2+2=41\times2+2\times1=2+2=4,第二行算出 1×3+2×1=3+2=51\times3+2\times1=3+2=5。把两个和从上到下放好,就得到 b=(4,5)\mathbf{b}=(4,5)。

04左边的行向量:xA

如果把向量放在左边呢?对这里的 2×22\times2 矩阵,左边若仍是 2×12\times1 的列向量,尺寸就对不上:它只有一列,不能与 AA 的两行配对。因此,这一节把同样的两个数写成一行,并让 x=(x y)\mathbf{x}=(x\ y) 表示这个行向量。逐个取出它的分量。第一个分量乘 AA 第一行,第二个乘第二行,再把两行相加:xA=x(a,b)+y(c,d).\mathbf{x}A=x(a,b)+y(c,d).x(a,b)=(ax,bx),y(c,d)=(cy,dy).x(a,b)=(ax,bx),\qquad y(c,d)=(cy,dy).xA=(ax+cy,  bx+dy).\mathbf{x}A=(ax+cy,\;bx+dy).第一个输出把 x,yx,y 与第一列 (a,c)(a,c) 配对;第二个把它们与第二列 (b,d)(b,d) 配对,所以仍然可以用点积计算。我们相加的是两条同样长的行,因此输出也是一行。把输出行记作 c=(c1 c2)\mathbf{c}=(c_1\ c_2)。下标从左到右数,分别表示第一个和第二个分量。

x A从行向量 x 和 A 开始
1 / 16
从行向量 x 和 A 开始
1 / 16
(12)A=(??)\begin{pmatrix}1&2\end{pmatrix}A=\begin{pmatrix}?&?\end{pmatrix}

动画先把输入行向量竖起来,移到 AA 当前列左边,让每一对数左右相遇。AA 的各列留在原位,直到数字合并成乘积;两个乘积再上下合并,总和向下移入输出行。处理下一列前,输入分量回来;全部完成后,再恢复原矩阵和行向量。临时竖起来只是为了看清配对,原乘法中的输入仍是行向量。原来的乘法仍然是行向量乘矩阵。两次求和分别是 1×2+2×3=81\times2+2\times3=8、1×1+2×1=31\times1+2\times1=3,所以输出行是 (8,3)(8,3)。到这里,左边是矩阵时,每一行给出一个和;右边是矩阵时,每一列给出一个和。接下来,把这两种读法合起来,就能计算两个矩阵相乘。

05两个矩阵相乘

设 AA 有 mm 行、nn 列,BB 有 nn 行、kk 列,把乘积记作 C=ABC=AB。先把 AA 第一行看成行向量。按照刚才的方法,它乘 BB,会对 BB 的每一列给出一个输出。这 kk 个数,组成 CC 第一行。再对 AA 的每一行重复,因此 CC 有 mm 行、kk 列。如果只想找其中一个数,就选定它的行号 ii 和列号 jj,记作 CijC_{ij}。AA 第 ii 行决定答案在哪一行;BB 第 jj 列决定它在这一行的哪个位置。把对应的数相乘,再相加:

Cij=∑r=1nAirBrjC_{ij}=\sum_{r=1}^{n}A_{ir}B_{rj}

大符号 ∑\sum 表示把这些项全部相加。rr 从 11 数到 nn,依次取出每一个配对位置。展开写,就是:Cij=Ai1B1j+Ai2B2j+⋯+AinBnj.C_{ij}=A_{i1}B_{1j}+A_{i2}B_{2j}+\cdots+A_{in}B_{nj}.若 n=1n=1,就只有第一个乘积。例如,C21C_{21} 用 AA 第 2 行和 BB 第 1 列。第 2 行确定输出的行,第 1 列确定这一行的第一个数。也可以按列看。把 BB 第 jj 列当作一个列向量,左边乘 AA,就会对 AA 的每一行给出一个输出,恰好组成 CC 第 jj 列。逐列重复,就得到同一个矩阵。为什么中间的尺寸必须相同?BB 的每一列有 nn 个分量,分别作为 AA 的 nn 列的倍数。数量不同,就至少有一个数找不到配对。按行做点积时,缺少的也是这个配对。

A =
2131
×
B =
1234
=
C =
5???
A 的第 1 行 · B 的第 1 列
2×1+1×3=2+3=52\times1+1\times3=2+3=5
1 / 4
A(m×n)·B(n×k)=C(m×k)

中间的两个数量必须相同,外边的两个数量给出输出的形状。例如,2×32\times3 矩阵乘 3×43\times4 矩阵,得到 2×42\times4 矩阵。即使两种顺序都有定义,结果也可能不同。这里 (AB)11=2×1+1×3=5(AB)_{11}=2\times1+1\times3=5,而 (BA)11=1×2+2×3=8(BA)_{11}=1\times2+2\times3=8。只要有一个位置不同,就说明 AB≠BAAB\ne BA。因此,矩阵乘法一般不满足交换律。

一个乘积,三种读法

Ax

列向量与 A 的行相遇;输出仍是列。

xA

行向量与 A 的列相遇;输出是一行。

AB

A 的每一行与 B 的每一列相遇;C 的每个元素都是点积。

检查一下

A 是 2×32×3,B 是 3×43×4。ABAB 的形状是什么?C23C_{23} 由哪些数相乘得到?

A 有 2 行可选,B 有 4 列可选,所以 AB 是 2×42\times4。C23C_{23} 取 A 第 2 行和 B 第 3 列,每组都有三个数,因此要加三个乘积:C23=A21B13+A22B23+A23B33。C_{23}=A_{21}B_{13}+A_{22}B_{23}+A_{23}B_{33}。