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

看板MATLAB作者 (做人別太跩)時間15年前 (2010/06/18 16:40), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/8 (看更多)
※ 引述《sylvy (好睏,好想睡......)》之銘言: : ※ 引述《liu23829 (做人別太跩)》之銘言: : : 我先舉例說明移動的方式,我不懂程式,因為論文需要,想請高手幫個忙 : : 基本上我想要的是不限size的矩陣 : : 例子如下:給一個5x6的矩陣 : : 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;1,0,0,2,0,0] : : 定義J=1,鎖定該矩陣的第一行,做“兩列”的互換,使非0元素能移到0元素的上面 : [b,ix]=sort(A(J,:),'descend'); : xi為為A的第J列由大到小排列 : : 定義Ib1=k(第一行裡非0元素個數),上述例子移動後(R2→R5),k=2,若k=5則停止 : : 鎖定Ib1=2(非0元素所在的列,亦即1、2列),做“兩行”的互換 : 這兩行不是很懂意思,如果只是純選擇列數作排序的話使用for是否可以? : for i = 2:5 : [b(i,:),A(i,:)]=sort(A(i,:),'descend') : end : 尋找非零值可使用 A(i,:)~=0 : 我想你可以把你一開始A的陣列逐步說明你要怎麼變動,這樣也許比較好了解 上述A矩陣的第一行為[1/2,0,0,0,1], 鎖定第一行非0元素往上移,要做列的移動, 故移動方式為(R5→R2)第5列與第2列互換,這邊定義Ib1=2 再針對第一行的移動後非0元素[1/2,1]所在的列,做行的移動,使非0元素往左移 0元素往右移,移動前此兩列為[1/2,0,0,0,0,0;1,0,0,2,0,0]移動方式為判別 此兩列中,皆有0元素的行往右移,故應該移動C2→C4 移動後兩列為[1/2,0,0,0,0,0;1,2,0,0,0,0] 再定義移動後,此兩列有一非0元素以上的行有2行(Jb1=2)針對此2行(亦即1、2行) 做列的移動,將非0元素往上移,0元素往下移,發現不用做移動 移動後,此時再定義Ib2=2(此時1、2行裡有一非0元素以上的列還是1、2列) 故得到Ib2=Jb1,皆為2,而形成2x2的區塊,設定T1,整個移動方式其實是 將非0元素往左上方移動,移動的步驟為鎖定行,做列的移動,找到非0元素後 針對非0元素所在的列,再做行的移動,之後再鎖定非0元素所在的行,做列的移動 以此類堆,如果形成某區塊右方和下方皆為0元素即停止,遮閉該區塊所在的行、列 考慮剩下的區塊部分來做移動,當然移動後無法形成某區塊右方和下方 皆為0元素,一樣停止,這是補充說明,有點複雜。 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.240.3.58
文章代碼(AID): #1C6p4OJl (MATLAB)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 3 之 8 篇):
文章代碼(AID): #1C6p4OJl (MATLAB)