行列式学习笔记

行列式学习笔记

前置知识

高斯消元

行列式的定义

\[\det(A)=\sum_{p}(-1)^{\text{sgn}(p)} \prod A_{i,p_i} \]

其中 \(\text{sgn}(p)\) 表示 \(p\) 排列的逆序对个数。

行列式性质及其证明

  • 进行一次行列转置,矩阵的行列式不变

证明:根据定义即可。


  • 行列式任意一行按比例扩大,行列式的值按同样比例扩大

证明:
假设扩大的那一行是第 \(j\) 行$$\det(A)=\sum_{p}(-1)^{\text{sgn}(p)} \prod_{i=1}^{k-1} A_{i,p_i}\times A_{j,p_j}\times k \times \prod_{i=k+1} A_{i,p_i}=k\times \det(A)$$


  • 交换行列式中的任意两行,行列式反号

证明:我们假设交换的两行为 \(x\)\(y\)。那么这时候我们对于一个排列 \(p\),他如果想要和原来所产生的贡献一样,他就只能将 \(p_x\)\(p_y\) 互换。那么现在我们要证明的就是一次交换会改变排列的奇偶性,显然我们可以得到交换相邻两个元素,排列奇偶性会发生改变,那么现在我们假设 \(x<y\),交换这两个数一定有一种方案需要 \(y-x+y-x-1\) 次相邻元素的交换,于是命题成立。


  • 行列式中若有两行成比例,则行列式值为 \(0\)

证明:根据性质二可知,比例无论多少最终答案都是一样,那我们不妨设比例为 \(1\)。假设成比例的是 \(x\)\(y\) 两行,由性质三可知,交换这两行后行列式值变号,而实际上交换这两行行列式值不变,那么我们可以得到行列式值为 \(0\)


  • 行列式中若有一行可表示为两个数列相加,则行列式为两个行列式的值之和

证明:假设那一行为 \(j\)。$$\det(A)=\sum_{p}(-1)^{\text{sgn}(p)} \prod_{i=1}^{k-1} A_{i,p_i}\times (B_{j,p_j}+C_{j,P_j}) \times \prod_{i=k+1} A_{i,p_i}=\det(B)+\det(C)$$


行列式的快速计算

我们有上述的五条性质可以知道,将一行按任意比例变化后加到任意一行,行列式的值是不变的,那么我们可以用类似高斯消元的方法,将整个矩阵的左下部分全部变为 \(0\),而根据行列式的定义,我们可以得到只有 \(p\)\(1\sim n\) 时才对行列式的值有贡献,然后将对角线全部乘起来即可,这一部分注重实践,就不细讲了,看代码吧。

行列式计算的核心代码

int main()
{
	n=read();MOD=read();
	for (i=1;i<=n;i++)
	   for (j=1;j<=n;j++)
	       a[i][j]=read();
	for (now=1;now<n;now++){
		for (i=now+1;i<=n;i++){sym=1;
			while (a[now][now]!=0){
				G=a[i][now]/a[now][now];
				for (j=now;j<=n;j++) a[i][j]=(a[i][j]-G*a[now][j]%MOD+MOD) % MOD;
				for (j=now;j<=n;j++) swap(a[now][j],a[i][j]);
				sym=-sym;
			}for (j=now;j<=n;j++) swap(a[now][j],a[i][j]);sym=-sym;
			for (j=now;j<=n;j++) a[i][j]*=sym,a[i][j]=(a[i][j]+MOD) % MOD;
		}
	}sum=1;
	for (i=1;i<=n;i++) sum=sum*a[i][i] % MOD;
	sum=(sum+MOD) % MOD;
	printf("%lld\n",sum);
    return 0;
}

行列式的手算技巧

行列式的按行展开

定义 \(A_{i,j}\)\(A\) 去掉第 \(i\) 行与第 \(j\) 列后的矩阵。

\[\det(A)=\sum_{j=1}^{n} (-1)^{i+j}\times \det(A_{i,j})\times a_{i,j} \]

行列式的拓展运用

LGV引理

描述

我们定义:
\(E(a,b)\) 表示从 \(a\)\(b\) 所有有向路径边权总积的和。

\(A=(a_1,a_2,a_3,\cdot\cdot\cdot,a_n)\)

\(B=(b_1,b_2,b_3,\cdot\cdot\cdot,b_n)\)

\(M=\begin{bmatrix}E(a_1,b_1),E(a_1,b_2),E(a_1,b_3)&\cdots&E(a_1,b_n)\\E(a_2,b_1),E(a_2,b_2),E(a_2,b_3)&\cdots&E(a_2,b_n)\\\vdots&\ddots&\vdots\\E(a_n,b_1),E(a_n,b_2),E(a_n,b_3)&\cdots&E(a_n,b_n)\end{bmatrix}\)

\(F(a,b)\)

证明

矩阵树定理

描述

给定一张图 \(G\),我们定义 \(A\) 为他的邻接矩阵,\(D\) 为他的度数矩阵(\(D(i,i)\) 为第 $i $ 个点的度数,其余值为 \(0\)),则他的基尔霍夫矩阵 \(K=D-A\),则 \(K\) 去掉第 \(k\) 行第 \(k\) 列后得到的矩阵 \(K'\) 的行列式就是他生成树的个数。

证明

行列式的经典习题

posted @ 2022-03-25 20:46  OIer_Albedo  阅读(575)  评论(0)    收藏  举报