LINEAR ALGEBRA LAB
LINEAR ALGEBRA / 02

每一个结果,都有迹可循。

选中一个结果,看一行与一列,如何相遇。

交互式学习
×

矩阵乘法

A × B = C
矩阵维度A 的列数 = B 的行数
A2 × 3
B3 × 2
C2 × 2
A 的第 1 行B 的第 1 列点击 C 中的数字,追溯计算
FOLLOW THE NUMBERS

C1,1的计算过程

O(mkn)

一行遇见一列。将 A 的第 1 行,与 B 的第 1 列逐项相乘,再求和。

C1,1 =1 × 1 + 2 × 3 + 3 × 5= 22
步骤 1 / 3 · 当前累计 1
换一种顺序,得到同一个答案。

三种算法采用不同的计算顺序,复杂度均为 O(mkn)。分块的优势在于数据访问;小矩阵的动画速度不代表算法性能。显示最多 4 位小数,计算保留原始精度。

DOT PRODUCT

逐项内积

选取 A 的一行和 B 的一列,对应元素相乘后相加,就得到结果矩阵中的一个数。重复这个过程,填满整个结果矩阵。

Cᵢⱼ = Σᵣ Aᵢᵣ × Bᵣⱼ
时间复杂度
O(mkn) · 方阵 O(n³)
空间复杂度
O(1) 额外空间;输出矩阵 O(mn)

计算过程

for i in rows(A)
  for j in columns(B)
    for r in columns(A)
      C[i,j] += A[i,r] * B[r,j]

m、k、n 分别对应 A 的行数、公共维度和 B 的列数。完整计算需要 mkn 次乘法;改变循环顺序不会改变渐近复杂度。

更快的算法呢?了解 Strassen

Strassen 把两个 2×2 块矩阵相乘所需的 8 次块乘法减少为 7 次。递归应用后,方阵时间复杂度为 O(n^log₂7),约 O(n²·⁸⁰⁷)。它引入更多加减法与中间数据,小矩阵并不一定更快。本实验演示的三种算法均为经典乘法,没有运行 Strassen。

工具实验室