线性代数入门

线性代数入门

常识

向量

定义 n 维向量 v=(v1,v2,vn) 为一个 n 元有序数组,记作 vRn,也即 n 维实数空间的一个向量。

定义如下运算:

  1. cR,vRn,cv=(cv1,cv2cvn),也就是每一维相乘,称为数乘。
  2. v1,v2Rn,v1+v2=(v1,1+v2,1,v1,2+v2,2v1,n+v2,n)
  3. v1·v2=v1,iv2,i,v1·v2=0v1v2

线性组合与张成空间

定义向量集 V={v1,v2,,vn},若存在 c1,c2cnR,满足向量 x=civi,则称 xVc1,c2cn 为权的线性组合,所有这样的 x 组成的集合称为 V 的张成空间,记作 span(V)

线性相关

对于向量集 V={v1,v2,,vn},若 j,vj 可以表达为 v1,v2vj1 的线性组合(注意取到 j1 即可)

定义:若向量集 B 线性无关,则称 B=span(B) 的一组基。

  • B 的任意真子集不是 span(B) 的基
  • 对于任意 vspan(B),存在唯一的 c1,c2cn,满足 vBc1,c2cn 为权的线性组合
  • 对于任意线性有关集 V,存在其真子集 B 满足 span(B)=span(V)

一个线性空间可能有多组基。

  • 线性空间的维数定义为 |base(V)|

  • 矩阵的秩:将 n×m 矩阵可以看作 n 个维数为 m 行向量堆叠形成的向量组,这个向量组的基的大小定义为矩阵的秩

    性质:矩阵的行秩等于列秩,以下我们记秩为 rank

    满秩指的是 rank 等于 min(n,m)

  • 方阵:定义为行数与列数相同的矩阵。

  • 记号 col(M) 表示矩阵的列向量组,row(M) 表示行向量组。

  • 转置:定义 n×m 矩阵 A 转置后的矩阵 Bm×n 矩阵,其中 Ai,j=Bj,i,且记 B=AT

  • 定义 ker(V)={u|Vu=0},其中 V 是矩阵,而 u 是向量(例如 (m×n)×(n×1))。

  • 补空间:定义 n 维线性空间 V 的补空间 T,满足 VT 为全部向量的集合,且 VT=

  • 正交补空间:定义 n 维线性空间全集为 U,对于线性空间 VU,定义其正交补空间 V={vU|v·u=0,uV}

    性质:

    1. aU,uV,vV,a=u+v
    2. col(AT)=ker(A)
  • 矩阵常识

    单位矩阵:仅对角线上有值且值为 1 的矩阵,n 阶单位矩阵记作 In

    In1=In,A×I=A

    对角矩阵:仅对角线上有值的矩阵

    上三角矩阵:仅对角线及其上方有值的矩阵

    分块矩阵:将矩阵使用若干水平竖直线划分为若干部分

以下未加说明,默认 u,v 为向量,A,B 为矩阵,I 为单位矩阵。

矩阵求逆

矩阵 A 存在逆矩阵 A1,当且仅当 A 满秩。

求法:将矩阵 A|I 进行高斯消元,最后得到 I|B,此时 B=A1。因为可以看作是从单位矩阵不断做 A 的逆变换得到 B

特殊矩阵的逆矩阵:

  1. I1=I
  2. 对于对角矩阵 AA1 也是对角矩阵,且 Ai,i·Ai,i1=1

高斯消元

远古拙作

注意事项:

  • mod2 情况下,使用 bitset 优化

  • modp 情况下,使用费马小定理

  • mod 合数情况下,辗转相除。

注意辗转相除法高斯消元是 O(n3+n2logp) 的(指 n×n 矩阵)

这是因为每次操作后两个主要数字至少有一个减少一半,因此总的会执行 n(n+logV) 次行做差

核心在于减少主元个数优化复杂度

线性基

注意线性基可以做一般情况,不一定是异或。

欢迎阅读 以及 线性基求交

随机化检验方法

基于 Schwartz–Zippel引理:

Schwartz–Zippel引理

对于数域 F 内的 mn 次多项式 f(x1,x2xm),将 m 个未知数随机赋权,得到 f 为零的概率为 n|F|

注意随机的性质告诉我们,随机赋权后做简单的加减运算同样可以得到随机意义下的同次多项式。

eg:BZOJ 2396

行列式

以下不严谨地,可能用矩阵符号代指行列式。

注意 行列式 既指式子,也指最终值,注意行列式是方阵。

个人认为,行列式类似于全排列的线性组合

  • 定义 Snn 阶排列集合
  • 定义 σ(p) 为排列 p 的逆序对个数。(逆序对数奇偶性等价于 |p|+ 置换环个数的奇偶性)

定义行列式的值为:

|A|=det(A)=pSn(1)σ(p)i=1nai,pi

积和式

定义积和式:

perm(A)=pSni=1nai,pi

性质

  1. det(A)=det(AT),perm(A)=perm(AT)
  2. det(AB)=det(A)det(B),perm(AB)=perm(A)perm(B)
  3. det(A)0A 满秩
  4. rank(AB)min(rank(A),rank(B))
  5. 行列式交换两行/列,值变为相反数
  6. 行列式做加减消元值不变
  7. An 阶可逆矩阵,det(A)=det(A1)1

行列式的多种求法

一、定义式

根据定义式来。

二、高斯消元法

通过加减消元(注意就是数乘一行消去另一行,一定注意并不是这一行进行了乘法)

得到一个上三角矩阵,将其对角线元素乘起来就是答案。

行列式的矩阵若不满秩必然为零,如果不为零一定满秩

三、余子式&Laplace展开

先介绍余子式的概念:

定义 nk 阶余子式为将 n 的方阵删去 kk 列后得到的 nk 方阵。

一般称余子式都是指划去一行一列的。

设矩阵 A,记划去第 i 行,第 j 列后的余子式是 Mi,j,那么定义其代数余子式为 (1)i+jMi,j,注意有正负性区别。

注意余子式的值也是这个余子式对应行列式的值。

一些性质:

  1. 行列式的值为任意行/列的代数余子式与其元素乘积之和

    i,det(A)=j=1n(1)i+jai,jMi,j=j=1n(1)i+jMj,i

  2. 行列式某一行(列)的代数余子式与其另一行(列)元素乘积之和等于零

    ij,k=1n(1)j+kai,kMj,k=0

四、Cauchy-Binet 公式

对于 m×n 矩阵 An×m 矩阵 B,有:

det(AB)=S(nm)det(A[m],S)det(BS,[m])

指的是,枚举所有的 nm 子集 S,将 SA 的对应列与 B 的对应行所组成的方阵的行列式的积的和(事实上,可以看作是两个矩阵对应的 n 阶行列式乘积的和)。

例如:

det([a1,1a1,2a1,3a2,1a2,2a2,3]×[b1,1b1,2b2,1b2,2b3,1b3,2])=|a1,1a1,2a2,1a2,2|·|b1,1b1,2b2,1b2,2|+|a1,1a1,3a2,1a2,3|·|b1,1b1,2b3,1b3,2|+|a1,2a1,3a2,2a2,3|·|b1,1b1,2b2,1b2,2|

五、分块矩阵法

简单介绍下分块矩阵,即为将矩阵按照若干水平竖直直线进行“分块”,在分块矩阵中,我们用 O 代指全零矩阵。

下面列出分块矩阵的运算,注意两个分块矩阵运算,必然需要分块方式相同。

分块矩阵的运算核心在于,将每个块看作一般矩阵的元素

  1. [ABCD]+[EFGH]=[A+EB+FC+GD+H]

  2. [ABCD]×[EFGH]=[AE+BGAF+BHCE+DGCF+DH]

  3. [ABCD]T=[ATCTBTDT]

  4. [AOOD]n=[AnOODn]

  5. A,D 是可逆方阵,那么:

[AOOD]1=[A1OOD1],[OADO]1=[OD1A1O]

  1. [ACOD]=[AOBD]=det(A)det(B)

  2. An 阶方阵,Bm 阶方阵

    [CABO]=[OABD]=(1)nmdet(A)det(B)

  3. Matrix Determinant Lemma

    U,V 分别为 n×m,m×n 矩阵,则有:

    det(In+UV)=det(Im+VU)

    证明考虑:

    [InOVIm]×[In+UVUOIm]×[InOVIm]=[In+UVUV+VUVVU+Im]×[InOVIm]=[InUOIm+VU]

组合意义应用

  1. 匹配问题:积和式

    将一个左右部大小都为 n 的二分图拿出来,则一个完美匹配的方案可以描述为一个 n 阶排列,在邻接矩阵计算积和式不为零说明存在完美匹配。

    当然,积和式难以计算,但我们可以通过随机赋权计算行列式,行列式不为零是积和式不为零的充分条件,具体可以看作是 n 个主元的函数,参考Schwartz–Zippel引理。

  2. 利用 laplace 展开的递归结构

  3. binet-cauchy 公式与行列式满秩是非零的充要条件的运用(LOJ3409)

    det(Am×n×An×mT)cnt(mod3) 其中 cnt 是选出 m 个向量满秩的方案数,根据binet-cauchy公式,相当于是从 nm 维向量里选出 m 个组成行列式与其转置的行列式的积(相当于平方),如果不满秩,那么是零,否则任意非零数的平方模 3 意义下同余 1

伴随矩阵

定义 n 方阵 A 的伴随矩阵 AAi,j=(1)i+jMj,i,也就是代数余子式组成的矩阵的转置矩阵

伴随矩阵与矩阵的逆有密切联系,但伴随矩阵是一定存在的

根据定义,可以得到:

  • (AB)=BA
  • det(A)=det(A)n1
  • (kA)=kn1A
  • (AT)=(A)T
  • A×A=A×A=det(A)In
  • (A1)=(A)1

有如下性质:

  1. rank(A)<n1,显然每个代数余子式不满秩,A 是全零矩阵
  2. rank(A)=nrank(A)=n,那么 A=det(A)A1
  3. rank(A)=n1rank(A)=1

对于第三种情况伴随矩阵的求法:

raiA 的第 i 行向量,caiA 的第 i 列向量,有:

rank(A)n(x1,x2xn),xirai=0

列向量同样可以找到一组 (y1,y2yn),并且可以在线性基插入的时候求出。

根据代数余子式的定义以及 rank(n)=n1,用这个等式去替换与推导,在 Ak,jAi,j 的对比中,排除 xi,xk 影响,得到 Ak,jxk=Ai,jxi

也即,我们只需要求出一个 A1,1,就可以通过 x,y O(n2) 递推出整个伴随矩阵。

LGV 引理

仅适用于 DAG

定义 w(P) 为路径 P 所有边权的积

  1. 计数时边权全是 1
  2. 边权可以是生成函数

定义 e(u,v)=P:uvw(P)

DAG,起点集合 A,终点集合 B,其中 |A|=|B|=n,求所有选出 n 条不相交路径的权值积的带符号和

下面的 e(i,j)e(Ai,Bj)

M=& \begin{bmatrix} e(1,1)&e(1,2)&\dots &e(1,n)\\ e(2,1)&e(2,2)&\dots &e(2,n)\\ \vdots&\vdots&\ddots&\vdots\\ e(n,1)&e(n,2)&\dots &e(n,n) \end{bmatrix}\\ det(M)=&\sum_{(P_1,P_2\dots P_n),P_i:A_i\to B_{p_i}}(-1)^{\sigma (p)}\prod_{i=1}^nw(P_i)

不相交路径指点不相交

若有路径 AEC,BED,则会与 AED,BEC 正负抵消。

常用于 分层图,网格图

注意到逆序对在分层图还有一个意义:线段相交次数。

eg:NOI2021 路径交点,ABC216H

矩阵 M 的实际意义

[PA2021]Fiolki 2,[SNCPC2024] 最大流。

矩阵树定理

定义对角矩阵 D,Din,Dout 分别为度数,入度,出度矩阵,定义邻接矩阵 G

有如下关系:

  • 无向图生成树个数为 DG 删去任一 ii 列的行列式值
  • 有向图以点 i 为根的内向树个数为 DoutG 删去第 i 行第 i 列的行列式
  • 有向图以点 i 为根的外向树个数为 DinG 删去第 i 行第 i 列的行列式

无向图情况证明:事实上相当于删去第 i 个点(定根),然后给每个点指定入边(父亲边),而对于 pi=i 的,我们钦定他为任意选择入边。

考虑这样的容斥思路:钦定环的个数,然后以 (1)cyc 作为系数容斥。

考虑设这个指定边都指向 pi,那么根据矩阵行列式的定义,对于 pii 的方案:

  1. pii,方案数为 Gi,pi
  2. pi=i,方案数为 Di,i

接着考虑凑配容斥系数,注意我们钦定的图上的环就是 sz>1 的置换环

注意到逆序对数的奇偶性与 ncyc 相同,也就是算行列式时自带一个 ncyc。那么总的来看,一个 sz>1 的环,会贡献 2sz1 次,而一个 sz=1 的环会贡献 0 次,因此最终的系数是置换环个数减去 sz=1 的置换环个数,这正是我们想要的。

关联矩阵

定义有向图 G=(V,E) 的关联矩阵 M 为,对于第 i 条边 uv,令 Mu,i=1,Mv,i=1,其余位置为零。

如果是无向图,任意定向。

  • 列和为零,因此我们只需要 n1 行就知道另一行,不妨设任意删除一行后的矩阵是 M

  • rank(M)=ncc 为弱连通图连通块个数

  • AMn1 阶子式, det(A)0A 中这 n1 列代表的边构成一颗生成树的充要条件(显然)。

  • 同上,|det(A)|1

    考虑 A 如果不是一棵树,那么会有线性相关,则直接为零。

    如果 A 是一棵树,考虑按照拓扑序给节点重新标号,这样就变成三角矩阵了,只需要看对角线

  • 对于无向图 M×MT=DG

posted @   spdarkle  阅读(166)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示