矩阵基础
矩阵
定义
设 \(m,n\) 是两个正整数,由数域 \(\mathbb{F}\) 中 \(m\times n\) 个数 \(a_{ij}(i = 1,\cdots,m,j = 1,\cdots,n)\) 排成的一个 \(m\) 行 \(n\) 列的矩形图表
\((a_{ij})=(a_{ij})_{m\times n}=\boldsymbol{A}=\begin{pmatrix} a_{11}&a_{12}&\cdots&a_{1n}\\ a_{21}&a_{22}&\cdots&a_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ a_{m1}&a_{m2}&\cdots&a_{mn} \end{pmatrix}\)或\(\begin{bmatrix} a_{11}&a_{12}&\cdots&a_{1n}\\ a_{21}&a_{22}&\cdots&a_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ a_{m1}&a_{m2}&\cdots&a_{mn} \end{bmatrix}\)
称为 \(\mathbb{F}\) 上的一个 \(m\) 行 \(n\) 列的矩阵或 \(m\times n\) 矩阵。特别地,当 \(m = n\) 时,称 \(m\times n\) 矩阵 \(\boldsymbol{A}\) 是一个 \(n\) 阶方阵。
用大写字母来表示矩阵,如 \(A\)。
记 \(M_{m,n}(\mathbb{F}) = \{ \mathbf{A}=(a_{ij})_{m\times n}\mid a_{ij}\in\mathbb{F}\}\) 为数域 \(\mathbb{F}\) 上的所有 \(m\times n\) 矩阵全体,\(M_{n}(\mathbb{F}) = M_{n,n}(\mathbb{F})\) 为数域 (\mathbb{F}) 上的所有 \(n\) 阶方阵全体。(这个似乎用的不多?)
矩阵加法
就是对应位置相加,若 \(C = A + B\),则 \(c_{ij} = a_{ij}+b_{ij}\)。这里要求 \(A,B\) 的大小一致。
矩阵乘法:
现有大小为 \(m * n\) 的矩阵 \(A\),\(n * k\) 的矩阵 \(B\),\(C\)。令 \(C=A \times B\),其大小为 \(m * k\),则
可以简记为 : A横乘B竖。
卡常技巧: 一般来说,矩阵乘法的元素要求对某个数取模,我们可以用 long long(或者 int128)把一行之和求出来再取模,以减少取模次数。
矩阵乘法的性质
-
结合律:\((AB)C=A(BC)\)
直接把两边用矩乘定义展开
因为乘法运算对加法有分配律,所以 \(\sum\) 可以提前并交换,于是两边都变成 \(H_{i,j}\sum\limits_{l = 1}^{s}\sum\limits_{k = 1}^{n}a_{ik}b_{kl}c_{lj}\) 的形式。
-
分配律:\(A(B+C)=AB+AC,(B+C)D=BD+CD\)
\(\because \sum a_{i,k}(b_{k,j}+c_{k,j}) = \sum a_{i,k}b_{k,j} + \sum a_{i,k}c_{k,j}\)
\(\therefore A(B+C)=AB+AC\) ,另一个同理。
-
没有交换律!可以举例验证
-
有乘法单位元
即单位矩阵(虽然这玩意本质上是个方阵)。用 \(I_n\) 表示大小为 \(n\) 的单位矩阵。
构造:对角线为 1,其它地方是 0。证明还是直接用定义展开
性质:对于 \(\forall A \in M_{m,n},A = I_mA = AI_n\)
-
有消去律 \(AB = AC \Longleftrightarrow B=C\),当且仅当 \(A\ne 0\) 且 \(\exists AA^{-1} = I\) (存在 A 的逆)
广义矩阵
普通矩阵乘法是“对应位置相乘再加起来”,记作 \((\times,+)\)。我们可以根据具体要求修改矩乘的定义。如果新定义的乘法也满足分配律,那么上述性质仍然成立。
例如:定义乘法 \(C = A \times B\),使得 \(C_{i,j} = \min (A_{i,j} + B_{i,j})\)。这种可以记作(min,+)。因为 \(a + \min(b, c) = \min(a +b, a + c)\),所以(+,min)具有结合律,分配律,但没有交换律。
矩阵快速幂:
这是一个矩乘的应用,并且相当常用。
$ A * A * A * A * B = A^k * B $
和普通快速幂求解方式一样
模板题
(注:这个算法的成立基于矩乘的结合律)
矩阵快速幂优化dp
把dp方程看成向量(或是1 * n的矩阵),尝试把转移方程当成矩阵。
例如:匪不垃圾式:\(f_n = f_{n-1} + f_{n-2}\)
数据结构矩阵加速dp
这个也被称为动态dp
我们可以把一个dp的转移看成乘上一个矩阵。
用矩阵快速幂是建立在每一个转移矩阵是一样的,但dp方程的转移往往与输入有关。于是就有了这玩意。
dp的一般形式:
\(dp_{初值} * A * B * C …… * Z = dp_{答案}\)(大写字母表示矩阵)
于是我们可以用数据结构来优化。(具体来讲,在ds的每个节点下存一个矩阵,修改操作就是把原来的矩阵删了加上新的矩阵)
总结一下:该算法用于处理对转移方程有微小修改操作的dp
如果这些转移矩阵不会变,那这个做法就是脱裤子放屁。
邻接矩阵的乘法
对一个有向图 \(G\),记其邻接矩阵为 \(A\),则 \(A^k\) 的 \((i,j)\) 元素为从 \(i\) 出发,走 \(k\) 步走到 \(j\) 的路径数。
如果只考虑可达性,此时矩阵中只有 \(0\) 和 \(1\),乘法变成 & 操作,加法变成 | 操作。 使用 \(bitset\) 可以将矩阵乘法优化到 \(O({n^3\over ω})\)。
矩阵的逆
设 \(A\in M_n(\mathbb{F})\),若存在 \(B\in M_n(\mathbb{F})\),满足 \(AB = I_n=BA\),则称 \(A\) 一个可逆矩阵,此时称 \(B\) 是 \(A\) 的逆矩阵,记作 \(B = A^{-1}\)。
可以证明,如果有 \(AB = I_n\),则一定有 \(BA = I_n\),于是上述定义中的条件可以改为 \(AB = I_n\)(或 \(BA = I_n\))
性质
- 若 \(A\) 可逆,则 \(|A^{-1}|=|A|^{-1}\)
- 若 \(A,B\) 都是 \(n\) 阶可逆矩阵,则 \(AB\) 可逆,且 \((AB)^{-1}=B^{-1}A^{-1}\)。一般地,\(A_1,\cdots,A_s\) 是 \(n\) 阶可逆矩阵,则 \(A_1A_2\cdots A_s\) 可逆,且 \((A_1A_2\cdots A_s)^{-1}=A_s^{-1}\cdots A_1^{-1}\)
- 若 \(A\) 是 \(n\) 阶可逆矩阵,则 \(A^T\) 可逆,且 \((A^T)^{-1}=(A^{-1})^T\)。
- \(n\) 阶方阵 \(A\) 可逆 \(\Leftrightarrow|A|\neq 0\Leftrightarrow \mathrm{rank}(A)=n\)
求法
在方阵后面强行拼上一个对角矩阵,然后用初等变换将前面的矩阵消成对角矩阵(就是用的高斯消元),后面的矩阵就是矩阵的逆。
举个栗子:
矩阵/线性变换
现在想知道:
用 \(\begin{bmatrix}-1\\1\end{bmatrix}和\begin{bmatrix}1\\1\end{bmatrix}\)张成的线性空间中的向量\(\begin{bmatrix}\frac{1}{2}\\\frac{1}{2}\end{bmatrix}\)
在普通的空间(用\(\hat{i}\)和$\hat{j} $的线性空间 )中的向量是什么。
方法如下:
- 用两个基直接拼成一个矩阵(就是把中间两个碍事的中括号去掉)。在上面的例子中,该矩阵为:\(\begin{bmatrix}-1&1 \\1&1\end{bmatrix}\)。(注意,这里将对应\(\hat{i}\)的基放在左边,对应\(\hat{j}\)的基放在右边)
- 用这个矩阵乘上这个向量,就是:\(\begin{bmatrix}-1&1 \\1&1\end{bmatrix} \begin{bmatrix}\frac{1}{2}\\\frac{1}{2}\end{bmatrix}\)。注意矩阵没有交换律,所以顺序不能改。
就行了。
如果要从普通的线性空间中的向量变到特定的空间中,就乘上该空间的两个基拼成的矩阵的逆。就行了。(可以用高斯消元来求矩阵的逆)
由上面的示例可以看出,矩阵可以被当成一种线性变换,其几何意义就是更换线性基后表示某个向量。

浙公网安备 33010602011771号