線性代數精華2——逆矩陣的推導過程

點擊上方藍字,和我一起學技術。

上一講當中我們複習了行列式的內容,行列式只是開胃小菜,線性代數的大頭還是矩陣。

矩陣的定義很簡單,就是若干個數按照順序排列在一起的數表。比如m * n個數,排成一個m * n的數表,就稱為一個m * n的矩陣。

矩陣運算的相關性質不多,主要的有這麼幾點:

1. 矩陣的加法有結合律和交換律

2. 矩陣的乘法沒有交換律

3. m*n的矩陣乘上n*k的矩陣的結果是一個m*k的矩陣

很多人會覺得矩陣乘法比較複雜,不僅是計算複雜,而且經常會記不清運算的方法。會覺得複雜,可能只是因為我們將它當做了數學公式來生硬的記憶,而沒有理解其中的原理。

我們不妨假設A和B分別是一個m*n和n*k的矩陣:

那麼,

其中,

Arowi指的是A矩陣中第i行的行向量,同樣Bcolj指的是B矩陣中第j列的列向量。

我們單從公式上來看不太容易理解,但我們可以轉變一下思路。將B不要當做一個完整的矩陣,而當做是k個列向量的集合,代表一種線性變換。將一個n維的向量線性變換到k維空間的變換。

那麼A和B矩陣相乘的結果,其實也就意味著A矩陣當中m個n維向量分別進行線性變換之後組合成的新矩陣。向量的數量沒有變,還是m個,只不過維度從n變成了k,所以最終的結果是一個m*k的矩陣。

這點搞明白了之後,就到了接下來的重頭戲——逆矩陣。

我們先來看一下逆矩陣的定義,假設A是一個n階的方陣,如果存在一個矩陣B,使得A⋅B的結果是單位矩陣I,那麼就稱B是A的逆矩陣。

計算逆矩陣需要用到之前介紹過的代數餘子式,如果不清楚的同學可以回顧一下之前關於行列式的相關內容。

線性代數精華1——從行列式開始

我們列舉出所有的代數餘子式,將這些餘子式組合成一個矩陣,這樣的矩陣稱為伴隨矩陣。定義如下:

通過上面的定義,我們可以看出來,伴隨矩陣也是一個n階的方陣。關於伴隨矩陣,有一個定理:

其中I是n階的單位矩陣,也即是正對角線全為1,其他位置均為0的方陣。

我們來試著證明一下這個定理:

顯然

也是一個n階的矩陣,令結果為B。我們寫出B矩陣當中的每一項Bij

當i=j時,

在上一篇文章當中,我們介紹過,矩陣中的某一行與它對應的代數餘子式的乘積為行列式的值:

這點其實沒什麼需要證明的,我們把式子展開就可以得到了。為了方便觀察,我們用三階行列式舉例。

我們令

我們以

為例:

接著,我們把代數餘子式展開:

根據我們之前關於代數餘子式的定義,這個式子其實是以下這個矩陣行列式根據第一行展開的結果:

再根據行列式的性質,如果一個n階的行列式當中存在某兩行或者某兩列相同,那麼行列式的值等於0。

同樣展開其他的Bij,我們可以證明:

所以B=|A|I,使用同樣的方法,也可以證明A∗A=|A|I

我們費這麼大力氣證明伴隨矩陣有什麼用呢?其實是為了求逆矩陣做準備。有了伴隨矩陣的這個性質,我們求逆矩陣就方便了。

在求解之前,我們先來看一下逆矩陣的定義。

假設存在方陣B,使得AB=BA=I,那麼就稱作B是A的逆矩陣。

在我們介紹逆矩陣的計算方法之前,需要先明確,逆矩陣不等於矩陣轉置。矩陣轉置的操作是將一個矩陣行和列互換,在線性代數當中,矩陣A的轉置記作AT,而A的逆矩陣記作A−1,看起來比較相似,很容易搞混。

我們之前證明了AA∗=|A|I,當矩陣A的行列式|A|不等於0時,那麼顯然有:

根據我們之前逆矩陣的定義:

如果|A|=0怎麼辦?

行列式等於0的矩陣稱為奇異矩陣,奇異矩陣沒有逆矩陣。所以一個矩陣有逆矩陣的前提就是非奇異矩陣。

以上就是逆矩陣的推導過程和計算方法,當然在實際的應用當中,我們並不需要如此麻煩。因為Python的numpy庫當中已經為我們封裝好了現成的計算工具,我們只需要直接調用即可,使用方法和之前的計算行列式基本一樣:

import numpy as np    # 定義矩陣  a = np.mat(((3, 4), (2, 1)))

通過調用np.linalg.inv方法來得到逆矩陣:

需要注意的是,如果a是一個奇異矩陣,那麼計算逆矩陣時會報錯。所以我們在此之前,需要先計算矩陣的行列式,判斷是否是奇異矩陣。不清楚行列式計算方法的同學,可以回顧一下上一篇文章。

如果覺得文章有所幫助,請轉發或者點擊下方的「在看」,你們的支援是我最好的回報。

參考資料 線性代數第五版(上海交大出版社)