從近視宅男買早餐到彭羅斯逆矩陣(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月的文章索引,以此類推。

版權說明:歡迎個人轉發,任何形式的媒體或機構未經授權,不得轉載和摘編。轉載授權請在「返樸」微信公衆號內聯繫後臺。