线性代数基础

线性代数基础

煎蛋的东西不再赘述。

n 个向量,若存在向量能被其他向量线性表示,则称这些向量线性相关,否则线性无关。

矩阵的行秩,将矩阵看成若干个行向量,从这些向量中选取尽可能多的向量满足这些向量线性无关,选取的个数 k 即为矩阵的秩。

矩阵的列秩同理,一般来说,矩阵的秩默认为行秩。

行列式常用定理

定义:对一个 n×n 的矩阵 A,其 n 阶行列式写作 det(A)

det(A)=p(1)τ(p)i=1nai,pi

p 为所有可能的排列,τ(p) 表示一个排列 p 的逆序对个数。

定理一:det(AT)=det(A),即矩阵转置后值不变。

证明:考虑对于原来的每个排列 p ,在转置后对应的 ai,pi 变成 api,i,只需证明两者的逆序对个数相同。

那么考虑如果存在两个下标 i,j 满足 i<jpi>pj,会对有 1 的贡献,那么在转置后 pj<pij>i,也会有 1 的贡献。

定理二:对换矩阵的某两行行列式的值取相反数。

考虑对于任意一个排列 p,对换矩阵两行的影响相当于对换排列的两个值。

如果这两个值相邻,无论两者谁更大都会对逆序对个数造成 ±1 的贡献。

考虑一般情况,如果中间间隔了 k 个数,那么对换两个值相当于在中间进行了 2m+1 次相邻对换,每次相邻对换均会造成 ±1 的贡献,所以最终也会改变排列的奇偶性,即对行列式的贡献取反。

推论:如果有矩阵有两行相同,则行列式值为 0

对换两行,那么行列式取值为负,又因为交换两行后矩阵一模一样,即 det(A)=det(A),推出行列式为 0

定理三:

|a1,1a1,2a1,na2,1a2,2a2,nb1+c1b2+c2bn+cnan,1an,2an,n|=|a1,1a1,2a1,na2,1a2,2a2,nb1b2bnan,1an,2an,n|+|a1,1a1,2a1,na2,1a2,2a2,nc1c2cnan,1an,2an,n|

把行列式展开,每一项都有 (bpi+cpi),再把括号打开即可得到后者。

定理四:将矩阵的某一行乘上一个系数 k,行列式的值也会乘上 k

证明:还是把行列式展开,把每一项的 k 都提取出出来即可。

定理五:将某一行加上另外一行常数倍,行列式的值不变。

证明:结合定理三和定理四即可,读者自证不难。

定理六:上三角矩阵的行列式值为主对角线上所有值相乘。

证明:除了主对角线的排列以外其他值都有系数为 0 的值。

利用以上定理就可以利用高斯消元得到行列式的取值了!

定理七:降价行列式/行列式展开/拉普拉斯展开:行列式的值等于所有元素于他们的代数余子式的乘积之和。

n×n 的矩阵 a,定义 Ai,jai,j 的代数余子式。

关于矩阵中一个位置 ai,j 的余子式指的是忽略第 i 行第 j 列,剩下的元素拼在一次的行列式的值。

代数余子式指的是余子式再乘 (1)i+j

即:

det(a)=j=1nai,jAi,j

首先很好理解的是余子式乘上当前元素的值,相当于给排列添加了一个元素。

唯一需要证明的是系数 (1)i+j

证明:先用定义式将行列式展开,考虑枚举第 i 行的 pij

1i1 中有 xpv 大于 j,那 i+1n 中有 j1(i1x)=ji+x 个小于 j 的。那么对逆序对的贡献为 ji+x+x

那么有 (1)ji+x+x=(1)ji=(1)i+j

有趣的小牛牛题,已知 1798,2139,3255,486731 的倍数,请在不暴力展开行列式的情况下证明其值为 31 的倍数。

|1798213932554867|

将第一列乘上 1000 倍,第二列乘上 100 倍,第三列乘上 10 倍加到第四列上,再对第四列行列式展开,发现 ai,j 都为 31 的倍数。

范德蒙德行列

|a10a20an0a11a21an1a1n1a2n1ann1|=1i<jn(ajai)

证明:

用一些定理取化简它,分两步:

第一步:将 n1 行的 a1 倍加到第 n 行,再将第 n2 行的 1 倍,第 1 行的 x1 倍加到第 2 行。 得到:

|1110a2a1anan10a2n2(a2a1)ann2(ana1)|

使用行列式展开把第一列展开,发现值其实是忽略第一行第一列的答案。

在对于右下角的那个矩形,每一列都提取出一个 (aia1)

再不断对剩下的矩形做如此操作即可得到答案。

以及一个很优美的式子:

det(AB)=det(A)det(B)

这是著名的柯西–比内公式,笔者很想去仔细证明,但是各种细节讨论最终放弃了,有兴趣的读者可以去看看。

煎蛋例题:

Random Forest Rank

重新审视矩阵的秩,矩阵的秩的意义,也可以理解为非零子式的最大阶数,也就是说,我们要找到一个最大的子式使得其行列式不为零。

考虑行列式的定义。

det(A)=p(1)τ(p)i=1nai,pi

这里的矩阵 a 为邻接矩阵,所以说如果 ai,pi 有值,那么存在边 (i,pi),又因为原图不存在环,所以排列中只能存在长度为 2 的循环,换言之,每个 i 只能和一个对应的 pi 匹配。

那么就转化为求森林的最大匹配数的两倍的期望。

煎蛋树形 dp 即可,设 fx 表示 x 没有被匹配的概率。

fx=ysonx(1fy+fy2)ans=i=1n(1fx)

Matrix Rank (Hard Version)

fi,j 表示前 i 行秩为 j 的矩阵数量。

fi,j=fi1,j×pj+fi1,j1×(pnpj1)

即两种情况,当前秩不增加即为前面的行向量组合得来,有 pj 种方案,或者当前秩增加,有 (pnpj1) 种方案。

最后求得是一行 f 的所有值。

放到二维平面上,每次可以从 (i,j) 走到 (i+1,j) 水平步,或者 (i+1,j+1) 右上步。

那么对于一个终点 f(n,j),一定恰好走了 j 次右上步,每次的贡献都是确定的,考虑设 gi,j1n 层走了若干次水平步,在第 i 层走水平步贡献为 pi,恰好走了 j 次水平步的方案数。

那么:

fi,j=gj,ij×k=1r(pnpk1)

现在考虑求解 g,对每一列直接上生成函数:Gi(x)=j0gi,jxj

Gi(x)=j=0il0(pjx)l=j=0i11pjx

记:这里貌似可以使用科技很简便地得到答案。

Gi(px)=j=0i11pj+1x(1x)Gi(x)=(1pi+1x)Gi(px)

带入第 r 次项的系数:

gi,rgi,r1=pr×gi,rpi+1×pr1×gi,r1gi,r=pi+r1pr1×gi,r1gi,r=j=1rpi+j1pj1fn,r=j=1nrpr+jpj1j=1r(pnpj1)

递推从小到大维护 fn,i 即可。

P10102 [GDKOI2023 提高组] 矩阵

真心煎蛋题,考虑随机一个 n×1 的向量 D(每一位值非零),我们只需要检查 D×A×B=D×C

错误概率分析:这个方法本质上检验了 D×(A×BC) 是否为 0,设 G=A×BC

首先如果 G 全零,那么一定不会判错。

否则假设最终答案 (1,v) 判错了,即:

i=1nD1,iGi,v=0

先算得前 n1 项的答案,最后一项 D1,i 的取值对应着恰好一个答案的取值,那么错误概率为 1998244353

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