來自MIT的經典線代課程--Gilbert Strang
第七課:求零空間、主軸變量與自由變量、特解、簡化列階梯形矩陣 ( Computing the nullspace , Pivot variable - Free variable , Special solution , Reduced row echelon form )
開頭
過去幾堂課程中學到了不少的「 定義 ( Definition ) 」與「 特例 」,而這堂課的會學到如何將「 定義 」轉換為「 算法 ( Algorithm ) 」,畢竟線性代數本身是一門更偏向應用的學科,理論基礎了解過後,便需要「 實戰 」打磨了
求零空間
上一堂課程的末段,筆者有簡單補充一般線性方程組的「 解集 」結構,倘落此方程有解,則必須求得該「 係數矩陣 」的「 零空間 」進一步構成「 通解 」
因此在這堂課會從「 求零空間 」這一概念延伸並銜接一般方程組的求解過程,並且為了一般性的結論,本次課程的範例矩陣會以長方陣進行說明,給定一長方陣 A

從結構上看,A 是一個「 線性相依 」的矩陣,無論是行向量或是列向量都能看出來,當然就算沒有注意到,在執行消元時,一樣能夠看出來這一性質
由於A 是一個「 線性相依 」的矩陣, 因此消元過程中必然會出現「 消元主元為零 」的問題,不過不用太急著使用「 轉置矩陣 」,這次消元尚且不需要使用到它
值得注意的是,現在要找的集合是「 Null ( A ) 」,而消元並不會影響「 Null ( A ) 」的結構,因為消元可以使用「 消元矩陣 」E 表示為矩陣乘法,而求「 Null ( A ) 」的對應線性方程組是
A x = 0
所以無論進行幾次,在等量公理的作用下,等號右側依然會保留「 零向量 」這一特質,所以雖然最後的「 REF ( A ) 」與原始的 A 完全不同,但消元不影響求解,自然也影響不了由解所構成的「 Null ( A ) 」,但是「 C ( A ) 」會因此改變這倒是需要各位讀者留意,就讓我們開始吧
首行消元,列「 消元矩陣 」E21

得 A1 = E21 A

繼續執行首行消元,列「 消元矩陣 」E31

得 A2 = E31 A1

現在第一行消完了,可是遇到了小問題,此時出現「 消元主元 ( a22 ) 等於零 」的問題,按照高斯消元法,應該要利用「 轉置矩陣 」進行「 列向量互換 」,以保主元不為零,但是從「 a22 」往下一看,便會發現都是零,怎麼換都是徒勞,能怎麼辦呢?只能當作這個主元不存在先繼續消元
不過消元過程中遇到此事件其實也不算差,因為這個資訊意味著
「 第二行是前幾行的線性組合 」
換句話說
「 第二行向量「 線性相依 」於前幾行的行向量 」
好吧,既然問題解決不了就只能無視問題了,當個鴕鳥也未嘗不可哈哈
將「 a23 」視為「 第二消元主元 」以繼續執行第三行消元,列「 消元矩陣 」E32

得 A3 = E32 A2

至此消元完成
REF ( A ) = A3
現在來看看算出來的「 REF ( A ) 」,「 REF ( A ) 」具有兩個主元,在數學上,「 REF ( A ) 」的主元數量被稱為「 秩 ( Rank ) 」,也記做
Rank ( A ) = n ( Pivots of A ) = 2
至於為啥「 Rank 」會被翻譯為「 秩 」,筆者猜想,由於「 Rank 」這一個詞彙在本意上象徵的「等級 」,而在線性代數中,「 Rank 」的數值在某種意義上會被視為「 矩陣的階級 」,更嚴謹一點說,「 秩 」更多對應在「 維度 ( Dimension ) 」這一概念上,也是後面才會學習到的
Rank ( A ) = Dim ( C ( A ) )
所以...所以在中文語境中,因為「 秩序 」的「 秩 」剛好看起來比較帥,然後語意勉強勾得上邊,所以就被數學家拿來用了
對,上面那段廢話就是筆者覺得這個命名一點邏輯也沒有的小抱怨文而已,別太認真
主軸變量與自由變量 ( Pivot variable - Free variable )
既然消元結束了,是時候該進行回代了...嗎?
別急,有個更好用的指標可以使用,那便是「 主軸變量 」與「 自由變量 」,在討論這兩個指標前,讀者需要先了解「 主元行 ( Pivot Column ) 」與「 自由行 ( Free Column ) 」,要區分哪些是「 主元行 」哪些是「 自由行 」需要通過「 主元 ( Pivot ) 」所在的位置來判定
若主元存在該「 行向量 」,則稱該「 行向量 」為「 主元行 」,而 A 的「 主元行 」為
Column 1 & 3 → [ 1 , 0 , 0 ]T & [ 2 , 2 , 0 ]T
若主元不存在該「 行向量 」,則稱該「 行向量 」為「 自由行 」,而 A 的「 主元行 」為
Column 2 & 4 → [ 2 , 0 , 0 ]T & [ 2 , 4 , 0 ]T
有主元的「 行向量 」被命名為「 主元行 」很好理解,可是為何要將「 不存在主元的行向量 」命名為「 自由 」呢?
因為被稱為「 自由行 」的「 行向量 」在進行回代時,可以自由分配「 行向量 」乘數,也就是未知數「 x2 」和「 x4 」,換句話說,「 自由行 」對應到的「 x2 」和「 x4 」是可以隨意指定的
因此在此範例中,「 自由行 」對應到的變數「 x2 」和「 x4 」,便被稱為「 自由變量 」,而「 主元行 」對應到的變數「 x1 」和「 x3 」,便被稱為「 主軸變量 」
此推演結構是求解的核心內容,若以文字描述而出,則為
通過給定的「 自由變量 」,便能找出對應的「 主軸變量 」,並得出方程組解
特解 ( Special solution )
先回到讓我們將目光回到求解「 A3 x = 0 」上,給定「 x2 = 1 」和「 x4 = 0 」...
等等!不是說「 自由變量 」愛怎選就怎選,為何要取「 1 」和「 0 」呢?
別太緊張,這都是為了分析,目的在於「 孤立變量 」與「 沉默雜音 」
各位讀者可以仔細想想,「 1 」和「 0 」這兩個值在乘法運算上可以說具有獨一無二的不可替代性,「 1 」是乘法單位元素,「 0 」是乘法零元素,用平易近人的比喻來說
- 「 1 」能令數值保有「 原形 」,真真正正的展現本色,不用擔心 P 圖「 照騙 」
- 「 0 」能令「 抹殺 」對應數值的個性,怎麼說都是死板一片,網路交友體驗你懂得
令「 x2 = 1 」與「 x4 = 0 」具有以下三個優點
- 能夠輕鬆找到被「 x2 」直接影響的其他分量
- 確保「 x4 」不會也沒辦法干涉影響其他分量
- 這樣很好算,真的
感覺再說下去讀者要受不了了,所以回歸正題,將「 x2 = 1 」與「 x4 = 0 」回代線性方程組後,可得一組解
[ -2 , 1 , 0 , 0 ]T
並根據「 Null ( A ) 」的建構規則列出
[ -2 , 1 , 0 , 0 ]T × c1 ∈ Null ( A ) , c1 ∈ R
如果不知道為何可以這樣寫的讀者可以回到上一篇看看,這邊就不多贅述了,如此一來便算是將「 x2 」處理完畢,但是「 Null ( A ) 」的結構尚未完善,既然「 自由變量 」有兩個,那麼下一個當然便是以同樣的方式處理「 x4 」
給定「 x2 = 0 」和「 x4 = 1 」並進行回代得出另一組解
[ 2 , 0 , -2 , 1 ]T
同樣根據「 Null ( A ) 」的建構規則列出
[ 2 , 0 , -2 , 1 ]T × c2 ∈ Null ( A ) , c2 ∈ R
還有「 可調整空間 」嗎?
沒了,「 自由變量 」已然消耗完畢,此時便能建構完整的「 Null ( A ) 」,即
Null ( A ) = c1 [ -2 , 1 , 0 , 0 ]T + c2 [ 2 , 0 , -2 , 1 ]T ; c1 , c2 ∈ R
其中建構出「 Null ( A ) 」兩個向量便被稱為「 特解 」,被稱為「 特解 」的原因在於「 將特定值賦予自由變量 」,正如前面所說,「 自由變量 」的自由不假,而在自由上方套入特定值並求出特定解,此解以「 特解 」一詞稱呼再合適不過了對吧
這邊教授也做出了此段內容的總結
The Null space contains exactly all the combinations of the Special solution
即
「 零空間 」是由「 線性方程組 A x = 0 」的特解構成的線性組合
並且
「 自由變量的數量 」=「 線性方程組特解的數量 」=「 零空間的結構維度 」= n - r
進一步簡化?
在高斯消元法的過程中,向下消元的矩陣格式可稱為「 列階梯形矩陣 ( Row Echelon Form ) 」,倘若在「 列階梯形矩陣 」的基礎上,再執行「 主元標準化 」與「 向上消元 」就能得到
「 簡化列階梯形矩陣 ( Reduced Row Echelon Form / Row Canonical Form ) 」
在開始轉換前,先說明如何進行「 主元標準化 」與「 向上消元 」
「 主元標準化 」是通過「 伸縮矩陣 ( Scaling matrix , S ) 」縮放「 主元 」所在的「 列向量 」,進而將「 主元 」轉變為「 1 」
「 向上消元 」也很好理解,通過「 消元矩陣 」將除「 主元 」以外的同行元消為「 0 」
至於「 主元標準化 」與「 向上消元 」哪個動作先執行無所謂,看個人習慣
- 如果「 主元標準化 」的過程中不會讓數字變得太醜,那沒什麼理由不先執行
- 如果「 向上消元 」時,同行元已為「 主元 」主元倍數,同樣沒什麼理由不先執行
說到底就是那句「 愛怎怎地 」
由於過程是由右向左消元,故先執行第三行消元,列「 消元矩陣 」E12

得 A'4 = E12 A3

再引入「 伸縮矩陣 」 S

得 RREF ( A ) = S A'4

費盡心思得到「 RREF ( A ) 」究竟是為了什麼呢?
- 「 RREF ( A ) 」的「 主元行 ( 一三行 ) 」提出後,會對應到「 特解 」的「 指定值 」
- 「 RREF ( A ) 」的「 自由行 ( 二四行 ) 」提出後,會對應到「 特解 」的「 主軸變量 」
- 「 零列向量 ( 第三列 ) 」意味著原列是由其他列構成的線性組合
將「 RREF ( A ) 」的行向量重新排列可得

此時可以將此結構整理為

其中
- 「 單位矩陣 ( I ) 」的大小為「 Rank ( A ) × Rank ( A ) 」
- 「 自由矩陣 ( F ) 」的大小為「 Rank ( A ) × [ n - Rank ( A ) ] 」
利用此 A' 建構「 零空間矩陣 ( Null space matrix ) , N 」,「 零空間矩陣 」需使得
A' × N ( A' ) = 0
成立,因此我們將其定為

是不是覺得有些眼熟,在運算結構不變的前提下,交換「 A' 的二三行向量 」與「 N ( A' ) 的二三列向量 」,就能得到新的方程組
A × N ( A ) = 0
此時的「 N ( A ) 」應為

發現了嗎?「 N ( A ) 」的「 行向量 」會就是線性方程組「 A x = 0 」的「 特解 」,回代在不知不覺中完成了!
當然中間將 A 改寫為 A' 並不一定必要,如果已經知道結構便無需進行行互換生成

只是這樣書寫能夠使得整體的運算邏輯更加清楚罷了,並非必要行動
結構回顧與實際應用
已知對長方陣 A ,都能通過「 消元、轉置、縮放 」轉換為「 RREF ( A ) 」,故對任何
RREF ( A ) × x = 0
都能改以下式格式列出

將其化為方程式,則可表示為
I ( xPivot ) + F ( xFree ) = 0 → I ( xPivot ) = -F ( xFree )
現在我們可以用本次課堂操演的 A 測試看看這樣推論是否有誤
自由變數為「 x2 」和「 x4 」,主軸變數為「 x1 」和「 x3 」,其中「 自由矩陣 」為

將
I ( xPivot ) = -F ( xFree )
以方程組列出則為
- ( 1 ) x1 + ( 0 ) x3 = ( -2 ) x2 + ( 2 ) x4
- ( 0 ) x1 + ( 1 ) x3 = ( 0 ) x2 + ( -2 ) x4
將「 x2 = 1 」和「 x4 = 0 」帶入可得「 x1 = -2 」和「 x3 = 0 」
將「 x2 = 0 」和「 x4 = 1 」帶入可得「 x1 = 2 」和「 x3 = -2 」
故得兩解
[ x1 , x2 , x3 , x4 ]T = [ -2 , 1 , 0 , 0 ]T 與 [ 2 , 0 , -2 , 1 ]T
對應到使用回代解出的「 Null ( A ) 」
Null ( A ) = c1 [ -2 , 1 , 0 , 0 ]T + c2 [ 2 , 0 , -2 , 1 ]T
完美契合 ( 拍手 ),之所以那麼辛苦把 A 寫成「 RREF ( A ) 」,就是為了快速地看出「 Null ( A ) 」,有沒有感受到「 RREF ( A ) 」帶來的便利性呢?
試試看求「 Null ( AT ) 」又會是什麼樣子,列得

經過「 消元、轉置、縮放 」得「 RREF ( AT ) 」

由於「 Column1 + Column2 = Column3 」,是故「 Null ( AT ) 」應可列為
Null ( AT ) = c [ -1 , -1 , 1 , ]T , c∈ R
若以「 區塊矩陣結構 [ I , F ] 」表示,則由主元「 a11 」和「 a22 」可知,自由變數為「 x3 」,主軸變數為「 x1 」和「 x2 」,其中「 自由矩陣 」為

套用
I ( xPivot ) = -F ( xFree )
以方程組列出則為
- ( 1 ) x1 + ( 0 ) x2 = ( -1 ) x3
- ( 0 ) x1 + ( 1 ) x2 = ( -1 ) x3
將「 x3 = 1 」帶入可得「 x1 = x3 = -1 」,由同樣根據「 Null ( A ) 」的建構規則列出
[ -1 , -1 , 1 , ]T × c ∈ Null ( AT ) , c ∈ R
當然最後就是用「 零空間矩陣 」構建

而
C ( N ( AT ) ) = Null ( AT )
綜上所述,求解「 零空間 」的路上,除了「 回代 」還有
「 行向量組合 」、「 公式解 」、「 零空間矩陣建構 」
以上幾種方式在某些意義上都是同根同源,無非就是在「 矩陣形式 」結構上的加工程度上有所不同,至於哪個比較簡單到沒有個定論,畢竟 A 、 AT 都是特別設計過的結構特例,所以比較不出來,但這四種方式確實提拱給了計算者一個不同的思路列出「 零空間 」
至此「 A x = 0 」便已討論完畢,下一個課程會加入「 A x = b 」,並結合「 A x = 0 」統合整個線性方程組的結構,真是精采的一堂課程 ( 筆者是說教授的課,不是在自吹 ),總之辛苦各位讀者看到這邊了,感謝你的閱讀,希望我們下次再見,88














