Skip to content
本博客自 2023 年 4 月 4 日起转为归档状态,可能不再发表新的博文。点此了解博主的竞赛生涯
This blog has been archived by the owner since April 4, 2023. It may no longer have new updates.

矩阵学习笔记

笔记约 2.9 千字
检测到 KaTeX 加载失败,可能会导致文中的数学公式无法正常渲染。

在数学中,矩阵(Matrix)是一个按照长方阵列排列的实数或复数集合,最早来自于方程组的系数及常数所构成的方阵,是高等代数学中的常见工具。

#矩阵

n×mn \times m 个数 ai,ja_{i, j} 排成的 nnmm 列的数表叫做 nnmm 列的矩阵,简称 n×mn \times m 矩阵。记作:

A=[a1,1a1,2a1,ma2,1a2,2a2,man,1an,2an,m]A = \begin{bmatrix} a_{1, 1} & a_{1, 2} & \cdots & a_{1, m} \\ a_{2, 1} & a_{2, 2} & \cdots & a_{2, m} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & \cdots & a_{n, m} \\ \end{bmatrix}

n×mn \times m 个数称为矩阵 AA 的元素,简称为元。数 ai,ja_{i, j} 位于矩阵 AA 的第 ii 行第 jj 列,称为矩阵 AA(i,j)(i, j) 元。以数 ai,ja_{i, j}(i,j)(i, j) 元的矩阵也可记作 [ai,j][a_{i, j}][ai,j]n×m[a_{i, j}]_{n \times m}

如果矩阵 AA 的元素可以写成只与其行数 ii 与列数 jj 有关的统一函数 ff,那么也可以使用 A=[f(i,j)]n×mA = [f(i, j)]_{n \times m} 作为 AA 的简写。

n×mn \times m 矩阵 AA 也可记作 AnmA_{nm}

#矩阵的基本运算

矩阵的基本运算包括加法、减法、数乘、转置、共轭等。

#加(减)法

对于两个同型(行数、列数均相同)的矩阵 AABB,加法就是将对应 (i,j)(i, j) 元做加法运算。如:

[114514]+[123456]=[1+11+24+35+41+54+6]=[2379610]\begin{bmatrix} 1 & 1 & 4 \\ 5 & 1 & 4 \\ \end{bmatrix} + \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ \end{bmatrix} = \begin{bmatrix} 1 + 1 & 1 + 2 & 4 + 3 \\ 5 + 4 & 1 + 5 & 4 + 6 \\ \end{bmatrix} = \begin{bmatrix} 2 & 3 & 7 \\ 9 & 6 & 10 \\ \end{bmatrix}

减法运算同理。

矩阵的加(减)法运算满足结合律和交换律:

A+B=B+A(A+B)+C=A+(B+C)\begin{aligned} A + B &= B + A \\ (A + B) + C &= A + (B + C) \end{aligned}

#数乘

矩阵的数乘是指一个数乘以一个矩阵,只需要将这个数乘到矩阵的每个元素上即可。如:

2×[114514]=[2×12×12×42×52×12×4]=[2281028]2 \times \begin{bmatrix} 1 & 1 & 4 \\ 5 & 1 & 4 \\ \end{bmatrix} = \begin{bmatrix} 2 \times 1 & 2 \times 1 & 2 \times 4 \\ 2 \times 5 & 2 \times 1 & 2 \times 4 \\ \end{bmatrix} = \begin{bmatrix} 2 & 2 & 8 \\ 10 & 2 & 8 \\ \end{bmatrix}

矩阵的数乘运算满足结合律和分配律:

(λμ)A=λ(μA)(λ+μ)A=λA+μAλ(A+B)=λA+λB\begin{aligned} (\lambda \mu) A &= \lambda (\mu A) \\ (\lambda + \mu) A &= \lambda A + \mu A \\ \lambda (A + B) &= \lambda A + \lambda B \\ \end{aligned}

矩阵的加法、减法和数乘运算合称为矩阵的线性运算。

#转置

将矩阵 AA 的行换成同序数的列所得到的新矩阵称为 AA 的转置矩阵,这一过程称为矩阵的转置,记为 ATA^T。如:

[114514]T=[151144]\begin{bmatrix} 1 & 1 & 4 \\ 5 & 1 & 4 \\ \end{bmatrix}^T = \begin{bmatrix} 1 & 5 \\ 1 & 1 \\ 4 & 4 \\ \end{bmatrix}

矩阵的转置运算满足以下运算律:

(AT)T=A(λA)T=λAT(AB)T=BTAT\begin{aligned} (A^T)^T &= A \\ (\lambda A)^T &= \lambda A^T \\ (A B)^T &= B^T A^T \\ \end{aligned}

#共轭

对于一个复矩阵,其共轭矩阵定义为 Ai,j=Ai,jA_{i, j} = \overline{A_{i, j}}。如:

A=[3+i522ii]A=[3i52+2ii]\begin{array}{cc} A = \begin{bmatrix} 3 + i & 5 \\ 2 - 2i & i \\ \end{bmatrix} & \overline{A} = \begin{bmatrix} 3 - i & 5 \\ 2 + 2i & -i \\ \end{bmatrix} \end{array}

矩阵的共轭转置定义为 Ai,j=Aj,i{A^*}_{i, j} = \overline{A_{j, i}}(也可记作 A=(A)T=ATA^* = (\overline{A})^T = \overline{A^T})。如:

A=[3+i522ii]A=[3i2+2i5i]\begin{array}{cc} A = \begin{bmatrix} 3 + i & 5 \\ 2 - 2i & i \\ \end{bmatrix} & A^* = \begin{bmatrix} 3 - i & 2 + 2i \\ 5 & -i \\ \end{bmatrix} \end{array}

#矩阵乘法

两个矩阵的乘法运算仅当第一个矩阵 AA 的列数和第二个矩阵 BB 的行数相等时才能定义。如 An×m,Bm×pA_{n \times m}, B_{m \times p} 的乘积 CC 是一个 n×pn \times p 矩阵 C=[ci,j]C = [c_{i, j}],它的任意一个元素值为:

ci,j=ai,1×b1,j+ai,2×b2,j++ai,m×bm,j=k=1m(ai,k×bk,j)c_{i, j} = a_{i, 1} \times b_{1, j} + a_{i, 2} \times b_{2, j} + \cdots + a_{i, m} \times b_{m, j} = \sum_{k=1}^m (a_{i, k} \times b_{k, j})

将此乘积记为 C=ABC = AB。如:

[102131]×[312110]=[(1×3+0×2+2×1)(1×1+0×1+2×0)(1×3+3×2+1×1)(1×1+3×1+1×0)]=[5142]\begin{aligned} & \begin{bmatrix} 1 & 0 & 2 \\ -1 & 3 & 1 \\ \end{bmatrix} \times \begin{bmatrix} 3 & 1 \\ 2 & 1 \\ 1 & 0 \\ \end{bmatrix} \\ = & \begin{bmatrix} (1 × 3 + 0 × 2 + 2 × 1) & (1 × 1 + 0 × 1 + 2 × 0) \\ (-1 × 3 + 3 × 2 + 1 × 1) & (-1 × 1 + 3 × 1 + 1 × 0) \\ \end{bmatrix} \\ = & \begin{bmatrix} 5 & 1 \\ 4 & 2 \\ \end{bmatrix} \end{aligned}

矩阵乘法满足结合律、左分配律、右分配律,但不满足交换律:

(AB)C=A(BC)(A+B)C=AC+BCC(A+B)=CA+CB\begin{aligned} (AB)C &= A(BC) \\ (A+B)C &= AC + BC \\ C(A+B) &= CA + CB \\ \end{aligned}

#单位矩阵

nn 阶单位矩阵 InI_n 是一个 n×nn \times n 的方形矩阵,其主对角线上的所有数为 11,其余数为 00

I1=[1],I2=[1001],I3=[100010001], ,In=[100010001]\begin{array}{ccccc} I_1 = \begin{bmatrix} 1 \\ \end{bmatrix} , & I_2 = \begin{bmatrix} 1 & 0 \\ 0 & 1 \\ \end{bmatrix} , & I_3 = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} , & \cdots , & I_n = \begin{bmatrix} 1 & 0 & \cdots & 0 \\ 0 & 1 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 1 \\ \end{bmatrix} \end{array}

单位矩阵有一个特殊性质:任何矩阵乘上这个矩阵都得它本身,即 AI=AAI = A。这个性质在进行矩阵快速幂的时候会用到。

#矩阵快速幂

矩阵快速幂和一般的快速幂类似,都是通过运用结合律来减少乘法运算的次数来达到提速的目的的。

Ak={Iif k=0A×Ak1if k mod 2=1A2k÷2if k mod 2=0\large A^k = \begin{cases} \begin{array}{ll} I & \normalsize \text{if } k = 0 \\ A \times A^{k - 1} & \normalsize \text{if } k \bmod 2 = 1 \\ A^{ {2}^{k \div 2} } & \normalsize \text{if } k \bmod 2 = 0 \\ \end{array} \end{cases}

#矩阵加速递推

#斐波那契数列

斐波那契数列的递推公式如下:

fn={1if n{1,2}fn1+fn2if n3f_{n} = \begin{cases} 1 & \text{if } n \in \{1, 2\} \\ f_{n - 1} + f_{n - 2} & \text{if } n \geq 3 \\ \end{cases}

可以看出 fnf_nfn1f_{n - 1} 是存在一定关系的,可以构造一个多项式来找出关系:

fn=fn1+fn2fn1=fn1(1)\tag{1} \begin{aligned} f_{n} &= f_{n - 1} + f_{n - 2} \\ f_{n - 1} &= f_{n - 1} \\ \end{aligned}

x1=fn1,x2=fn2,y1=fn,y2=fn1x_1 = f_{n - 1}, x_2 = f_{n - 2}, y_1 = f_{n}, y_2 = f_{n - 1},则 1 式可化为以下形式:

y1=x1+x2y2=x1(2)\tag{2} \begin{aligned} y_1 &= x_1 + x_2 \\ y_2 &= x_1 \\ \end{aligned}

这种齐次线性方程组可以使用 系数矩阵×N 维向量\text{系数矩阵} \times \text{N 维向量} 的形式来表示,即:

AX=BAX = B

则有:

[y1y2]=[1110][x1x2](3)\tag{3} \begin{bmatrix} y1 \\ y2 \\ \end{bmatrix} = \begin{bmatrix} 1 & 1 \\ 1 & 0 \\ \end{bmatrix} \begin{bmatrix} x1 \\ x2 \\ \end{bmatrix}

F(n)=[fnfn1]F(n) = \begin{bmatrix} f_n \\ f_{n - 1} \end{bmatrix},由 3 式得:

F(n)=[1110]n1[f1f0](4)\tag{4} F(n) = \begin{bmatrix} 1 & 1 \\ 1 & 0 \\ \end{bmatrix}^{n - 1} \begin{bmatrix} f_1 \\ f_0 \\ \end{bmatrix}

这样就将本节刚开始的递推式转换成了一个求解矩阵幂运算的通项公式,使用上一节中提到的矩阵快速幂的知识即可将复杂度优化到 log\log 级别。

#推广

例题:P1939 【模板】矩阵加速(数列)

由题可得该数列的递推公式:

fn={1if n{1,2,3}fn1+fn3if n4f_{n} = \begin{cases} 1 & \text{if } n \in \{1, 2, 3\} \\ f_{n - 1} + f_{n - 3} & \text{if } n \geq 4 \\ \end{cases}

与上题相同,可以构造一组多项式来找出关系:

fn=fn1+fn3fn1=fn1fn2=fn2fn3=fn3(1)\tag{1} \begin{aligned} f_n &= f_{n - 1} + f_{n - 3} \\ f_{n - 1} &= f_{n - 1} \\ f_{n - 2} &= f_{n - 2} \\ f_{n - 3} &= f_{n - 3} \\ \end{aligned}

x1=fn1,x2=fn2,x3=fn3,x4=fn4,y1=fn,y2=fn1,y3=fn2,y4=fn3x_1 = f_{n - 1}, x_2 = f_{n - 2}, x_3 = f_{n - 3}, x_4 = f_{n - 4}, y_1 = f_{n}, y_2 = f_{n - 1}, y3 = f_{n - 2}, y4 = f_{n - 3},则 1 式可化为以下形式:

y1=x1+x3y2=x1y3=x2y4=x3(2)\tag{2} \begin{aligned} y_1 &= x_1 + x_3 \\ y_2 &= x_1 \\ y_3 &= x_2 \\ y_4 &= x_3 \\ \end{aligned}

系数矩阵×N 维向量\text{系数矩阵} \times \text{N 维向量} 的形式来表示,有:

[y1y2y3y4]=[1010100001000010][x1x2x3x4](3)\tag{3} \begin{bmatrix} y_1 \\ y_2 \\ y_3 \\ y_4 \\ \end{bmatrix} = \begin{bmatrix} 1 & 0 & 1 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \\ x_4 \\ \end{bmatrix}

从 3 式可以看出,x4x_4 的系数恒为 00,可以化简为:

[y1y2y3]=[101100010][x1x2x3](4)\tag{4} \begin{bmatrix} y_1 \\ y_2 \\ y_3 \\ \end{bmatrix} = \begin{bmatrix} 1 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \\ \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \\ \end{bmatrix}

F(n)=[fnfn1fn2]F(n) = \begin{bmatrix}f_n \\ f_{n - 1} \\ f_{n - 2}\end{bmatrix},由 4 式得:

F(n)=[101100010]n1[f3f2f1]F(n) = \begin{bmatrix} 1 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \\ \end{bmatrix}^{n - 1} \begin{bmatrix} f_3 \\ f_2 \\ f_1 \\ \end{bmatrix}

参照此种方法,就可以使用矩阵加速递推了。

#参考资料

  1. 6.1 矩阵及其运算,《信息学奥赛之数学一本通》(ISBN 978-7-5641-6576-5,东南大学出版社),林厚从,2019 年 11 月第 9 次修订版。
  2. 矩阵,OI Wiki,2022 年 2 月 13 日。
  3. 矩阵快速幂,一瓜算法小册,2020 年 2 月 18 日。