行列式学习笔记
行列式学习笔记
前置知识
高斯消元
行列式的定义
其中 \(\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\) 列后的矩阵。
行列式的拓展运用
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'\) 的行列式就是他生成树的个数。

浙公网安备 33010602011771号