DennyQi's Log

05 行列式

三条基本性质

两个向量可以描述平行四边形的面积,三个向量可以描述平行六面体的体积。再往高维推广,nn个向量可以描述一个“nn维平行多面体”的“体积”。我们将会看到,这样的“体积”拥有一些性质,我们能从这些性质中推出体积的表达式。对于nnnn维向量,设它的体积为函数D(a1,,an)D\left(a_{1}, \cdots,a_{n}\right)

第一,“体积”要满足线性性:D(a1,,cai+cai,,an)=cD(a1,,ai,,an)+cD(a1,,ai,,an)D\left(a_{1}, \cdots, c a_{i}+c^{\prime} a_{i}^{\prime}, \cdots, a_{n}\right)=c D\left(a_{1}, \cdots, a_{i}, \ldots, a_{n}\right)+c^{\prime} D\left(a_{1}, \cdots, a_{i}^{\prime}, \cdots, a_{n}\right)。从平行四边形来理解,延长某条边对应着面积也要增大相应的倍数。在“同底”的基础上加上另一个方向的边面积也为增加相应的面积。(cc可以取0)

第二,“体积”要满足列加法不变性:D(a1,,ai+caj,,aj,,an)=D(a1,,ai,,aj,,an)D\left(a_{1}, \cdots, a_{i}+ca_{j}, \cdots,a_j,\cdots, a_{n}\right)=D\left(a_{1}, \cdots, a_{i}, \cdots, a_j,\cdots,a_{n}\right)。从平行四边形来理解,将某条边的端点沿着另一条边的方向平移,平行四边形是同底等高的,面积不变。

第三,单位矩阵的列向量构成的体积为1:D(e1,,ei,,en)=1D\left(e_{1}, \cdots, e_{i}, \cdots,e_{n}\right)=1

我们将会看到,这样的函数DD存在且唯一。这nnnn维向量构成矩阵AA,我们就称AA的行列式为D(a1,,an)D(a_1,\cdots,a_n),记作det(A)\det(A)。而要证明存在性与唯一性,需要这三条性质推出的更多性质。

由三条基本性质推出的其他性质

如果交换两个向量的位置,那么行列式要加上负号。只看两项,D(ai,aj)=D(ai,ai+aj)=D(aj,ai+aj)=D(a_i,a_j)=D(a_i,a_i+a_j)=D(-a_j,a_i+a_j)= D(aj,ai)=D(-a_j,a_i)= D(aj,ai)-D(a_j,a_i)

如果存在ai=0a_i=0,那么D=0D=0。因为00可以看作0ai0 \cdot a_i,将系数提出即可。如果存在ai=aja_i=a_j,那么D=0D=0,因为只需做列加法就会得到一个零向量。进一步,如果某一列是其他列的线性组合,那么D=0D=0,因为可以把这个向量用其它向量的线性表示来拆开,拆出来的每一项都有相同向量,因此都为0。进一步得到,只要矩阵不是满秩的就有D=0D=0。如果把某些列的线性组合加到某一列上,那么DD不变。

对角矩阵的行列式等于对角线上数的乘积。依据是线性性(提出系数)和性质三。进一步,如果矩阵可逆,那么任何矩阵都能消成三角矩阵,再消成对角矩阵。而我们发现我们已经知道所有初等列变换对行列式的影响,因此对于任意矩阵,我们只需要竖着高斯消元,就可以消成对角矩阵,也就在这过程中求出了行列式的值。根据高斯消元,当且仅当矩阵满秩时对角线上的元素才是全部非0的。而如果矩阵不是满秩的,行列式一定为0。(方阵可不可逆只需要看行列式等不等于零。)

于是,我们已经可以计算任何矩阵的行列式了!

我们特别关注方阵AA乘以列初等变换矩阵EEAEAE的行列式的值。当EE表示乘以某个常数cc时,det(E)=c\det(E)=c,同时有det(AE)=cdet(A)\det(AE)=c\det(A);当EE表示交换两列时,det(E)=1\det(E)=-1,同时有det(AE)=det(A)\det(AE)=-\det(A);当EE表示列相加时,det(E)=1\det(E)=1,同时有det(AE)=det(A)\det(AE)=\det(A)。综上,det(AE)=det(A)det(E)\det(AE)=\det(A)\det(E)恒成立。

由Gauss-Jordan可知,任何一个可逆矩阵都可以表示为一系列初等矩阵的乘积。所以对于det(B)0\det(B)\neq 0,有det(AB)=det(AE1E2En)\det(AB)=\det(AE_1E_2\cdots E_n),归纳地得到det(AB)=det(A)det(E1)det(E2)det(En)\det(AB)=\det(A)\det(E_1)\det(E_2)\cdots \det(E_n)。而我们也可以归纳地得到det(B)=det(E1)det(E2)det(En)\det(B)=\det(E_1)\det(E_2)\cdots \det(E_n),因此有det(AB)=det(A)det(B)\det(AB)=\det(A)\det(B)。而当det(B)=0\det(B)=0时,det(AB)=0\det(AB)=0也成立,因为我们证明过rank(AB)min{rank(A),rank(B)}\text{rank}(AB) \leq \min\{\text{rank}(A),\text{rank}(B)\}。综上,对于任何矩阵都有det(AB)=det(A)det(B)\det(AB)=\det(A)\det(B)

再来证det(A)=det(A)\det(A)=\det(A^{\top})。当AA不可逆时显然成立。当AA可逆时,把它写作初等矩阵地乘积A=E1E2EnA=E_1E_2\cdots E_n,于是A=EnE2E1A^{\top}=E_n^{\top}\cdots E_2^{\top}E_1^{\top}。要证det(E1)det(E2)det(En)=det(En)det(E2)det(E1)\det(E_1)\det(E_2)\cdots \det(E_n)=\det(E_n^{\top})\cdots\det(E_2^{\top}) \det(E_1^{\top}),只需证det(E)=det(E)\det(E)=\det(E^{\top})。当EE表示乘以某个常数时成立,当EE表示交换两列时成立,当EE表示列相加时依然成立。这条性质告诉我们,如果我们对矩阵做行变换,对行列式产生的影响也满足列变换的那套规则——我们可以先把矩阵取转置,这不改变行列式,然后做相应的列变换,最后再把矩阵转置回来。

The Big Formula

有了这些性质,我们来看DD的表达式必须具有怎样的形式。

每个向量都可以写成ai=k[n]akieka_i=\sum\limits_{k \in [n]}a_{ki}e_k的形式(坐标正交分解),再根据DD的线性性,我们把它用如上方式全部展开得到许多ap11ap22apnnD(ep1,ep2,,epn)a_{p_11}a_{p_22}\cdots a_{p_nn}D(e_{p_1},e_{p_2},\cdots,e_{p_n})的和,其中pip_i对应着1到n中的一个数,在第ii个向量中分解出epie_{p_i}就必须提出apiia_{p_ii}作为乘在前面的系数。总共会有nnn^n个项。而我们知道如果存在pi=pjp_i=p_j,那么势必有D=0D=0。在所有这nnn^n个项中我们只需要考虑那n!n!D0D \neq 0的项,它们刚好对应1到n的全排列。而对于这样的DD只可能是1-111,这取决于把DD换回顺序所需要的交换次数。假设有函数τ(p)\tau(p)表示需要交换的次数,那么就有:

det(A)=σPerm(n)(1)τ(σ)aσ(1)1aσ(2)2aσ(n)n\det(A)=\sum\limits_{\sigma \in \operatorname{Perm}(n)}(-1)^{\tau(\sigma)} a_{\sigma(1) 1}a_{\sigma(2) 2} \cdots a_{\sigma(n) n}

我们可以把τ(p)\tau(p)定义为pp中逆序对的个数:逆序对的个数一定与任何一个“交换次数”有相同的奇偶性。考虑交换一个逆序对时,会对逆序对总数的变化产生贡献的一定是逆序对对应的区间内部的那些介于两个端点之内的值的个数,每个值原先产生2个逆序对,现在产生0个逆序对。如果交换的不是逆序对,依然只有端点内的值为影响,每个值原来不产生逆序对,现在产生2个逆序对。而区间端点本身的交换会对总数有1的影响。综上,无论做什么样的交换,只会以奇数的方式改变逆序对数量。假设逆序对总数为奇数,那么不可能有偶数个奇数的和为奇数,因此交换次数必须是奇数;假设逆序对总数为偶数,那么不可能有奇数个奇数的和为偶数,因此交换次数必须是偶数。

这就是行列式定义——The Big Formula!

我们返回去验证,这样定义的行列式具有上述讨论的所有性质。而这只要求我们验证它有三条基本的性质。我们只需要把等式两边代入Big Formula,并判断它们是否相等就好了。

我们可以这样理解The Big Formula。行列式由n!n!项相加得到,每一项对应着一个排列。我们在每一列一定要取一个,而取哪一个就取决于排列的这一位是几。最后这些元素相乘,还要乘上这个排列的逆序对个数。

余子式,拉普拉斯展开

定义方阵AA的余子式Cij=(1)i+jdet(Mij)C_{i j}=(-1)^{i+j} \operatorname{det}\left(M_{i j}\right),其中MijM_{ij}表示矩阵AA中去掉第ii行元素和第jj列元素后留下的新矩阵。我们之所以关注到这种排除当前行列的结构,是因为行列式计算时的每一项如果选了某个元素,那么就一定不会再选到同一行同一列的元素了。我们将会看到余子式的出现对问题的简化。

对于n>1n>1的矩阵,成立det(A)=a11C11+a21C21++an1Cn1\operatorname{det}(A)=a_{11} C_{11}+a_{21} C_{21}+\cdots+a_{n 1} C_{n 1},称为行列式的拉普拉斯展开。对于ai1Ci1a_{i1}C_{i1}这一项,它对应着Big Formula里所有σ(1)=i\sigma(1) = i的排列,因此在det(Mi1)\det(M_{i1})的基础上,还需要加上ii放在第一个而产生的i1i-1个逆序对,因此令det(Mi1)\det(M_{i1})乘上(1)i1(-1)^{i-1}得到的恰好与Ci1=(1)i+1det(Mi1)C_{i1}=(-1)^{i+1}\det(M_{i1})相符。

而赋予了第一列特殊性是没有道理的,行列式的每一列都应当具有相同的地位。事实上,对于所有的jj,都有det(A)=a1jC1j+a2jC2j++anjCnj\operatorname{det}(A)=a_{1 j} C_{1 j}+a_{2 j} C_{2 j}+\cdots+a_{n j} C_{n j}。对于aijCija_{ij}C_{ij}这一项,相当于选定了σ(j)=i\sigma(j)=i。考虑交换次数,把它从第jj列“挪到”第1列正好做j1j-1次交换,然后贡献i1i-1个逆序对,因此要给det(Mij)\det(M_{ij})乘上(1)j+i2(-1)^{j+i-2},正好与Cij=(1)i+jdet(Mij)C_{ij}=(-1)^{i+j}\det(M_{ij})相符。

更一般地,我们还可以选取某一行做拉普拉斯展开。我们证明过转置不改变行列式,那么可以想象Cij=CjiC_{ij}=C'_{ji},于是det(A)=a1jC1j+a2jC2j++anjCnj\operatorname{det}(A^\top)=a'_{1 j} C'_{1 j}+a'_{2 j} C'_{2 j}+\cdots+a'_{n j} C'_{n j} =aj1Cj1+aj2Cj2++ajnCjn=det(A)=a_{j1} C_{j1}+a_{j2} C_{j2}+\cdots+a_{jn} C_{jn}=\det(A)

Cramer法则

行列式可以用于计算线性方程组。虽然实际应用中没人会用这么繁琐的方法真的来解线性方程组,但我们要说明的是我们是能在行列式与线性方程组之间建立起直接关系的。更重要的是,高斯消元仅仅给出了一个求线性方程组的“算法”,而我们将会看到,基于行列式的“Cramer法则”却精确地给出了方程组的解的表达式。

对于Ax=bAx=b,我们可以写出A[x1000x2100x3010xn001]=[AxAe2Ae3Aen]=[b1a12a13a1nb2a22a23a2nb3a32a33a3nbnan2an3ann]\begin{aligned} A\left[\begin{array}{ccccc} x_{1} & 0 & 0 & \cdots & 0 \\ x_{2} & 1 & 0 & \cdots & 0 \\ x_{3} & 0 & 1 & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ x_{n} & 0 & 0 & \cdots & 1 \end{array}\right] &=\left[\begin{array}{lllll} A \boldsymbol{x} & A \boldsymbol{e}_{2} & A \boldsymbol{e}_{3} & \cdots & A \boldsymbol{e}_{n} \end{array}\right]=\left[\begin{array}{ccccc} b_{1} & a_{12} & a_{13} & \cdots & a_{1 n} \\ b_{2} & a_{22} & a_{23} & \cdots & a_{2 n} \\ b_{3} & a_{32} & a_{33} & \cdots & a_{3 n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ b_{n} & a_{n 2} & a_{n 3} & \cdots & a_{n n} \end{array}\right] \end{aligned},设右边的矩阵为B1B_1,而乘在AA右边是三角矩阵,其行列式为x1x_1。根据行列式乘法的运算性质,我们得到det(A)x1=det(B1)\det(A)x_1=\det(B_1)。如果AA可逆,那么一定有x1=det(B1)det(A)x_1=\dfrac{\det(B_1)}{\det(A)}.

类似地,A[1x100x200xn1]=[Ae1AxAen]=[a11b1a1na21b2a2nan1bnann]A\left[\begin{array}{ccccc} 1 & \cdots & x_{1} & \cdots & 0 \\ 0 & \cdots & x_{2} & \cdots & 0 \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ 0 & \cdots & x_{n} & \cdots & 1 \end{array}\right]= \begin{bmatrix}Ae_1 \cdots Ax\cdots Ae_n\end{bmatrix}=\left[\begin{array}{ccccc} a_{11} & \cdots & b_{1} & \cdots & a_{1 n} \\ a_{21} & \cdots & b_{2} & \cdots & a_{2 n} \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ a_{n 1} & \cdots & b_{n} & \cdots & a_{n n} \end{array}\right],设右边的矩阵为BiB_i,那么xi=det(Bi)det(A)x_i=\dfrac{\det(B_i)}{\det(A)}

所以,Cramer法则就是说,如果依次把AA矩阵中第ii列用bb替换,那么就可以写出线性方程组的解xi=det(Bi)det(A)x_i=\dfrac{\det(B_i)}{\det(A)}

Cramer法则也可以用于求逆。根据AA1=IAA^{-1}=I,求A1A^{-1}等价于依次求解Axi=eiAx_i=e_i。依次把AA的第jj列替换成eie_i构成AA',那么就有xi(j)=det(A)det(A)x_i(j)=\dfrac{\det(A')}{\det(A)}。把det(A)\det(A')用第jj列拉普拉斯展开就能发现,det(A)=Cij\det(A')=C_{ij}。于是可得,xi(j)=Cijdet(A)x_i(j)=\dfrac{C_{ij}}{\det(A)}。整理一下,可以写成A1(i,j)=Cjidet(A)A^{-1}(i,j)=\dfrac{C_{ji}}{\det(A)}

伴随矩阵

定义A=[C11C21Cn1C12C22Cn2C1nC2nCnn]A^{*}=\left[\begin{array}{cccc} C_{11} & C_{21} & \cdots & C_{n 1} \\ C_{12} & C_{22} & \cdots & C_{n 2} \\ \vdots & \vdots & \ddots & \vdots \\ C_{1 n} & C_{2 n} & \cdots & C_{n n} \end{array}\right](注意余子式下标与矩阵下标颠倒)

可以验证:AA=det(A)IAA^*=\det(A)I

AA(i,j)=k[n]A(i,k)A(k,j)=k[n]aikCjkAA^*(i,j)=\sum\limits_{k \in [n]}A(i,k)A^*(k,j)=\sum\limits_{k \in [n]}a_{ik}C_{jk}

于是,AA(i,i)=k[n]aikCik=det(A)AA^*(i,i)=\sum\limits_{k \in [n]}a_{ik}C_{ik}=\det(A)

对于iji \neq jAA(i,j)=k[n]aikCjkAA^*(i,j)=\sum\limits_{k \in [n]}a_{ik}C_{jk}。我们把AA的第jj行用第ii行覆盖,构成一个新的矩阵AA'。根据Cramer法则,det(A)=k[n]ajkCjk=k[n]aikCjk\det(A')=\sum\limits_{k \in [n]}a'_{jk}C'_{jk}=\sum\limits_{k \in [n]}a_{ik}C_{jk}。而由于AA'有两个相同的行,因此det(A)=0\det(A')=0。综上,AA(i,j)=0AA^*(i,j)=0。得证。

从另一个角度看,如果AA可逆,那么可以看出A1=Adet(A)A^{-1}=\dfrac{A^*}{\det(A)}