Gauss-Jordan 列主元消去法來實現矩陣的求逆(Python)-非增廣

如上所示,通常情況下的矩陣求逆,採用的是增廣矩陣的方式,然後通過不斷進行行變換來使得前半部分變成單位陣,後半部分將會是矩陣的逆。

爲了降低計算機編程過程中的內存單元的消耗,不必將單位矩陣存放起來,其具體原理可見於:

gauss_jordan法求矩陣的逆 - Orisun - 博客園

其具體流程如下所示:

Step 1: 首先找到當前矩陣的當前列中的絕對值的最大值,然後將其換位到列主元的位置。

藍色線框選的區域是我們對於傳入參數的類型和屬性的限制,要求必須傳入一個方陣。

        同時請注意第14行,我們將我們將傳入的參數包裝成numpy.ndarray,並限制了數據的浮點數類型,如果此處不把數據類型轉爲浮點數的話,如果傳入了數據全部是整形的話,整個二維列表(矩陣)會默認爲numpy.int類型,後面如果出現了浮點數的話,會自動將浮點數取整,會使得最後的誤差變得很大,所以無論傳入的參數是整形矩陣還是浮點數矩陣,龍豬在這裏建議全部轉爲浮點數矩陣。

        後面的紅框框選的內容便是Step1 中的具體內容。該過程有點類似於排序算法中的選擇排序。

        Step 2. 按照gauss_jordan法求矩陣的逆 - Orisun - 博客園 中所敘述的那樣,增廣矩陣左側有x列已化爲單位矩陣時,右側就會有n-x列保持着單位矩陣的樣子,即總能從增廣矩陣中抽出n列組成一個單位陣。所以可以把右側不再是單位矩陣的列存儲到左側已變爲單矩陣的列上,這樣就不再需要額外的內存來存儲整個增廣矩陣了,內存開銷減少了一半。

Step 3. 接下來需要來判斷對應的新生成的mat矩陣,其每一列的排布是否正確有效。這裏我們經過測試發現了一個規律。

當我們在進行列主元的選取和交換行的時候,在整個過程中如果交換了奇數次的行的話,那麼最後我們需要將mat中的列進行倒序;當進行了偶數次的交換行的話,那麼最後便不再需要將mat進行重新排序.

具體代碼見:

Gauss-jordan 列主元消去法來求解矩陣的逆(python)-CSDN下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章