摘抄 参考资料

矩阵其实很多东西跟高斯消元扯得上关系。。。

目录

  • 求逆
  • 行列式
  • 关于秩和行列式的杂谈
  • 余子式&代数余子式&拉普拉斯展开
  • 矩阵树
  • 伴随矩阵
  • 求有向图所有点为根的生成树数量

求逆

矩阵AA左乘一个矩阵BBAA会以行为单位进行改变;
矩阵AA右乘一个矩阵BBAA会以列为单位进行改变;

有了这个性质就直接把一个矩阵TT放在AA左边,高斯消元时把操作转移成矩阵乘积的形式。
AA消成eeTT就成为AA的逆元了。
(ee为单位矩阵)

把矩阵看成很多个不同的向量,最多能提取出的线性独立的向量的个数。(行秩和列秩总是相等)
这里有一个性质:只有满秩的矩阵才会有逆元。

行列式

A|A|表示AA的行列式。
一种定义方式:

A=p((1)τ(p)×A1,p1×A2,p2××AN,pN)|A|= \sum_ p((-1)^{\tau(p)} \times A_{1,p1} \times A_{2,p2} \times \cdots \times A_{N,pN})

其中pp是任意11nn的排列,τ(p)\tau(p)则是这个排列里逆序对的数量。
而那个求和式的每一项可以看做是在矩阵中选出N个数,使得他们的行列都不重合。

性质1: 互换矩阵的两行(列),行列式变号。
性质2: 如果矩阵有两行(列)完全相同,则行列式为0。
性质3: 如果矩阵的某一行(列)中的所有元素都乘以同一个数k,新行列式的值等于原行列式的值乘上数k。
性质4: 如果矩阵有两行(列)成比例(比例系数k),则行列式的值为0。
性质5: 如果把矩阵的某一行(列)加上另一行(列)的k倍,则行列式的值不变。

证明来自贴顶参考资料。
根据性质5,我们可以像高斯消元那样把矩阵消成上三角(注意符号)。
根据行列式定义,一个上三角矩阵的行列式=对角线乘积。(不这样排列必然会踩到0)
这样就可以O(n3)O(n^3)求行列式了。
当然,假如说有一个比较恶心的模数,可以考虑用辗转相除来消去系数。

另一种比较形象的意义:
设一个矩形它在原座标系中的面积为s1s_ 1,经过矩阵AA变换后在新的座标系中面积为s2s_ 2
会有:

A=s2s1|A|=\frac{s_ 2}{s_ 1}

关于秩和行列式的杂谈

现在考虑有一个不满秩的矩阵AA
任何nn维空间经过AA变换都会被降维打击,因为AA的向量撑不起nn维。

根据行列式性质,我们可以在行列式不变的前提下对矩阵AA进行操作把若干行消成0。
所以这个矩阵的行列式为0。
根据上面对行列式的第二种定义,任何有“面积”的矩形"面积"都要变成0。
没有“面积”,那只能说明至少有一维消失了,与前面相照应。
在变换中,丢失一维时丢失的信息量是很大的(你想想自己怎么变成二维再变回来)
这样导致的无法还原和不满秩矩阵没有逆显得和谐。

余子式&代数余子式&拉普拉斯展开

现在有一个矩阵AA
定义一类矩阵Di,jD_{i,j}表示AA删去i,ji,j所在的行和列后形成的矩阵。
可以列出余子式:

ai,jDi,ja_ {i,j}|D_ {i,j}|

和代数余子式:

(1)i+jai,jDi,j(-1)^{i+j} a_ {i,j}|D_ {i,j}|

代数余子式可以作为A|A|的递推。
选定一行ii进行递推,式子名称就变成了拉普拉斯展开。。

A=jn(1)i+jai,jDi,j|A|=\sum_ j ^ n (-1)^{i+j} a_ {i,j}|D_ {i,j}|

矩阵树

一个还不会证明的定理。
简单描述是度数矩阵-邻接矩阵的Droot,root|D_{root,root}|
这是有向图的情况:

加一条i>ji->j的边时,Aij=1,Aii+=1A_ {ij}-=1,A_ {ii}+=1;
删去根所在的行和列,然后求行列式;
得到的是儿子指向父亲的生成树的方案数。

父亲指向儿子就可以看成反着建图。
无向图可以看成是一种边成对出现的特殊形式,易证任何一个点为根数量都一样。

伴随矩阵

还是一个矩阵A|A|
现在定义他的伴随矩阵AA^ *
ai,j=(1)i+j×Dj,ia^ *_ {i,j}=(-1)^ {i+j} \times |D_ {j,i}|
Dj,i|D_ {j,i}|!!!
这个矩阵有什么特殊的地方?
令矩阵B=A×AB=A \times A^ *
对于在BB对角线上的数有:

bi,i=jai,j×aj,i=jai,j×(1)j+iDi,j=Ab_ {i,i}=\sum_ j a_ {i,j}\times a^ * _ {j,i}=\sum_ j a_ {i,j}\times (-1)^{j+i}|D_ {i,j}|=|A|

最后一步看前面的拉普拉斯展开。
不是在对角线上的数呢?

bi,j=kai,k×ak,j=kai,k×(1)k+jDj,kb_ {i,j}=\sum_ k a_ {i,k}\times a^ * _ {k,j}=\sum_ k a_ {i,k}\times (-1)^{k+j}|D_ {j,k}|

形式很像拉普拉斯展开,我们可以把它理解成另一种样子:

现在我们对BB选定了第jj行,并进行拉普拉斯展开。
但现在问题是从左往右一个个枚举时,用的是ii那一行上的数。
也就是说这样子作相当于把ii那一行复制到jj那一行,并进行拉普拉斯展开。
这时候iijj两行一样了,那行列式就变成了0。

所以Bi,j=A×[i==j?1:0]B_ {i,j}=|A| \times [i==j?1:0],也就是B=B=单位矩阵×A\times |A|

求有向图所有点为根的生成树数量

ee为单位矩阵。
根据上面会有:

A×A=B=AeA \times A^ *=B=|A|*e

A=AA1A^ *=|A|*A^ {-1}

回忆伴随矩阵定义,有ai,i=(1)i+i×Di,i=Di,ia^ *_ {i,i}=(-1)^ {i+i} \times |D_ {i,i}|=|D_ {i,i}|
(这里的DD依然是对AA定义的)

矩阵树定理不就是选iiDi,i|D_ {i,i}|吗?
一次逆元,顺便做行列式。
O(N3)O(N^3)解决。


特征多项式

A|A|还是表示AA的行列式。
会发现有些时候矩阵AA和向量VV会有下面神奇的玩意(λ\lambda为常数):

AV=λVAV=\lambda V

那么会有(II为单位矩阵):

AVλV=AVλIV=(AλI)VAV-\lambda V=AV-\lambda IV=(A-\lambda I)V

现在不考虑VV为0的情况。
那么AλIA-\lambda I乘上某个向量会变成0?矩阵没满秩吧?
所以AλI=0|A-\lambda I|=0,把λ\lambda看成是一个自变量,那么就出现了关于AA的特征多项式:f(λ)=AλIf(\lambda)=|A-\lambda I|
(行列式懒得写了)
(虽然f(λ)=0f(\lambda)=0……)