在上方填好矩阵 A 和 B,点击 A × B。尺寸不匹配时按钮会变灰,并提示哪些维度必须相等。 展开步骤可以看到每个元素被写成乘积之和,与你手写的形式完全一致。同一个标签页里还有加法、减法和 转置,标量与幂标签页则负责 k·A 和 Aⁿ——这些下面都会讲到。
维度规则
要把 m×n 的矩阵乘以 n×p 的矩阵,里面的两个数必须相等:A 的列数 要等于 B 的行数。结果是 m×p,也就是外面的两个数。正因如此,A × B 可能完全合法,而 B × A 却根本没有定义。
行乘列的规则
乘积中第 (i, j) 个元素,是 A 的第 i 行与 B 的第 j 列的点积:
c(i,j) = a(i,1)·b(1,j) + a(i,2)·b(2,j) + … + a(i,n)·b(n,j)
| 1 | 2 |
| 3 | 4 |
| 5 | 6 |
| 7 | 8 |
| 19 | 22 |
| 43 | 50 |
验一下第一个元素:1·5 + 2·7 = 19。四个元素各自都是一个小小的点积,计算器会在步骤面板里把四次 展开全部打印出来。
AB 不是 BA
矩阵乘法不满足交换律。BA 常常根本没有定义;即使两个乘积都存在,它们 通常也是不同的矩阵。把一串变换的顺序颠倒过来,发生的事情确实会变——先旋转再反射,和先反射再旋转 不是一回事。用同一对矩阵按下两个按钮比较一下就知道了。
还有一条提醒:A·B = 0 并不意味着 A 或 B 为零矩阵。矩阵和普通数不同, 它有零因子。
仍然成立的性质
- 结合律:
(A·B)·C = A·(B·C) - 分配律:
A·(B + C) = A·B + A·C - 单位元:
I·A = A·I = A - 转置颠倒顺序:
(A·B)ᵀ = Bᵀ·Aᵀ - 行列式相乘:
det(A·B) = det(A)·det(B) - 秩不会增大:
rank(A·B) ≤ min(rank(A), rank(B))
加法、减法与数乘
加法和减法是完全符合直觉的那两种运算:逐元素进行,没有意外。两个矩阵的尺寸必须相同——2×3 只能和 另一个 2×3 相加——结果也保持这个尺寸。
| 1 | 2 |
| 3 | 4 |
| 5 | 6 |
| 7 | 8 |
| 6 | 8 |
| 10 | 12 |
由于它是按位置进行的,加法继承了你早就熟悉的算术:A + B = B + A,三项相加时怎么加括号也无所谓。 这与乘法形成了真正的对照。减法是加上相反数,所以 A − B 就是 A + (−1)·B,顺序照常有影响,正如 5 − 3 与 3 − 5 不同。
数乘把每个元素都乘以同一个数,对形状没有任何要求。有一个推论几乎让所有人意外:把矩阵放大 k 倍, 它的行列式并不是乘以 k。对 n×n 矩阵,det(k·A) = kⁿ·det(A),因为 n 行每一行 都被放大了,行列式就为每一行各乘一次。把一个 3×3 矩阵翻倍,它的行列式会变成八倍。迹只是简单的 求和,因此表现如你所料:tr(k·A) = k·tr(A)。
转置
转置是把矩阵沿主对角线翻折:第 i 行第 j 列的元素移到第 j 行第 i 列。m×n 变成 n×m,所以这个运算 对任何形状都有定义。列向量变成行向量,这正是 xᵀy 成为点积标准写法的原因。
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 1 | 4 |
| 2 | 5 |
| 3 | 6 |
有三条恒等式值得背下来。转置两次回到原矩阵:(Aᵀ)ᵀ = A。对和转置可以分配:(A + B)ᵀ = Aᵀ + Bᵀ。但对 乘积转置会颠倒顺序:(A·B)ᵀ = Bᵀ·Aᵀ,而不是 Aᵀ·Bᵀ。这个颠倒是形状逼出来的——若 A 是 2×3、 B 是 3×4,则 Aᵀ 是 3×2、Bᵀ 是 4×3,只有 Bᵀ·Aᵀ 的维度对得上。等于自身转置的矩阵叫作对称矩阵,而对称矩阵的性质好得出奇:它们的特征值一定是实数,也正是Cholesky 分解适用的那一类。
幂
Aⁿ 表示把 A 与自身相乘 n 次,只对方阵有意义。A⁰ 是单位阵而不是零矩阵,A¹ 就是 A 本身。
| 1 | 1 |
| 0 | 1 |
| 1 | 2 |
| 0 | 1 |
| 1 | n |
| 0 | 1 |
平方不是逐元素的:右上角是 1·1 + 1·1 = 2,而不是 1² = 1。计算器采用快速幂,所以 A¹⁶ 只要四次乘法 而不是十五次。凡是有过程重复的地方都会出现幂:在马尔可夫链中,若 P 存放一步的转移概率,则 Pⁿ 存放 n 步的转移概率;在邻接矩阵中,Aⁿ 的第 (i, j) 个元素数的是从顶点 i 到 j 长度为 n 的路径条数。指数 非常大时请改用对角化:若 A = P·D·P⁻¹ 且 D 为对角阵,则 Aⁿ = P·Dⁿ·P⁻¹,而这要从特征值开始。
矩阵乘法为什么这样定义
行乘列的规则乍看是硬凑出来的,其实它是被「复合」这件事逼出来的。把矩阵看成线性变换:B 先作用在向量 上,A 再作用在结果上。若要有一个矩阵 C 能一步完成这两件事,也就是让 C·x 永远等于 A·(B·x),那么 C 的 各个成分就只能按现在这个规则来算。矩阵乘法不是被规定成这样的,而是被推导成这样的。
这个视角顺带解释了别的性质。结合律成立,是因为变换的复合本来就是结合的。不满足交换律,是因为先做哪个 变换本来就有分别。维度必须匹配,是因为 B 的输出空间必须正是 A 的输入空间。就连转置颠倒顺序这一条, 在这个框架下也不再是需要死记的例外。
常见错误
- 逐元素相乘。矩阵乘法不是
a(i,j)·b(i,j)。那种运算确实存在——哈达玛积——但它不是A × B的含义。 - 以为 AB = BA。矩阵乘法不满足交换律。
- 断定某个因子为零。
A·B = 0并不表示 A 或 B 是零矩阵。 - 写成 (A·B)ᵀ = Aᵀ·Bᵀ。顺序要颠倒。这是转置中最常见的失误。
- 把每个元素各自乘方。A² 是 A·A,不是元素平方构成的矩阵。两者只在对角矩阵上一致。
- 给矩阵加上一个数。A + 3 没有意义。要在对角线上加 3,请加 3·I。