【線性代數】對矩陣做初等變換
矩陣有三種初等(行)變換:
(1)
(2)
(3)
對 階單位矩陣實施一次上述變換得到 種初等矩陣: , ,
定理. 對矩陣 實施一次初等行變換,相當於用相應的 階初等矩陣左乘 .
下面用 Matlab 實現對矩陣做初等(行)變換。
先自編函數生成 3 種初等矩陣:
1. 換行初等矩陣
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. 「 倍第 行」 初等矩陣
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. 「第 行 倍第 行」 初等矩陣
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個行變換有個小錯誤, 應為
注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) , 只需右乘初等矩陣 , 對應函數 IJRow(n,i,j)
(2) , 只需右乘初等矩陣 ,對應函數 kRow(n,i,k)
但是注意第3種,
(3) 右乘初等矩陣 , 實現的是 , 對應函數 IkJRow(n,i,j,k)
調用代碼時,選擇對應的函數即可。
參考文獻:
- 叢國華,肖程河,范洪霞. 線性代數,中國商業出版社, 2017.
————————————————————————————————
版權所有,轉載請註明。
推薦閱讀:
※2017年,你用Matlab寫了多少行代碼
※Cleve Moler 的複數步長數值微分方法
※MATLAB代碼提速技巧之In-place Optimizations
※如何自學Matlab
※Matlab如何製作滑鼠精靈