从行列式到矩阵树定理(含高斯消元)

发布时间 2023-03-22 21:10:41作者: 0htoAi

没写完。不知道啥时候写完。

高斯消元

此为前置知识。

高斯消元为工具,而不是难点所在。就像网络流难点不在跑网络流一样。此处只讲算法的实现,而关于如何根据题目列出方程,以后有机会会单独写博客。

一元一次方程,只要一次项系数不为 \(0\),就一定有解。

二元一次方程组,\(2\) 个方程,可能会无解,可能会有无穷多解,也可能只有唯一解。

\(n\) 元一次方程组, \(n\) 个方程,也只有 \(3\) 种情况:无解,无穷多解和唯一解。

如何求解?感性理解:\(2\) 个方程之间可以通过一个方程减去另一个方程的几倍,从而消除一些未知数。假设第 \(i\) 个方程求得第 \(i\) 个未知数,那么对于这个方程后面的方程,都去掉第 \(i\) 个未知数。如何去掉?假设第 \(i\) 个方程的第 \(i\) 个未知数的系数为 \(a_{i,i}\),第 \(j\) 个方程的第 \(i\) 个未知数的系数为 \(a_{j,i}\),其中 \(i<j\)。第 \(j\) 个方程的第 \(k\) 项减去 \(a_{i,k}\times \frac{a_{j,i}}{a_{i,i}}\)。当 \(k\)\(i\) 时,\(a_{j,i}\) 要减去 \(a_{j,i}\),变成 \(0\) 了,就消掉了。至于其它项消不掉也没关系,以后总会消掉的。而 \(i\) 之前的项一定会被之前的其它方程消掉。

消完之后,会形成一个上直角三角型有系数,剩下位置系数为 \(0\) 的方程组。最后一个方程就是 \(x=\) 某个值的形式。然后倒推回来,每个方程就可以算出一个未知数的值。

可能会存在无解和无穷多解的情况,属于特殊情况,在此不作讨论,比较复杂。

行列式

先定义 \(\pi(p)\) 表示一个排列 \(p\) 的逆序对数量(\(p_i>p_{j}\)\(i<j\)\((i,j)\) 二元组数量)。

\(\sum_{p}\) 表示枚举全排列。

行列式可以简单地看成,用一个方阵描述一个数字。记号为 \(\det\)。相当于一个函数,参数为方阵。

设给定 \(n\) 阶方阵 \(A\)(下标从 \(1\) 开始),\(p\) 为长度为 \(n\) 的排列,则:

\[\det A =\sum_{p} \prod_{i=1}^{n}A_{i,p_i}\times(-1)^{\pi(p)} \]

  • 定理 \(1\)\(A\) 的行列式跟 \(A^T\) 的行列式相等

    证明:\(A^T\) 表示 \(A\) 的转置,可以理解为 \(A\) 的行列互换,但相对顺序不变。类似于矩阵斜着翻了个面?即:\(A_{i,j}=A^T_{j,i}\)

    \(b_i\) 表示 \(p\)\(i\) 出现的位置。即 \(p_{b_i}=i\)。考虑逆序对的图像意义,即二分图,上下各 \(n\) 个点,上面的第 \(i\) 个点连向下面的第 \(p_i\) 个点,这个图的线段交点个数就是 \(p\) 的逆序对个数(假设都是直着连线的,上面第 \(i\) 个点和下面第 \(i\) 个点对齐)。\(b\) 相当于 \(p\) 的逆操作,即刚才描述的图也可以说成,下面的第 \(i\) 个点连向上面的第 \(b_i\) 个点。也就是说,每一个 \(p\) 都唯一对应一个 \(b\),且它们的逆序对数量相等。

    \[\det A^T =\sum_{p} \prod_{i=1}^{n}A^T_{i,p_i}\times(-1)^{\pi(p)} \\ =\sum_{p} \prod_{i=1}^{n}A_{p_i,i}\times(-1)^{\pi(p)} \\ =\sum_{p} \prod_{i=1}^{n}A_{p_{b_i},b_i}\times(-1)^{\pi(p)} \\ =\sum_{b} \prod_{i=1}^{n}A_{i,b_i}\times(-1)^{\pi(b)} \]

    上文已经证明了 \(b\) 的唯一性和 \(\pi(b)=\pi(p)\)。所以 \(\det A=\det A^T\)

  • 定理 \(2\):把某行或某列的所有元素同时乘一个数,等价于这个行列式的值乘上这个数

    证明:每一次 \(\prod\) 都会用到每一行的一个数和每一列的一个数,所以可以把同时乘的这个数提出来。

  • 定理 \(3\):交换一个行列式的两行或两列,行列式的值取反。

    证明:只需要证明交换两列,行列式的值取反就行。因为通过定理 \(1\) 即可把行变成列。设 \(p'\)\(p\) 交换 \(p_i\)\(p_j\) 得到的,首先对于每一个 \(p\),都唯一对应一个 \(p'\)。跟上文的 \(p\)\(b\) 的关系类似,只需要证明 \(\pi(p')\)\(\pi(p)\) 的奇偶性相反即可。

    假设 \(i<j\)

    对于 \(<i\) 的位置,交换后不影响。

    对于 \(>j\) 的位置,交换后不影响。

    对于 \(>i\)\(<j\) 的位置:

    • \(\min(p_i,p_j)\) 小的数,不影响。
    • \(\max(p_i,p_j)\) 大的数,不影响。
    • \(\min(p_i,p_j)\) 大,比 \(\max(p_i,p_j)\) 小的数,交换 \(p_i\)\(p_j\) 之后 \(\pi\) 的变化量为偶数,对奇偶性不影响。(\(p_i\)\(p_j\) 都会同时对这个数产生或失去逆序对)

    交换 \(p_i\)\(p_j\) 后,若原先 \((i,j)\) 不为逆序对,则此时逆序对数增加 \(1\),否则逆序对数减少 \(1\)

    所以 \(\pi(p')\)\(\pi(p)\) 的奇偶性相反。

    也就是行列式的值取反了。

  • 定理 \(4\):一行的所有数对位加上另一行所有数的几倍,行列式的值不变。就是高斯消元时最为关键的一步不会改变行列式的值。

存个档。