来源:返朴
不少同学在初学线性代数时感到迷茫、痛苦,体会不到课程的实际意义。这很大程度上是因为,教材为了由浅入深、循序渐进,须从基础的抽象概念讲起,而真正直观的部分,往往要等到后面的细分领域或具体应用。于是初学者往往知其然,不知其所以然;只见树木,不见森林。希望本文能让你换个视角,以轻松有趣的日常眼光,看到一个不一样的线性代数。
本文是系列文章《N文粗通线性代数》的第二篇,通过矩阵初等变换来引入矩阵的逆及其性质。主要思路是:消元法求解线性方程组→线性方程组的初等变换→矩阵的初等行(列)变换→化矩阵为“标准形”,从而可以轻易地写出解。
撰文 | 吴进远
上回书说到,某近视宅男,某日下楼到早点铺买早餐。眼镜忘在家里,看不清黑板上写的价目。于是,宅男就一边排队,一边听着前边顾客买早点的品种数量,和服务员小妹报的总价,据此计算各种早点品种的单价。
为了方便读者理解,我们把几位顾客的购买数据列成下面一个表:
(1)(可逆)矩阵乘法的逆运算
说了半天,该我们的近视宅男登场了。
他需要根据排队时听到的交易数据,算出每一种食品的单价。这就是说,他要求出一组多元一次方程的解。
这样一个方程组,也可以写成矩阵的形式,只不过,现在每一种食品的单价是未知数。
换句话说,他要做(可逆)矩阵乘法的逆运算。
(2)单位矩阵
一般而言,做逆运算比做正向的运算要难,(可逆)矩阵的逆运算也不例外。不过我们可以通过我们的直觉与经验,获得一些启发。
比如赶巧了,前面三个顾客:
第一位买了一个油饼,“3元”——服务员小妹报价;
第二位买了一个茶叶蛋,“4元”;
第三位买了一碗豆腐脑,“7元”。
这样一来,我们不费吹灰之力就知道了三种食品的单价。用矩阵乘法写出来,就是:
这种左上到右下对角线元素为1,其他非对角线元素都为0的矩阵,叫做单位矩阵,有时也称恒等矩阵。单位矩阵通常用字母 I 表示,也有教科书或文献用E或者U表示的。单位矩阵与任何其他矩阵相乘,结果与原矩阵相等。就像用1乘以任意实数,结果都与原数相同。
(3)对角矩阵
像上面这么巧的事很难碰上,我们可以将条件放宽一些,每个顾客不限定必须买一份食品。
比如一个顾客买了3个茶叶蛋,花了12元,等等。
这种情况也难不倒我们,只要做简单的除法,就能算出茶叶蛋的单价。
这种情形对应的矩阵叫对角矩阵,其中只有对角元素不是0,其他非对角元素都是0。前面谈到的单位矩阵是对角矩阵的特殊情况。
(4)上三角矩阵
实际上,对角矩阵这种情形需要三位顾客都只购买一种食品,这个条件仍然太苛刻。我们可以把条件进一步放宽:设想一位顾客购买了一种食品,另一位购买了两种,再一位购买了三种。
比如,第三位只买了豆腐脑,
第二位买了茶叶蛋和豆腐脑,
而第一位买了所有三种食品。
写成矩阵乘法,就会呈现下面这个样子:
这个矩阵叫上三角矩阵,它只有对角线以及上部元素可能不是0,而下部的非对角元素都是0。在这个情形下,想计算各个食品的单价也很容易。
从第三笔交易,我们用一次除法,就可以算出豆腐脑的单价。
再看第二笔交易,既然豆腐脑的单价知道了,茶叶蛋的单价也不难算出来。
接着看第一笔交易,虽然顾客买了所有三种食品,但其中两种的单价已经算出来了,因而只剩下一个未知数,也很容易算出来。
(5)消元法
不过,理想丰满现实骨感,在一般的情况下,我们可能碰不到这些容易计算的情况。
因此,我们需要把一般的交易,通过某种运算,变换成上面谈到的这些容易计算的情形,最终得到未知数的解。
比如我们开头谈到前三位顾客实际的交易,构成了三个三元一次方程。一次方程有时也叫线性方程。
我们的任务,是通过解这个线性方程组,求出它的三个未知数。
根据前面的提示,在求解中,我们应该尽量把非对角的元素,也就是方程组中左边非对角的系数变成0。
我们中学里学过解线性方程组的消元法,就是把一个方程左右两边,同时加减另一个方程的某个倍数,就可以把其中一个未知数的系数消成0。
比如:(2)-2*(1) ,(3)-3*(1),就可以把第二、第三两个方程的第一个系数消掉
我们再回过头去看一下宅男思考的那张图,就能慢慢体会其中思路。
注意他把第二行和第三行原来的黑字划掉,写上了对应的蓝字,就反映了这样一个计算过程。
进一步,通过 (3')-(2'),就可以把第三个方程中的第二个系数消掉(对应于图中第三行划掉蓝字,写上紫字):
到了这一步,方程组的系数构成一个上三角矩阵。由此,我们就可以一步步地把所有未知数算出来了。比如由(3")我们可以算出 x3 = 7,然后利用(2")算出 x2 等等。这个计算过程如果凭空干算,那的确需要学霸级别的心算能力。但如果有草稿纸,普通同学也能算出来。
这种消元的过程,可以看成是根据已知顾客的交易数据,组合出一些虚拟顾客的虚拟交易,以方便我们算出各个食品的单价。
(6)线性组合与线性相关
以上运算是把方程组中的系数拿来乘以一定的倍数再互相加减,我们通常把这种运算叫线性变换。得出的结果叫原来方程的线性组合。而这样得到的新方程与原来的方程组线性相关。过去有句话叫“线性相关,真是一关”。现在我们打怪升级,算是过了这一关的一小半。
线性组合是矩阵乘法的拿手好戏,像我们前面说的消元运算,可以很简单地写成矩阵的乘法。
我们把线性方程组(1) (2) (3)等号两边的系数拼在一起,构成一个增广矩阵:(A|y)。
然后用一个矩阵P1从左边去乘这个增广矩阵,得到的乘积为(A'|y')。
P1的第一行是(1 0 0),表示(A'|y')的第一行就是(A|y)的第一行。
注意这种用左边的向量去乘右边矩阵的操作中,我们是把左边每一横行的元素,竖起来与右边矩阵各个列的元素分别相乘并累加的。
P1的第二行是(-2 1 0),表示(A'|y')的第二行等于(A|y)的第二行减去第一行的2倍。
P1的第三行是(-3 0 1),表示(A'|y')的第三行等于(A|y)的第三行减去第一行的3倍。
经过这样一番操作之后,我们可以看出,(A'|y')实际上就是方程组(1') (2') (3')的增广矩阵,其中两个元素被消成了0。
为了把第三行第二列的元素也消成0,我们在P1这个操作的基础上,再引入另一个操作P2。
这里,P2对方程组的第一、第二行没有做任何变换,仅仅是从第三行中减去了第二行。至此,我们将方程组的系数矩阵,变换成了上三角矩阵。
不难想象,我们可以进一步做类似的操作,将上三角矩阵上部非对角元素也消成0,从而得到一个对角矩阵。然后从对角矩阵,对每一行简单地乘以(或除以)一个常数,把对角线元素都变成1,从而得到单位矩阵I。这些操作,也可以写成类似的矩阵,我们用P5,P4,P3等表示。
于是,我们就有:
(P5 P4P3P2P1)A = I。
把 (P5P4P3P2P1) 乘在一起,合并成一个矩阵
B=(P5P4P3P2P1),
我们得到:BA = I。
(7)逆矩阵
类似B这种矩阵,它和A相乘,得到单位矩阵I。我们把B称为A的逆矩阵。很多书籍和文献把A的逆矩阵写成A-1,也就是说
A-1A = I。
不过,这里提醒读者不要把这个-1的上标与倒数或-1次方混淆,逆矩阵不是通过简单的除法算出来的。
逆矩阵只有正方矩阵可能有。这意味着要求出N个未知数,必须有N个方程,或者说N个约束条件。方程(约束条件)多于或少于未知数个数都会给我们的求解运算带来一些麻烦,我们后面会谈到。
不过,并不是所有方阵都有逆矩阵,大家也许学到过,只有满秩的方阵有逆矩阵。方阵满秩等价于它的行列式不等于0。
(8)计算机求解矩阵的逆
近视宅男计算食品单价的过程,实际上是求解线性方程组的过程。而求解线性方程组的过程,可以看成是求解A的逆矩阵的过程。
前面介绍的算法听起来挺麻烦,但现在有了计算机,编好程序让计算机算就非常方便。大家从网上可以搜到很多矩阵求逆的在线计算器,除了算出结果,还可以帮助我们理解计算的过程。作者没有近视宅男那么强的心算能力,于是用网上的在线矩阵求逆计算器试验了一下,结果如下图所示。
在上面的计算过程中大家可以看到,计算开始时,程序在原矩阵右边贴了一个单位矩阵,二者组成一个增广矩阵。通过消元,把左边变成单位矩阵,于是右边就成了原始矩阵的逆矩阵。
最后的结果是:
类似的运算,有些书上叫高斯消去法,但实际上,这种运算方法并不是高斯首创。在高斯之前,牛顿就已经使用类似的方法了。那么这个方法是不是牛顿发明的呢?好像也没有看到有科学史文献提及是他发明的。我最近在一本教科书Basic Linear Algebra(作者是苏格兰教授T.S. Blyth和E.F. Robertson) 上看到,有一本书“The Nine Chapters on the Mathematical Art”上,就有这样的消元法。我顺着这个线索查了一下,这本书叫《九章算术》,里面确实有。
在人类智力活动中,类似的例子非常多。前人做出某个成果,后人没有读过文献,于是又重新发现一次。就以我自己为例吧,我自己早年就有过一个发明,重复了整整100年前前人的发明。更有意思的是,我过了30多年才知道,前人已经在130多年前做出了这个发明。
(8)逆矩阵的一些性质
一个满秩的方阵A和它的逆矩阵B之间有很多很有用的性质。
比如
AB=I,
而且
BA=I。
你可能觉得,这有什么可大惊小怪的,就像:
2×0.5=0.5×2=1,
可是问题没有那么简单。一般来说,矩阵乘法是不符合交换律的,只有在一些特殊的情况下,才会有像这样可以交换的情形。
我们这里不做严格的证明,仅仅用买早餐这个事来说明一下这两个关系式是什么意思。我们仍然假设早餐店卖三种食品,三个顾客购买品种的向量互相线性无关,因此购物矩阵A是一个3×3的满秩矩阵。根据这个矩阵A,近视宅男可以算出一个逆矩阵B。
对于任意的一组价格 x,服务员小妹都可以算出三位顾客的购物金额:
y = Ax。
而反过来,近视宅男可以根据前面三位顾客的购物金额 y,反过来算出三种食品的价格:
x = By。
因此:x = B(Ax) = (BA)x。由于这个关系式对任意的价格向量都成立,我们可以证明 BA = I(这里略去500字证明过程)。
反过来,对于任意的一组购物金额 y,近视宅男都可以算出三种食品的价格:
x = By。
而服务员小妹则可以根据三种食品的价格 x,算出三位顾客的购物金额:
y = Ax。
因此:y = A(By) = (AB)y。由于这个关系式对任意的购物金额向量y都成立,我们可以证明 AB = I(这里略去500字证明过程)。
从 AB = I 出发,如果在等式两边从左边乘上一个 B,我们会得到:
BAB = B。
同样,在等式两边从右边乘以一个 A,可以得到:
ABA = A。
像这样形状的两个关系式,我们今后会多次看到。这里提醒读者注意,ABA = A 和 BAB = B 这两个关系式与 AB = I和 BA = I 不是等价的。我们只能从 AB = I 或 BA = I 推出 ABA = A 和 BAB = B。但反过来不行。比如,你不能从 ABA = A,两边“划掉”一个A,得到 AB = I。
(9)左逆矩阵与右逆矩阵
对于一个矩阵A,假如另一个矩阵B从左边与它相乘而得到单位矩阵,也就是说:
BA=I,
则矩阵B是A的左逆矩阵。
而如果从右边乘,得到单位矩阵:
AB=I,
则B是A的右逆矩阵。
对于满秩方阵,它的逆矩阵既是左逆,也是右逆。但在一般的情况下,比如不是方阵,一个矩阵可能只有左逆或者只有右逆。
为了方便读者理解,我们把几位顾客的购买数据重新列在下表:
我们这个早餐店卖三种食品,表中有四个顾客。对于给定的单价向量x,根据每位顾客购买数目,服务员小妹可以算出四位顾客购物总价组成的向量y。写成矩阵是:
y = Sx 。
这里顾客购买数目组成的矩阵S有3列4行,它是一个“瘦高”的矩阵。为了方便读者注意到这是一个瘦高矩阵,我们特意用S这个拼音字母来代表它。
当这个矩阵是列满秩的时候,它存在一个左逆矩阵P。利用这个左逆矩阵,近视宅男可以根据顾客购物总额向量y,反算出单价向量x,即:
x = Py。
这个左逆矩阵P有4列3行,它是一个“矮胖”的矩阵。为了方便读者注意到这是一个胖矩阵,我们特意用P这个字母来代表它。
对于任意价格向量x,服务员小妹算出顾客购物总额 Sx,然后近视宅男可以反向算出价格向量:
x = P (Sx)。
因此 P 这个操作可以逆转抵消 S 这个操作,我们可以证明:
PS = I,
P是S的左逆。通常情况下左逆 P 可能不是唯一的,我们可能会根据其他条件从许许多多左逆中挑一个。
另外,左逆不一定同时是右逆,对于任意顾客购物总额向量 y1,近视宅男确实可以算出一个价格向量,x1 = Py1,但这个价格与真实的价格可能完全不同,服务员小妹确实也可以根据这个价格算出顾客购物总额 y2 = Sx1,但它可能和开始给的 y1 不同,因此 S 这个操作不一定能逆转抵消 P 的作用,因此 SP 不一定等于 I。
在服务员小妹算出的顾客购物总额 y = S x 之中,所有购物额都是靠谱的,没有互相矛盾的情形,以此为基础,宅男才能算出正确的价格 x = P (S x)。但如果基于任意顾客购物总额向量 y1 情况就不一定了。比如某个顾客可能信口开河说这顿早餐花了200元,这样一来所有的计算就都乱了。
左逆矩阵与右逆矩阵是更宽范围内的广义逆矩阵中的两种特殊情况,我们后面会讨论到。(未完待续)
4000520066 欢迎批评指正
All Rights Reserved 新浪公司 版权所有