【線性代數】對矩陣做初等變換

矩陣有三種初等(行)變換:

(1) r_i leftrightarrow r_j

(2) k , r_i

(3) r_i + k , r_j

n 階單位矩陣實施一次上述變換得到 3 種初等矩陣: E_n(i,j) , E_nbig(i(k)big) , E_nbig( ij(k) big)

定理. 對矩陣 A_{n times m} 實施一次初等行變換,相當於用相應的 n 階初等矩陣左乘 A .

下面用 Matlab 實現對矩陣做初等(行)變換。

先自編函數生成 3 種初等矩陣:

1. 換行初等矩陣 E_n(i,j)

function E=IJRow(n,i,j)n%生成n階初等矩陣: 交換第i行與第j行nE=eye(n);nE([i,j],:)=E([j,i],:);n

測試:

>> IJRow(4,2,4) %4階初等矩陣:交換第2行與第4行nans =nn 1 0 0 0n 0 0 0 1n 0 0 1 0n 0 1 0 0n

2. 「 k 倍第 i 行」 初等矩陣 E_nbig(i(k)big)

function E=kRow(n,i,k)n%生成n階初等矩陣: 第i行*knE=eye(n);nE(i,:)=k*E(i,:);n

測試:

kRow(4,2,5) %4階初等矩陣: 第2行*5nnans =nn 1 0 0 0n 0 5 0 0n 0 0 1 0n 0 0 0 1n

3. 「第 i+ , k 倍第 j 行」 初等矩陣 E_nbig( ij(k) big)

function E=IkJRow(n,i,j,k)n%生成n階初等矩陣: 第i行+k*第j行nE=eye(n);nE(i,:)=E(i,:)+k*E(j,:);n

測試:

>> IkJRow(4,2,4,3) %4階初等矩陣: 第2行+3倍第4行nnans =nn 1 0 0 0n 0 1 0 3n 0 0 1 0n 0 0 0 1n

例. (對矩陣做初等變換)以教材P58-59例題為例。

Matlab代碼實現:

>> B=[2 -3 1 -5; 1 -2 -1 -2; 2 -2 4 -6; 4 -2 7 -7]nB =nn 2 -3 1 -5n 1 -2 -1 -2n 2 -2 4 -6n 4 -2 7 -7nn>> B1=kRow(4,3,1/2)*IJRow(4,1,2)*BnnB1 =nn 1 -2 -1 -2n 2 -3 1 -5n 1 -1 2 -3n 4 -2 7 -7nn>> B2=IkJRow(4,4,1,-4)*IkJRow(4,3,1,-1)*IkJRow(4,2,1,-2)*B1nnB2 =nn 1 -2 -1 -2n 0 1 3 -1n 0 1 3 -1n 0 6 11 1nn>> B3=IkJRow(4,4,2,-6)*IkJRow(4,3,2,-1)*B2nnB3 =nn 1 -2 -1 -2n 0 1 3 -1n 0 0 0 0n 0 0 -7 7nn>> B4=IJRow(4,3,4)*B3nnB4 =nn 1 -2 -1 -2n 0 1 3 -1n 0 0 -7 7n 0 0 0 0nn>> B5=kRow(4,3,-1/7)*B4nnB5 =nn 1 -2 -1 -2n 0 1 3 -1n 0 0 1 -1n 0 0 0 0nn>> B6=IkJRow(4,2,3,-3)*IkJRow(4,1,3,1)*B5nnB6 =nn 1 -2 0 -3n 0 1 0 2n 0 0 1 -1n 0 0 0 0nn>> B7=IkJRow(4,1,2,2)*B6nnB7 =nn 1 0 0 1n 0 1 0 2n 0 0 1 -1n 0 0 0 0n

注1:書中矩陣 B1 到 B2 的第2個行變換有個小錯誤, r_2 - r_1 應為 r_3 - r_1

注2:注意代碼實現初等變換時矩陣乘法的先後順序,先做的行變換要先左乘原矩陣

注3:矩陣 B4 已為行階梯形,最終矩陣 B7 為行最簡形。

以上是實現每一步的初等變換過程,若直接到最終結果,Matlab自帶函數 rref() 可一步到位實現矩陣化行最簡形:

>> rref(B) %矩陣化行最簡形nnans =nn 1 0 0 1n 0 1 0 2n 0 0 1 -1n 0 0 0 0n

最後注:以上是矩陣行初等變換的 Matlab 代碼實現,若要實現矩陣的列初等變換:

(1) c_i leftrightarrow c_j , 只需右乘初等矩陣 E_n(i,j) , 對應函數 IJRow(n,i,j)

(2) k , c_i , 只需右乘初等矩陣 E_nbig(i(k)big) ,對應函數 kRow(n,i,k)

但是注意第3種,

(3) 右乘初等矩陣 E_nbig( ij(k) big) , 實現的是 c_j + k , c_i , 對應函數 IkJRow(n,i,j,k)

調用代碼時,選擇對應的函數即可。

參考文獻:

  1. 叢國華,肖程河,范洪霞. 線性代數,中國商業出版社, 2017.

————————————————————————————————

版權所有,轉載請註明。


推薦閱讀:

2017年,你用Matlab寫了多少行代碼
Cleve Moler 的複數步長數值微分方法
MATLAB代碼提速技巧之In-place Optimizations
如何自學Matlab
Matlab如何製作滑鼠精靈

TAG:线性代数 | MATLAB | 矩阵运算 |