Re: [問題] 有關矩陣兩列或兩行互換的程式怎麼寫?已回收
% 程式開始
clear;clc;
A=[1/2,0,0,0,0,0;0,2,0,0,3,2;0,0,2,0,1,0;0,1/3,0,0,0,0;0,0,1,2,0,0];
A(A~=0)=[1:sum(A(:)~=0)];
C=A;
for i=1:min(size(A))
indRow=[find(C(:,1));find(~C(:,1))];
C=C(indRow,:);
indCol=[find(C(1,:)),find(~C(1,:))];
C=C(:,indCol);
A(i,i:end)=C(1,:);A(i:end,i)=C(:,1);
C=C(2:end,2:end);
end
% 程式結束
%% Debug
1. 令 A=A', 結果可得
A =
1 0 0 0 0
0 2 7 0 0
0 3 6 0 0
0 4 0 0 0
0 0 5 0 8
0 0 0 0 9
這是因為題目沒有定義 當目標row都為零時,要如何處理行.
解決之道
(A) 懶人法 --- 多疊代個幾次, 解就會收斂了
也就是:
for iter=1:n
C=A;
... (code)
end % end iteration
%% A=A'輸入下面的程式碼會出錯,
原因很簡單, 請原發問者作點功課後教教我們這些鄉民吧!
※ 引述《shane ()》之銘言:
: function A=test(A)
: s=size(A);
: for m=1:min(s)
: B=A(m:end,m:end);
: ind1=find(B(:,1)==0);
: ind2=find(B(:,1)~=0);
: for n=1:length(ind2)
: if ind2(n)>ind1(1)
: tmp=B(ind2(n),:);
: tmp2=ind2(n);
: B(ind2(n),:)=B(ind1(1),:);
: B(ind1(1),:)=tmp;
: ind2(n)=ind1(1);
: ind1(1)=tmp2;
: ind1=sort(ind1);
: end
: end
: ind1=find(B(1,:)==0);
: ind2=find(B(1,:)~=0);
: for n=1:length(ind2)
: if ind2(n)>ind1(1)
: tmp=B(:,ind2(n));
: tmp2=ind2(n);
: B(:,ind2(n))=B(:,ind1(1));
: B(:,ind1(1))=tmp;
: ind2(n)=ind1(1);
: ind1(1)=tmp2;
: ind1=sort(ind1);
: end
: end
: A(m:end,m:end)=B;
: end
: %寫得不好,請指教
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.64.247.77
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 8 之 8 篇):