用基礎的函式寫了乙個matlab指令碼將矩陣變成行最簡式。未參考matlab自帶的rref函式,基本與其無關,如有bug可反饋。
大致思路:把矩陣含有0的行放在最下面,然後下面的行減去上面的行,最後變成行最簡型。
function r =
my_rs
(a)%a表示輸入矩陣
%r表示輸出的行最簡型矩陣
t =1;
%進行行迴圈的元素
t =zeros
(size
(a,1),
size
(a,2))
;%設定乙個t矩陣,用來排序的
i =1;
%進行列迴圈的元素
while i <
size
(a,2
) c =
size
(a,1
); flcg =
0; sf =
0; ***g =0;
%將a進行降序排序,並且把含有0的列放在最後
a =sortrows
(a,'descend');
for j = t:
size
(a,1
) v = j;
op =0;
for k = t:
size
(a,1)if
a(k, i)==0
op = op +1;
endend
ifa(j, i)==0
for l = v + op:
size
(a,1)t
(v,:)=
a(v,:)
;a(v,:)=
a(l,:)
; v = v +1;
endfor w =
size
(a,1
)- op +1:
size
(a,1)a
(w,:)=
t(w,:)
; end
break
endend
%進行行迴圈
for j = t:
size
(a,1)if
a(j, i)==0
c = j -1;
break
endend
%將t行i列下的元素變為0
if c - t >=
1for m = c:-1
:t +
1%判斷兩個值是否近似,以方便進行加減計算
for cc = i:
size
(a,2)if
abs(
a(m, cc)-a
(t, cc)
)<
10e-10
a(m, cc)=a
(t, cc)
; end
enda
(m,:)=
a(m,:)
-(a(m, i)/a
(t, i)).
*a(t,:);
endend
%判斷t行前i列是否都為0
if i >
1for gg = i -1:
-1:1
ifa(t, gg)~=
0 ***g =1;
break
endend
endif ***g ==
0%第乙個元素變為1ifa
(t, i)~=
0a(t,:)=
a(t,:)
/a(t, i)
; end
%將t行i列上的元素變為0
if t >=
2for v =
1:t -
1%判斷是否近似
for dd = i:
size
(a,2)if
abs(
a(v, dd)-a
(t, dd)
)<
10e-10
a(v, dd)=a
(t, dd)
; end
enda
(v,:)=
a(v,:)
-(a(v, i)/a
(t, i)).
*a(t,:);
endend
end%判斷下一列(下幾列)t行下的元素是否全為0
if i <
size
(a,2
)&& t <
size
(a,1
)for f = i +1:
size
(a,2
)for s = t +1:
size
(a,1)if
a(s, f)~=
0 flcg =1;
break
endend
if flcg ==
1break
else
sf = sf +1;
endend
end%跳過下一列(下幾列)
if flcg ==
0 i = i + sf;
endif t <
size
(a,1
) t = t +1;
else
break
endi = i +1;
end%賦值結果
r = a;
end
C 將矩陣轉換為行最簡型矩陣
是否還在困擾,將矩陣化為行最簡型矩陣的時候總是出錯?是否還在生氣,妥善保管的答案不見蹤跡?沒事,這個 將幫你把這些問題一網打盡。通過自己設定矩陣的行數與列數,輸入乙個矩陣,使其輸出行最簡型矩陣,親測無誤奧。話不多說,來看看吧!第一步 輸入矩陣 輸入矩陣首先得確定矩陣的行數與列數,這裡利用兩個巨集定義...
2036 將稀疏矩陣轉化為簡式
time limit 20 second memory limit 20 mb 問題描述 大部分元素為0的矩陣稱為稀疏矩陣,假設有k個非0元素,則可以把稀疏矩陣用k 3的矩陣簡記之,其中第一列是行號,第二列是列號,第三列是該行 該列下的非0元素的值。試編制一程式,讀入一稀疏矩陣,並轉換成簡記形式輸出...
matlab將矩陣寫入檔案
clear all clc file dir c users administrator desktop 2016 11 18 zty44統計模式 qp 24 txt 讀取所有的檔案 copy txt all.txt a load a.txt 檔案a為資料檔案1 b load b.txt 檔案c為資...