三条基本性质
两个向量可以描述平行四边形的面积,三个向量可以描述平行六面体的体积。再往高维推广,n个向量可以描述一个“n维平行多面体”的“体积”。我们将会看到,这样的“体积”拥有一些性质,我们能从这些性质中推出体积的表达式。对于n个n维向量,设它的体积为函数D(a1,⋯,an)。
第一,“体积”要满足线性性:D(a1,⋯,cai+c′ai′,⋯,an)=cD(a1,⋯,ai,…,an)+c′D(a1,⋯,ai′,⋯,an)。从平行四边形来理解,延长某条边对应着面积也要增大相应的倍数。在“同底”的基础上加上另一个方向的边面积也为增加相应的面积。(c可以取0)
第二,“体积”要满足列加法不变性:D(a1,⋯,ai+caj,⋯,aj,⋯,an)=D(a1,⋯,ai,⋯,aj,⋯,an)。从平行四边形来理解,将某条边的端点沿着另一条边的方向平移,平行四边形是同底等高的,面积不变。
第三,单位矩阵的列向量构成的体积为1:D(e1,⋯,ei,⋯,en)=1
我们将会看到,这样的函数D存在且唯一。这n个n维向量构成矩阵A,我们就称A的行列式为D(a1,⋯,an),记作det(A)。而要证明存在性与唯一性,需要这三条性质推出的更多性质。
由三条基本性质推出的其他性质
如果交换两个向量的位置,那么行列式要加上负号。只看两项,D(ai,aj)=D(ai,ai+aj)=D(−aj,ai+aj)= D(−aj,ai)= −D(aj,ai)。
如果存在ai=0,那么D=0。因为0可以看作0⋅ai,将系数提出即可。如果存在ai=aj,那么D=0,因为只需做列加法就会得到一个零向量。进一步,如果某一列是其他列的线性组合,那么D=0,因为可以把这个向量用其它向量的线性表示来拆开,拆出来的每一项都有相同向量,因此都为0。进一步得到,只要矩阵不是满秩的就有D=0。如果把某些列的线性组合加到某一列上,那么D不变。
对角矩阵的行列式等于对角线上数的乘积。依据是线性性(提出系数)和性质三。进一步,如果矩阵可逆,那么任何矩阵都能消成三角矩阵,再消成对角矩阵。而我们发现我们已经知道所有初等列变换对行列式的影响,因此对于任意矩阵,我们只需要竖着高斯消元,就可以消成对角矩阵,也就在这过程中求出了行列式的值。根据高斯消元,当且仅当矩阵满秩时对角线上的元素才是全部非0的。而如果矩阵不是满秩的,行列式一定为0。(方阵可不可逆只需要看行列式等不等于零。)
于是,我们已经可以计算任何矩阵的行列式了!
我们特别关注方阵A乘以列初等变换矩阵E后AE的行列式的值。当E表示乘以某个常数c时,det(E)=c,同时有det(AE)=cdet(A);当E表示交换两列时,det(E)=−1,同时有det(AE)=−det(A);当E表示列相加时,det(E)=1,同时有det(AE)=det(A)。综上,det(AE)=det(A)det(E)恒成立。
由Gauss-Jordan可知,任何一个可逆矩阵都可以表示为一系列初等矩阵的乘积。所以对于det(B)=0,有det(AB)=det(AE1E2⋯En),归纳地得到det(AB)=det(A)det(E1)det(E2)⋯det(En)。而我们也可以归纳地得到det(B)=det(E1)det(E2)⋯det(En),因此有det(AB)=det(A)det(B)。而当det(B)=0时,det(AB)=0也成立,因为我们证明过rank(AB)≤min{rank(A),rank(B)}。综上,对于任何矩阵都有det(AB)=det(A)det(B)。
再来证det(A)=det(A⊤)。当A不可逆时显然成立。当A可逆时,把它写作初等矩阵地乘积A=E1E2⋯En,于是A⊤=En⊤⋯E2⊤E1⊤。要证det(E1)det(E2)⋯det(En)=det(En⊤)⋯det(E2⊤)det(E1⊤),只需证det(E)=det(E⊤)。当E表示乘以某个常数时成立,当E表示交换两列时成立,当E表示列相加时依然成立。这条性质告诉我们,如果我们对矩阵做行变换,对行列式产生的影响也满足列变换的那套规则——我们可以先把矩阵取转置,这不改变行列式,然后做相应的列变换,最后再把矩阵转置回来。
The Big Formula
有了这些性质,我们来看D的表达式必须具有怎样的形式。
每个向量都可以写成ai=k∈[n]∑akiek的形式(坐标正交分解),再根据D的线性性,我们把它用如上方式全部展开得到许多ap11ap22⋯apnnD(ep1,ep2,⋯,epn)的和,其中pi对应着1到n中的一个数,在第i个向量中分解出epi就必须提出apii作为乘在前面的系数。总共会有nn个项。而我们知道如果存在pi=pj,那么势必有D=0。在所有这nn个项中我们只需要考虑那n!个D=0的项,它们刚好对应1到n的全排列。而对于这样的D只可能是−1或1,这取决于把D换回顺序所需要的交换次数。假设有函数τ(p)表示需要交换的次数,那么就有:
det(A)=σ∈Perm(n)∑(−1)τ(σ)aσ(1)1aσ(2)2⋯aσ(n)n
我们可以把τ(p)定义为p中逆序对的个数:逆序对的个数一定与任何一个“交换次数”有相同的奇偶性。考虑交换一个逆序对时,会对逆序对总数的变化产生贡献的一定是逆序对对应的区间内部的那些介于两个端点之内的值的个数,每个值原先产生2个逆序对,现在产生0个逆序对。如果交换的不是逆序对,依然只有端点内的值为影响,每个值原来不产生逆序对,现在产生2个逆序对。而区间端点本身的交换会对总数有1的影响。综上,无论做什么样的交换,只会以奇数的方式改变逆序对数量。假设逆序对总数为奇数,那么不可能有偶数个奇数的和为奇数,因此交换次数必须是奇数;假设逆序对总数为偶数,那么不可能有奇数个奇数的和为偶数,因此交换次数必须是偶数。
这就是行列式定义——The Big Formula!
我们返回去验证,这样定义的行列式具有上述讨论的所有性质。而这只要求我们验证它有三条基本的性质。我们只需要把等式两边代入Big Formula,并判断它们是否相等就好了。
我们可以这样理解The Big Formula。行列式由n!项相加得到,每一项对应着一个排列。我们在每一列一定要取一个,而取哪一个就取决于排列的这一位是几。最后这些元素相乘,还要乘上这个排列的逆序对个数。
余子式,拉普拉斯展开
定义方阵A的余子式Cij=(−1)i+jdet(Mij),其中Mij表示矩阵A中去掉第i行元素和第j列元素后留下的新矩阵。我们之所以关注到这种排除当前行列的结构,是因为行列式计算时的每一项如果选了某个元素,那么就一定不会再选到同一行同一列的元素了。我们将会看到余子式的出现对问题的简化。
对于n>1的矩阵,成立det(A)=a11C11+a21C21+⋯+an1Cn1,称为行列式的拉普拉斯展开。对于ai1Ci1这一项,它对应着Big Formula里所有σ(1)=i的排列,因此在det(Mi1)的基础上,还需要加上i放在第一个而产生的i−1个逆序对,因此令det(Mi1)乘上(−1)i−1得到的恰好与Ci1=(−1)i+1det(Mi1)相符。
而赋予了第一列特殊性是没有道理的,行列式的每一列都应当具有相同的地位。事实上,对于所有的j,都有det(A)=a1jC1j+a2jC2j+⋯+anjCnj。对于aijCij这一项,相当于选定了σ(j)=i。考虑交换次数,把它从第j列“挪到”第1列正好做j−1次交换,然后贡献i−1个逆序对,因此要给det(Mij)乘上(−1)j+i−2,正好与Cij=(−1)i+jdet(Mij)相符。
更一般地,我们还可以选取某一行做拉普拉斯展开。我们证明过转置不改变行列式,那么可以想象Cij=Cji′,于是det(A⊤)=a1j′C1j′+a2j′C2j′+⋯+anj′Cnj′ =aj1Cj1+aj2Cj2+⋯+ajnCjn=det(A)
Cramer法则
行列式可以用于计算线性方程组。虽然实际应用中没人会用这么繁琐的方法真的来解线性方程组,但我们要说明的是我们是能在行列式与线性方程组之间建立起直接关系的。更重要的是,高斯消元仅仅给出了一个求线性方程组的“算法”,而我们将会看到,基于行列式的“Cramer法则”却精确地给出了方程组的解的表达式。
对于Ax=b,我们可以写出Ax1x2x3⋮xn010⋮0001⋮0⋯⋯⋯⋱⋯000⋮1=[AxAe2Ae3⋯Aen]=b1b2b3⋮bna12a22a32⋮an2a13a23a33⋮an3⋯⋯⋯⋱⋯a1na2na3n⋮ann,设右边的矩阵为B1,而乘在A右边是三角矩阵,其行列式为x1。根据行列式乘法的运算性质,我们得到det(A)x1=det(B1)。如果A可逆,那么一定有x1=det(A)det(B1).
类似地,A10⋮0⋯⋯⋱⋯x1x2⋮xn⋯⋯⋱⋯00⋮1=[Ae1⋯Ax⋯Aen]=a11a21⋮an1⋯⋯⋱⋯b1b2⋮bn⋯⋯⋱⋯a1na2n⋮ann,设右边的矩阵为Bi,那么xi=det(A)det(Bi)。
所以,Cramer法则就是说,如果依次把A矩阵中第i列用b替换,那么就可以写出线性方程组的解xi=det(A)det(Bi)。
Cramer法则也可以用于求逆。根据AA−1=I,求A−1等价于依次求解Axi=ei。依次把A的第j列替换成ei构成A′,那么就有xi(j)=det(A)det(A′)。把det(A′)用第j列拉普拉斯展开就能发现,det(A′)=Cij。于是可得,xi(j)=det(A)Cij。整理一下,可以写成A−1(i,j)=det(A)Cji
伴随矩阵
定义A∗=C11C12⋮C1nC21C22⋮C2n⋯⋯⋱⋯Cn1Cn2⋮Cnn(注意余子式下标与矩阵下标颠倒)
可以验证:AA∗=det(A)I
AA∗(i,j)=k∈[n]∑A(i,k)A∗(k,j)=k∈[n]∑aikCjk。
于是,AA∗(i,i)=k∈[n]∑aikCik=det(A)。
对于i=j,AA∗(i,j)=k∈[n]∑aikCjk。我们把A的第j行用第i行覆盖,构成一个新的矩阵A′。根据Cramer法则,det(A′)=k∈[n]∑ajk′Cjk′=k∈[n]∑aikCjk。而由于A′有两个相同的行,因此det(A′)=0。综上,AA∗(i,j)=0。得证。
从另一个角度看,如果A可逆,那么可以看出A−1=det(A)A∗