从近视宅男买早餐到彭罗斯逆矩阵(2)逆矩阵|N文粗通线性代数

不少同学在初学线性代数时感到迷茫、痛苦,体会不到课程的实际意义。这很大程度上是因为,教材为了由浅入深、循序渐进,须从基础的抽象概念讲起,而真正直观的部分,往往要等到后面的细分领域或具体应用。于是初学者往往知其然,不知其所以然;只见树木,不见森林。希望本文能让你换个视角,以轻松有趣的日常眼光,看到一个不一样的线性代数。

本文是系列文章《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'),就可以把第三个方程中的第二个系数消掉(对应于图中第三行划掉蓝字,写上紫字):

但如果有草稿纸,普通同学也能算出来。

这种消元的过程,可以看成是根据已知顾客的交易数据,组合出一些虚拟顾客的虚拟交易,以方便我们算出各个食品的单价。

(6)线性组合与线性相关

以上运算是把方程组中的系数拿来乘以一定的倍数再互相加减,我们通常把这种运算叫线性变换。得出的结果叫原来方程的线性组合。而这样得到的新方程与原来的方程组线性相关。过去有句话叫“线性相关,真是一关”。现在我们打怪升级,算是过了这一关的一小半。

线性组合是矩阵乘法的拿手好戏,像我们前面说的消元运算,可以很简单地写成矩阵的乘法。

我们把线性方程组(1) (2) (3)等号两边的系数拼在一起,构成一个增广矩阵:(A|y)。

(7)逆矩阵

类似B这种矩阵,它和A相乘,得到单位矩阵I。我们把B称为A的逆矩阵。很多

不过,这里提醒读者不要把这个-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可能不是唯一的,我们可能会根据其他条件从许许多多左逆中挑一个。

在服务员小妹算出的顾客购物总额y=S x之中,所有购物额都是靠谱的,没有互相矛盾的情形,以此为基础,宅男才能算出正确的价格x=P(S x)。但如果基于任意顾客购物总额向量y1 情况就不一定了。比如某个顾客可能信口开河说这顿早餐花了200元,这样一来所有的计算就都乱了。

左逆矩阵与右逆矩阵是更宽范围内的广义逆矩阵中的两种特殊情况,我们后面会讨论到。(未完待续)

特 别 提 示

1. 进入『返朴』微信公众号底部菜单“精品专栏“,可查阅不同主题系列科普文章。

2. 『返朴』提供按月检索文章功能。关注公众号,回复四位数组成的年份+月份,如“1903”,可获取2019年3月的文章索引,以此类推。

版权说明:欢迎个人转发,任何形式的媒体或机构未经授权,不得转载和摘编。转载授权请在「返朴」微信公众号内联系后台。