從近視宅男買早餐到彭羅斯逆矩陣:矩陣的秩|N文粗通線性代數_風聞
返朴-返朴官方账号-关注返朴(ID:fanpu2019),阅读更多!1小时前
不少同學在初學線性代數時感到迷茫、痛苦,體會不到課程的實際意義。這很大程度上是因為,教材為了由淺入深、循序漸進,須從基礎的抽象概念講起,而真正直觀的部分,往往要等到後面的細分領域或具體應用。於是初學者往往知其然,不知其所以然;只見樹木,不見森林。希望本文能讓你換個視角,以輕鬆有趣的日常眼光,看到一個不一樣的線性代數。
本文是系列文章《N文粗通線性代數》的第三篇。我們在上篇文章中通過矩陣初等變換來引入矩陣的逆及其性質,討論了線性方程組的求解過程。線性方程組解的結果只有三種可能:無解,有唯一解,有無窮多個解。那麼,這其中又有什麼規律呢?
往期文章:
第一篇:矩陣乘法
第二篇:逆矩陣
撰文 | 吳進遠
上回書説到,某近視宅男,某日下樓到早點鋪買早餐。眼鏡忘在家裏,看不清黑板上寫的價目。於是,宅男就一邊排隊,一邊聽着前邊顧客買早點的品種數量,和服務員小妹報的總價,據此計算各種早點品種的單價。
圖1
一通採集數據,分析計算之後,近視宅男求出了線性方程組係數矩陣的逆矩陣,算出了食品單價,買了早餐。一邊吃,一邊陷入了沉思。
(1)幾筆買賣定乾坤?
我們知道,只有正方形的矩陣才可以求出逆矩陣。具體在我們這個買早餐的問題中,三個未知數,需要正好三筆交易,或者説三個線性方程,才可以求出未知的食品單價。但在現實世界中,我們完全可能遇到不是正好三筆買賣的情況,這些情況下,我們的計算會遇到什麼問題呢?
從直覺上我們知道,方程個數少於未知數的個數,肯定無法求出唯一解。可是,假如二者相等,就一定能求出唯一解嗎?更進一步,要是方程的個數比未知數的個數還多,情況又會怎麼樣?我們下面一步步地分析一下:
為了直觀地討論這些問題,我們把三種食品的單價畫在一個三維的座標系中。下面的這些圖中:
水平方向是油餅單價x1,
豎直方向為茶葉蛋單價x2,
而豆腐腦的單價x3則指向紙面之外。
圖2
上面這個圖中畫出了一個平面(紅色),它是線性方程組中的第一個方程的圖像,也就是第一個顧客那筆買賣。
這位顧客買了一個油餅、一個茶葉蛋、一碗豆腐腦,總價14元。
僅僅根據第一筆買賣,我們顯然無法算出三種食品的單價,但我們多少還是獲得了一些信息。具體説,我們知道這三種食品的單價一定在這個平面的某一個點上。
比如這個平面和橫軸相交在x1=14這個點上,這個點對應於油餅14元,茶葉蛋和豆腐腦免費。
儘管在現實中很少有老闆這麼定價,但這個點所對應的這一組單價與這一個方程是沒有矛盾的。事實上,整個平面上所有的點都與這個方程沒有矛盾,而真實的單價也處於這個平面上,就是我們圖中標出的藍色圓點。
的確,僅僅知道一筆交易,或者一個方程,我們沒有足夠的信息確定真實的單價。現在我們引入第二筆買賣,這個方程在圖3中對應另一個平面(綠色)。
圖3
這個平面與第一個平面在一條直線上相交。這就是説,同時滿足兩個方程的單價組合,只能處於這條直線上。儘管真實單價組合確實位於這條直線上,但我們仍然無法確認其準確位置。同時符合這兩個方程的,仍然有無窮多個解。
顯然,我們需要引入第三筆買賣。第三筆買賣對應的線性方程,在下面圖中對應紫色的平面。
圖4
這個新的平面與前面兩個平面相交在一個共同的空間點上,這就是這個問題中真實的單價組合。因此,如果有N個未知數,至少要有N個方程才能求出唯一解。
那麼,是不是方程數等於未知數個數就一定能求出唯一解呢?不一定。假設在買早餐這個例子中,宅男沒有聽清楚顧客3的交易數據,只用顧客1、2、4的交易數據來求解,就無法得到唯一解。
為了讀者理解方便,我們把幾位顧客的購買數據重新列在下表:
大家仔細觀察,就會發現這位顧客4的交易數據是顧客1、2兩組數據的線性組合:5×(顧客1數據)-(顧客2數據)。
因此,顧客4的數據沒有提供任何新的信息,這一方程對應着圖5中紫色的平面。而這個平面,與前面兩個平面相交於同一條直線,這條直線上的所有點都同時滿足三個方程。
圖5
不難想象,即使我們再增加若干方程,但如果新增加方程是原有方程的線性組合,則新增方程仍然不能提供新的信息,或者新的約束,所以仍然無法得到唯一解。這些方程畫在上面的圖中,是一組平面,而這些平面都相交於一條公共的直線。
(2)秩的那些事
線性方程組 Ax=y 解的性質,和矩陣A的秩(rank)關係密切。所謂秩,是指矩陣中線性獨立的行或列的最大個數。前面買早餐的例子中,顧客1、2、3的三筆交易互相線性獨立,因此這一個矩陣的秩rank(A)=3。而如果不包含顧客3,只考慮顧客1、2、4這三筆交易,則我們只能找到兩個線性獨立的行,第三行只是前兩行的線性組合。因此,這樣一個矩陣的秩 rank(A)=2。
一個矩陣的列數m對應於方程組的未知數個數,而它的秩rank(A)則是線性獨立的方程數的最大個數,也可以看成是能夠提供獨立信息的約束的個數。當rank(A) = m,我們管這種情況叫做列滿秩,這時方程組如果有解,則其解是唯一的。
如果rank(A)<m,我們管這種情況叫做欠秩,方程組如果有解,則其解不是唯一的,而是有無數個。
如果一個矩陣是“矮胖”的,或者説它的行數小於列數,顯然它不可能是列滿秩的。“矮胖”矩陣對應的方程組沒有唯一解,如果有解也是無窮多個解。
當行數大於列數,矩陣變成“瘦高”的,對應的方程組才可能有唯一解(如果有解的話)。但在有解的前提下,具體什麼情況還要看它是不是列滿秩。
這兩種情況通過前面的例子很容易理解。
(3)什麼叫無解?
讀者可能會問,為什麼要強調方程組“如果有解”呢?難道還有方程組無解的情況嗎?的確如此。
一個方程組裏,每添加一個方程,就可能增加一個約束。這樣,在理想的情況下,有效的約束夠了,就可以幫助我們找到方程組的解。
繼續增加方程,則可以幫助我們驗算,檢查前面算得對不對。
可是,在我們往方程組裏添加方程時候,完全可能添亂,加進去自相矛盾的方程。這種情況下,這個方程組是沒有解的。
比如買早餐的例子中,第一個顧客買了一個油餅、一個茶葉蛋、一碗豆腐腦,服務員小妹報價14元。假設另一個顧客買了兩個油餅、兩個茶葉蛋、兩碗豆腐腦,這時報價應該是28元。假定顧客是位廣東人,服務員小妹貼心地按照廣東話來發音,於是我們的宅男就完全可能把“二十八”誤聽為“一三八”。這樣一來,我們就遇到了一個自相矛盾的方程組。
在現實世界,數據採集傳輸中出現錯誤的情況非常普遍,因此方程組自相矛盾的情況也會非常普遍,而且自相矛盾的花樣可能會非常複雜。為了搞清楚方程組有沒有解,就需要用到另一個矩陣的秩:就是增廣矩陣(A|y)的秩rank(A|y)。這裏説的增廣矩陣,就是把方程組Ax=y當中的y與A拼在一起。這裏,y是縱向的一列數字,它可以看成是一個向量。而A當中各個列,也分別是同樣維數的向量。
不難看出,如果方程組Ax=y有解,則y就一定是A當中各個列向量的線性組合。我們把y添加到A當中,新增加的這一列,與其他各個列是線性相關的。這樣一來,增廣矩陣(A|y)的秩rank(A|y)就不會比原矩陣A的秩rank(A)大。因此,方程組有解就等價於rank(A|y)=rank(A)。
反之,如果添了一列之後,秩增加了,即rank(A|y)=rank(A)+1,則方程組必然是自相矛盾的,沒有解。
我們把前面談到的這些情況列個表出來,就一目瞭然了。
這裏需要指出,當矩陣A不是滿秩的時候,如果方程有解就會有無窮多個解,但不同情況下的“無窮多個”是不一樣的。具體説,就是解空間的維數等於m-rank(A)。
比如我們買早餐的例子中,m=3。當只有第一個顧客數據時,rank(A)=1,這時解空間是一個平面,解空間的維數等於(m-rank(A))= 3-1 = 2。
在第二個顧客,乃至第四個顧客的數據加進來後,rank(A)=2,這時解空間的維數等於 3-2 = 1,解空間是一條直線。
當第三個顧客的數據加進來後,rank(A)=3,這時解空間的維數等於 3-3 = 0,於是解空間成為一個點,解的個數從無窮多變成了1,方程存在唯一解。
(4)零元購與齊次線性方程組
我們有時候會遇到齊次線性方程組,也就是Ax=0。“齊次”的意思説的是方程中只有未知數x的一次方項,沒有常數項,或曰沒有未知數x的0次方項,因此各個項中的方次是“齊”的。
由於方程組右邊等於0,因而它的增廣矩陣的秩顯然不會增加。因此齊次線性方程組肯定是有解的,我們用肉眼就可以看出x=0顯然是方程的解。
可是問題來了,除了x=0這樣一個平凡解,齊次線性方程組Ax=0還會不會有不等於0的解呢?從前面討論我們知道:rank(A)<m的情況下,方程組有無窮多個解,因此,齊次線性方程組確實會有非0解。
為了便於理解,我們畫出下面這個圖,圖中的每個平面相當於一個線性方程,這三個平面對應的方程是線性無關的。每個方程的右端常數項都等於0,其幾何意義是每個平面都經過原點。
圖6
上面圖中,三個平面只存在唯一一個公共交點,也就是原點。因此,當rank(A)=m的時候,方程組有唯一解,也就是説,只有x=0這樣一個平凡解。
如果三個平面對應的方程存在線性相關(比如秩等於2),它們之間的空間關係就可能看起來像這樣:
圖7
由於每個方程右邊也都等於0,因此每個平面也都經過原點。不過由於三個方程是線性相關的,這三個平面有無窮多個公共點。
在秩等於2的情況下,這些公共點構成一條直線,這條直線也通過原點。這樣,除了x=0這一個平凡解,這條直線上其他地方也是方程組的解,或者説,這個齊次線性方程組存在非0解。
在實數中,只有0乘以一個數其乘積才會是0。因此對於非零解,我們有時不容易想象。實際上,一堆不完全是0的數和另一堆不完全是0的數相乘,它們的乘積相加,確實可能得出一個0。這種情況並不難發生,比如只要兩組數相乘之後,乘積有正有負,它們就完全可能相互抵消為0。再比如所有不等於0的數在矩陣相乘時都完美錯過,都與0相乘,則結果也是0。
在線性代數中,所有元素都為0的矩陣叫零矩陣。零矩陣與任何矩陣相乘自然會得到零矩陣,但反過來卻不一定。事實上,兩個非零矩陣相乘,也完全有可能得到零矩陣。一個存在非零解的齊次線性方程組,實際上就是兩個非零矩陣相乘得到零矩陣的例子。
齊次線性方程組在我們買早餐的例子中會是什麼情形呢?首先,我們的宅男聽到前面的所有交易的結果都是0,可以想象這種“零元購”是個非常歡樂的情況。過去學校或者單位的食堂,有的時候因為管理員經營有方,經常能到菜市場採購到便宜的食材,一年下來會結餘很多,於是到年底就會有一天“吃結餘”。顯然,如果所有食品的單價都為0,就會出現吃結餘或者零元購的結果。
但是反過來卻不一定。比如,僅僅根據下面兩個顧客的購買數據,我們並不能確認所有食品單價都是0:
第一個顧客買了一個油餅、一個茶葉蛋、一碗豆腐腦,0元;
第二個顧客買了兩個油餅、四個茶葉蛋、四碗豆腐腦,0元。
因為除了所有食品都不要錢的情況,我們完全可能找到使這兩個方程成立的非零解。比如設想:
油餅、茶葉蛋、豆腐腦的單價0元、X元、-X元,上面兩個方程就可以成立。
這一組單價表示油餅不要錢,茶葉蛋一顆X元,而買一碗豆腐腦不但不收錢,還會倒送X元的禮品券。這種情況在做買賣上聽着不很合理,但在理論中,卻是齊次線性方程組理論上存在的非零解。
現在,如果把第三位顧客的數據加進去:
假定他買了一個油餅、三個茶葉蛋、三碗豆腐腦,0元;
我們仍然不能確認所有食品單價都是0。因為他的購買數量向量是前兩位的線性組合(第二位購買數量向量 - 第一位購買數量向量)。
只有再來顧客,他的購買數量向量與前幾位的線性無關,整個矩陣變成了列滿秩的,我們才能得到新方程組的唯一解,即所有單價都為0。(未完待續)
特 別 提 示
1. 進入『返樸』微信公眾號底部菜單“精品專欄“,可查閲不同主題系列科普文章。
2. 『返樸』提供按月檢索文章功能。關注公眾號,回覆四位數組成的年份+月份,如“1903”,可獲取2019年3月的文章索引,以此類推。
版權説明:歡迎個人轉發,任何形式的媒體或機構未經授權,不得轉載和摘編。轉載授權請在「返樸」微信公眾號內聯繫後台。