高斯消元

矩阵

定义

m,n 是两个正整数,由数域 Fm×n 个数 aij(i=1,,m,j=1,,n) 排成的一个 mn 列的矩形图表

(aij)=(aij)m×n=A=(a11a12a1na21a22a2nam1am2amn)[a11a12a1na21a22a2nam1am2amn]

称为 F 上的一个 mn 列的矩阵或 m×n 矩阵。特别地,当 m=n 时,称 m×n 矩阵 A 是一个 n 阶方阵。

用大写字母来表示矩阵,如 A

Mm,n(F)={A=(aij)m×naijF} 为数域 F 上的所有 m×n 矩阵全体,Mn(F)=Mn,n(F) 为数域 (\mathbb{F}) 上的所有 n 阶方阵全体。(这个似乎用的不多?)

矩阵加法

就是对应位置相加,若 C=A+B,则 cij=aij+bij。这里要求 A,B 的大小一致。

矩阵乘法

现有大小为 mn 的矩阵 Ank 的矩阵 BC。令 C=A×B,其大小为 mk,则

Ci,j=k=1nAi,k×Bk,j

可以简记为 : A横乘B竖。

卡常技巧: 一般来说,矩阵乘法的元素要求对某个数取模,我们可以用 long long(或者 int128)把一行之和求出来再取模,以减少取模次数。

矩阵乘法的性质

  1. 结合律(AB)C=A(BC)

    直接把两边用矩乘定义展开

    因为乘法运算对加法有分配律,所以 可以提前并交换,于是两边都变成 Hi,jl=1sk=1naikbklclj 的形式。

  2. 分配律A(B+C)=AB+AC,(B+C)D=BD+CD

    ai,k(bk,j+ck,j)=ai,kbk,j+ai,kck,j

    A(B+C)=AB+AC ,另一个同理。

  3. 没有分配律!可以举例验证

  4. 有乘法单位元

    即单位矩阵(虽然这玩意本质上是个方阵)。用 In 表示大小为 n 的单位矩阵。

    构造:对角线为 1,其它地方是 0。证明还是直接用定义展开

    性质:对于 AMm,n,A=ImA=AIn

  5. 有消去律 AB=ACB=C,当且仅当 A0AA1=I (存在 A 的逆)

广义矩阵

普通矩阵乘法是“对应位置相乘再加起来”,记作 (×,+)。我们可以根据具体要求修改矩乘的定义。如果新定义的乘法也满足分配律,那么上述性质仍然成立。

例如:定义乘法 C=A×B,使得 Ci,j=min(Ai,j+Bi,j)。这种可以记作(min,+)。因为 a+min(b,c)=min(a+b,a+c),所以(+,min)具有结合律,分配律,但没有交换律。

矩阵快速幂:

这是一个矩乘的应用,并且相当常用。

AAAAB=AkB

和普通快速幂求解方式一样
模板题

(注:这个算法的成立基于矩乘的结合律)

矩阵快速幂优化dp

把dp方程看成向量(或是1 * n的矩阵),尝试把转移方程当成矩阵。
例如:匪不垃圾式:fn=fn1+fn2

(1,01,1)(fn2fn1)=(fn1fn)

数据结构矩阵加速dp

这个也被称为动态dp

我们可以把一个dp的转移看成乘上一个矩阵。
用矩阵快速幂是建立在每一个转移矩阵是一样的,但dp方程的转移往往与输入有关。于是就有了这玩意。

dp的一般形式:
dpABCZ=dp(大写字母表示矩阵)
于是我们可以用数据结构来优化。(具体来讲,在ds的每个节点下存一个矩阵,修改操作就是把原来的矩阵删了加上新的矩阵)

总结一下:该算法用于处理对转移方程有微小修改操作的dp
如果这些转移矩阵不会变,那这个做法就是脱裤子放屁。

邻接矩阵的乘法

对一个有向图 G,记其邻接矩阵为 A,则 Ak(i,j) 元素为从 i 出发,走 k 步走到 j 的路径数。

如果只考虑可达性,此时矩阵中只有 01,乘法变成 & 操作,加法变成 | 操作。 使用 bitset 可以将矩阵乘法优化到 O(n3ω)

矩阵的逆

前置知识

AMn(F),若存在 BMn(F),满足 AB=In=BA,则称 A 一个可逆矩阵,此时称 BA 的逆矩阵,记作 B=A1

可以证明,如果有 AB=In,则一定有 BA=In,于是上述定义中的条件可以改为 AB=In(或 BA=In

性质

  • A 可逆,则 |A1|=|A|1
  • A,B 都是 n 阶可逆矩阵,则 AB 可逆,且 (AB)1=B1A1。一般地,A1,,Asn 阶可逆矩阵,则 A1A2As 可逆,且 (A1A2As)1=As1A11
  • An 阶可逆矩阵,则 AT 可逆,且 (AT)1=(A1)T
  • n 阶方阵 A 可逆 |A|0rank(A)=n

求法

在方阵后面强行拼上一个对角矩阵,然后用初等变换将前面的矩阵消成对角矩阵(就是用的高斯消元),后面的矩阵就是矩阵的逆。

举个栗子:

A=[210121012]

[210100121010012001]

[10034121401012112001141234]

A1=[34121412112141234]

矩阵/线性变换

现在想知道:

[11][11]张成的线性空间中的向量[1212]

在普通的空间(用i^j^的线性空间 )中的向量是什么。

方法如下:

  1. 用两个基直接拼成一个矩阵(就是把中间两个碍事的中括号去掉)。在上面的例子中,该矩阵为:[1111]。(注意,这里将对应i^的基放在左边,对应j^的基放在右边)
  2. 用这个矩阵乘上这个向量,就是:[1111][1212]。注意矩阵没有交换律,所以顺序不能改。

就行了。

如果要从普通的线性空间中的向量变到特定的空间中,就乘上该空间的两个基拼成的矩阵的。就行了。(可以用高斯消元来求矩阵的逆)

由上面的示例可以看出,矩阵可以被当成一种线性变换,其几何意义就是更换线性基后表示某个向量。

posted @   花子の水晶植轮daisuki  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
https://blog-static.cnblogs.com/files/zouwangblog/mouse-click.js
点击右上角即可分享
微信分享提示