Re: [問題] 有關矩陣兩列或兩行互換的程式怎麼寫?已回收
※ 引述《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
討論串 (同標題文章)