QiuQiu

练习 · 线性代数

(AB)ᵢⱼ 的下标怎么读

矩阵乘法定义里 i、j、k 各管什么。后面所有关于迹和乘法的推导都建立在这个读法上。

12 题

定义

(AB)ij=k=1nAikBkj(AB)_{ij}=\sum_{k=1}^{n}A_{ik}B_{kj}

读法:(AB)ij(AB)_{ij}AA 的第 ii BB 的第 jj 做点积。第一个下标 ii 来自 AA,决定行;第二个下标 jj 来自 BB,决定列;kk 是被求和掉的“中间维度”,AA 的列数 == BB 的行数 =n=n

记忆方式:下标 ikikkjkj 首尾相接,kk 在中间相遇后消失,留下 ijij

点积视角:把 AA 的第 ii 行看成一个行向量 ai=(Ai1,Ai2,,Ain)a_i=(A_{i1},A_{i2},\dots,A_{in}),把 BB 的第 jj 列看成一个列向量 bj=(B1j,B2j,,Bnj)b_j=(B_{1j},B_{2j},\dots,B_{nj}),那么

(AB)ij=aibj=k=1nAikBkj(AB)_{ij}=a_i\cdot b_j=\sum_{k=1}^{n}A_{ik}B_{kj}

k\sum_k 就是点积的展开:两个长度为 nn 的向量,对应位置相乘再加起来。kk 是“第几个分量”。所以 k=12AikBki\sum_{k=1}^{2}A_{ik}B_{ki} 读作:AA 的第 ii 行向量与 BB 的第 ii 列向量做点积,两个向量各有 2 个分量。

行、列的记号(这套题用 NumPy 写法):NumPy 里 A[1, :]AA 的第 2 行,B[:, 0]BB 的第 1 列。方括号里逗号前管行、逗号后管列,冒号表示这一维全取,索引从 0 数。只写一个索引 A[1] 默认取行。

A[1, :]          # A 的第 2 行,也可写 A[1]
B[:, 0]          # B 的第 1 列
A[1] @ B[:, 0]   # 一个数,等于 (A @ B)[1, 0]
(A @ B)[1, 0]    # 数学上的 (AB)_{21}

数学课本的对应记号是 A2,:A_{2,:}B:,1B_{:,1}(从 1 数),也有人写 row(A,2)\operatorname{row}(A,2)a2a_2。填空时两套都接受,但各自的起始不能混:A2,:A_{2,:}A[1, :] 是同一行,A[2, :] 是第 3 行。

于是 (AB)ij=Ai,:B:,j(AB)_{ij}=A_{i,:}\cdot B_{:,j},NumPy 写 (A @ B)[i-1, j-1] == A[i-1] @ B[:, j-1]。下标 ii 落在 AA 的行位,jj 落在 BB 的列位。

题目

第 1 到 4 题和第 7 题里,AA3×23\times2,BB2×42\times4。第 5、6 题把 BB 换成 2×32\times3,这样 ABABBABA 才都是方阵,迹才有定义。

1. 形状与中间维度

ABAB 是几乘几?kk 从 1 跑到几?

  1. 2×22\times2,kk 到 3
  2. 3×43\times4,kk 到 3
  3. 3×43\times4,kk 到 2
  4. 4×34\times3,kk 到 2
解析

外形取 AA 的行数和 BB 的列数:3×43\times4kk 跑的是中间维度,AA 有 2 列、BB 有 2 行,所以到 2。选 B 的人把中间维度和 AA 的行数搞混了。

2. 展开 (AB)31(AB)_{31}

(AB)31(AB)_{31} 等于哪一个?

  1. A31B11+A32B21A_{31}B_{11}+A_{32}B_{21}
  2. A13B11+A23B21A_{13}B_{11}+A_{23}B_{21}
  3. A11B31+A21B32A_{11}B_{31}+A_{21}B_{32}
  4. A31B11+A31B21A_{31}B_{11}+A_{31}B_{21}
解析

AA 的第 3 行是 (A31,A32)(A_{31},A_{32}),BB 的第 1 列是 (B11,B21)(B_{11},B_{21}),点积得 A。 B 把 AA 的行下标写到了第二位,取的是 AA 的第 3 列,但 AA 只有 2 列。 C 用了 BB 的第 3 行,BB 只有 2 行。 D 的 AA 下标没有随 kk 变,不是点积。

3. 展开 (AB)24(AB)_{24}

  1. A21B41+A22B42A_{21}B_{41}+A_{22}B_{42}
  2. A21B14+A22B24A_{21}B_{14}+A_{22}B_{24}
  3. A12B41+A22B42A_{12}B_{41}+A_{22}B_{42}
  4. A24B11+A24B21A_{24}B_{11}+A_{24}B_{21}
解析

AA 的第 2 行 (A21,A22)(A_{21},A_{22})BB 的第 4 列 (B14,B24)(B_{14},B_{24})BB 的列下标 4 要写在第二位。A 和 C 把 4 写到了 BB 的行位置,BB 没有第 4 行。

4. 对角线元素

(AB)ii(AB)_{ii} 用的是什么和什么做点积?

  1. AA 的第 ii 行,BB 的第 ii
  2. AA 的第 ii 列,BB 的第 ii
  3. AA 的第 ii 行,BB 的第 ii
  4. 不做点积,就是 AiiBiiA_{ii}B_{ii}
解析

对角线只是定义里把 jj 换成 ii,读法不变:(AB)ii=kAikBki(AB)_{ii}=\sum_{k}A_{ik}B_{ki},AA 取行、BB 取列。D 是最常见的错觉,(AB)ii(AB)_{ii} 是一个和,不是单项乘积。

5. 迹的双重求和

这一题 AA3×23\times2,BB2×32\times3tr(AB)\operatorname{tr}(AB) 展开成双重求和,范围是哪一个?

  1. i=13k=12AikBki\sum_{i=1}^{3}\sum_{k=1}^{2}A_{ik}B_{ki}
  2. i=12k=13AikBki\sum_{i=1}^{2}\sum_{k=1}^{3}A_{ik}B_{ki}
  3. i=13k=13AikBki\sum_{i=1}^{3}\sum_{k=1}^{3}A_{ik}B_{ki}
  4. i=12k=12AikBki\sum_{i=1}^{2}\sum_{k=1}^{2}A_{ik}B_{ki}
解析

外层 ii 跑对角线,ABAB(3×2)(2×3)=3×3(3\times2)(2\times3)=3\times3,所以到 3;内层 kk 跑中间维度,到 2。两个范围来自不同的地方,不能都写成 3 或都写成 2。顺带一提,原来 BB2×42\times4ABAB3×43\times4,不是方阵,迹没有定义。

6. 换成 BABA

仍取 AA3×23\times2,BB2×32\times3。(原来的 BB2×42\times4 时,BB 有 4 列、AA 有 3 行,BABA 乘不了。)

BABA 是几乘几?

写出 (BA)jj(BA)_{jj}\sum 形式,注意求和变量跑的范围变了。

解析

BABA(2×3)(3×2)=2×2(2\times3)(3\times2)=2\times2。能相乘的条件是 BB 的列数等于 AA 的行数,这里都是 3。

BABABB 在左,取 BB 的第 jjBjiB_{ji};AA 在右,取 AA 的第 jjAijA_{ij}。中间维度是 BB 的列数 =A=A 的行数 =3=3,所以

(BA)jj=i=13BjiAij(BA)_{jj}=\sum_{i=1}^{3}B_{ji}A_{ij}

求和变量叫 ii 还是 kk 无所谓,两个因子先后顺序也无所谓(标量可交换),但范围必须是 3,行列下标不能反。

7. 判断

kAikBki\sum_{k}A_{ik}B_{ki} 是谁的对角元?

  1. (AB)ii(AB)_{ii}
  2. (BA)ii(BA)_{ii}
  3. 两者都是,因为 tr(AB)=tr(BA)\operatorname{tr}(AB)=\operatorname{tr}(BA)
  4. (ATB)ii(A^{\mathsf T}B)_{ii}
解析

看第一个因子 AikA_{ik}:第一个下标是 ii,取的是 AA 的第 ii 行,所以 AA 在左,是 (AB)ii(AB)_{ii}(BA)ii(BA)_{ii} 会写成 kBikAki\sum_k B_{ik}A_{ki}。 C 混淆了两件事:迹相等是求和之后的标量相等,单个对角元 (AB)ii(AB)_{ii}(BA)ii(BA)_{ii} 一般不相等。在本题的形状下(BB2×42\times4,AA3×23\times2)BABA 甚至没有定义;换成第 5、6 题的形状,ABAB3×33\times3BABA2×22\times2,ii 的范围也不同。

8. 数值题 (一)

A=(1234)A=\begin{pmatrix}1&2\\3&4\end{pmatrix},B=(0110)B=\begin{pmatrix}0&1\\1&0\end{pmatrix}。先说出 (AB)12(AB)_{12} 用的是 AA 的哪一行、BB 的哪一列,再算出数值填在下面。

解析

AA 的第 1 行 (1,2)(1,2)BB 的第 2 列 (1,0)(1,0):11+20=11\cdot1+2\cdot0=1。 算出 3 的人用了 BB 的第 2 行 (1,0)(1,0)AA 的第 1 列 (1,3)(1,3),那是 (BA)21(BA)_{21}

9. 数值题 (二)

同上 AABBtr(AB)\operatorname{tr}(AB)tr(BA)\operatorname{tr}(BA) 分别是?

  1. 5566
  2. 5555
  3. 4444
  4. 10101010
解析

AB=(2143)AB=\begin{pmatrix}2&1\\4&3\end{pmatrix},tr(AB)=2+3=5\operatorname{tr}(AB)=2+3=5BA=(3412)BA=\begin{pmatrix}3&4\\1&2\end{pmatrix},tr(BA)=3+2=5\operatorname{tr}(BA)=3+2=5。 两个矩阵不同,迹相同。1010tr(A)tr(B)\operatorname{tr}(A)\cdot\operatorname{tr}(B) 之类的误算,迹对乘法不是同态。

10. 语义题

k=12AikBki\sum_{k=1}^{2}A_{ik}B_{ki} 用向量的语言说,是什么?

  1. AA 的第 ii 行向量 (Ai1,Ai2)(A_{i1},A_{i2})BB 的第 ii 列向量 (B1i,B2i)(B_{1i},B_{2i}) 的点积
  2. AA 的第 ii 列向量与 BB 的第 ii 行向量的点积
  3. AA 的第 ii 行向量与 BB 的第 ii 行向量的点积
  4. AA 的第 ii 行向量的长度乘 BB 的第 ii 列向量的长度
解析

kk 跑的是向量的分量编号。AikA_{ik}ii 固定、kk 变,取的是第 ii 行横着走;BkiB_{ki}kk 变、ii 固定,取的是第 ii 列竖着走。对应分量相乘再求和,就是点积。 D 是 aibi\|a_i\|\,\|b_i\|,点积等于它再乘夹角余弦,只有两向量同向时才相等。

11. 数值题 (三)

A=(1234)A=\begin{pmatrix}1&2\\3&4\end{pmatrix},B=(0110)B=\begin{pmatrix}0&1\\1&0\end{pmatrix}。把 (AB)21(AB)_{21} 拆成点积,分两层填:先用 NumPy 记法指出取的是哪一行、哪一列(从 0 数,符号栏有 [□, :][:, □] 键),再写出具体数值。

行向量的记法:

行向量的数值,写成 (x,y)(x,y):

列向量的记法:

列向量的数值,写成 (x,y)(x,y):

点积结果:

解析

(AB)21(AB)_{21}:第一个下标 2 落在 AA 的行位,是 AA 的第 2 行,NumPy 索引 1,写 A[1, :],数值 (3,4)(3,4);第二个下标 1 落在 BB 的列位,是 BB 的第 1 列,NumPy 索引 0,写 B[:, 0],数值 (0,1)(0,1)

(AB)21=30+41=4(AB)_{21}=3\cdot0+4\cdot1=4
A[1] @ B[:, 0]    # 4
(A @ B)[1, 0]     # 4

对照第 9 题的 AB=(2143)AB=\begin{pmatrix}2&1\\4&3\end{pmatrix},左下角正是 4。 常见错法:写 A[2, :] 是把数学下标直接搬进 NumPy,那是第 3 行,越界;填 (1,3)(1,3) 是取了 AA 的第 1 列;a2 没有下划线,在 LaTeX 里是两个并列符号,要写 a_2

12. NumPy 与数学下标

(A @ B)[1, 0] 对应数学上的哪个元素?

  1. (AB)10(AB)_{10}
  2. (AB)21(AB)_{21}
  3. (AB)12(AB)_{12}
  4. (BA)21(BA)_{21}
解析

NumPy 从 0 数,数学从 1 数,两个索引各加一:[1, 0] 是第 2 行第 1 列,(AB)21(AB)_{21}。 A 直接照搬数字;C 把行列反了;D 把 A @ B 读成了 BABA,@ 的左右顺序就是矩阵乘法的顺序。

在 Mathlib 里

这一步就是 Matrix.mul_apply:

theorem Matrix.mul_apply : (M * N) i k = ∑ j, M i j * N j k

Mathlib 用 j 当中间变量、k 当列下标,字母和课本不同,形状一样:左因子的第二个下标和右因子的第一个下标相同,被求和掉。对迹做推导时 i = k,Lean 会自动统一。trace_transpose_mul 的证明只写了 Finset.sum_comm,是因为 trace* 按定义展开(mul_apply)是定义性相等,rfl 级别,不需要显式引用。

相关阅读:Linear Algebra - Trace