Re: [問題] 有關矩陣兩列或兩行互換的程式怎麼寫?已回收

看板MATLAB作者 (￾ N￾N )時間15年前 (2010/06/28 19:28), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串8/8 (看更多)
% 程式開始 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
文章代碼(AID): #1CA8TY7J (MATLAB)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 8 之 8 篇):
文章代碼(AID): #1CA8TY7J (MATLAB)