MatrixCalc

矩阵乘法计算器

计算两个 50×50 以内矩阵的乘积,把每个元素展开成点积——另含加减法、数乘、转置与整数次幂。

矩阵 A
: 3
: 3
矩阵 B
: 3
: 3
运算
结果
选择一个运算以在此处查看结果。错误信息也会显示在这里。

提示:可调整矩阵大小(最多 50×50)。A×B 要求 A 的列数等于 B 的行数。行列式/逆/迹/幂 需要方阵。

React, Tailwind & shadcn/ui. No external math deps. — 中文

在上方填好矩阵 A 和 B,点击 A × B。尺寸不匹配时按钮会变灰,并提示哪些维度必须相等。 展开步骤可以看到每个元素被写成乘积之和,与你手写的形式完全一致。同一个标签页里还有加法、减法和 转置,标量标签页则负责 k·AAⁿ——这些下面都会讲到。

维度规则

要把 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)

12
34
×
56
78
=
1922
4350

验一下第一个元素: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 相加——结果也保持这个尺寸。

12
34
+
56
78
=
68
1012

由于它是按位置进行的,加法继承了你早就熟悉的算术: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 成为点积标准写法的原因。

123
456
ᵀ =
14
25
36

有三条恒等式值得背下来。转置两次回到原矩阵:(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 本身。

11
01
² =
12
01
,一般地 Aⁿ =
1n
01

平方不是逐元素的:右上角是 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。

常见问题

两个矩阵什么时候可以相乘?
当第一个矩阵的列数等于第二个矩阵的行数时。2×3 可以乘 3×4,结果是 2×4。
为什么 A×B 不等于 B×A?
因为结果的元素由第一个矩阵的行与第二个矩阵的列组合而成。调换顺序会改变这些组合,往往连结果的尺寸都会变。
什么是哈达玛积?
两个同尺寸矩阵逐元素相乘。它是另一种运算,在线性代数中通常并不指它。
怎么用矩阵乘向量?
列向量就是 n×1 矩阵。把 B 设成一列,A×B 就能给出你要的结果。
尺寸不同的矩阵可以相加吗?
不可以。加法和减法要求维度完全相同,因为它们按位置逐个进行,每个位置都必须在两个矩阵里都存在。
为什么把 3×3 矩阵翻倍后行列式变成了八倍?
因为标量作用在三行中的每一行上,行列式为每一行各乘一次。一般地 det(k·A) = kⁿ·det(A)。

其他计算器