Re: [請益]選取會增質的變數作成陣列與迴圈問題

作者: sunev (Veritas)   2017-05-23 01:44:40
※ 引述《runkong (米塔克)》之銘言:
: 小弟是matlab新手,
: 這幾天遇到了兩個迴圈和變數的問題實在搜不到類似的討論,
: 因此想請教板上的各位大大。
: 這是一個模擬評選的模型
: 會有3~8個隨機數量的參賽者
: 總評審數量是由2~17位隨機出現,A就是他們的評分模式
: 其中會有總評審人數會有0~總評審人數的特殊評審,B就是他們的評分模式
: 原本的input是如下所示
: B_1(1) = 1 ;
: B_1(2:z_nub(n)) = randsample (ww_x,(z_nub(n)-1)) ;
: B_2(1) = 1 ;
: B_2(2:z_nub(n)) = randsample (ww_x,(z_nub(n)-1)) ;
: B_3(1) = 1 ;
: B_3(2:z_nub(n)) = randsample (ww_x,(z_nub(n)-1)) ;
以上三個B可疊在一起寫成
B=[1 randsample(ww_x,(z_nub(n)-1))
1 randsample(ww_x,(z_nub(n)-1))
1 randsample(ww_x,(z_nub(n)-1))];
可寫成迴圈形式
for i=1:3
B(i,:)=[1 randsample(ww_x,(z_nub(n)-1))];
end
: A_4(1) = 1 ;
: A_4(2:z_nub(n)) = randsample (ww_x,(z_nub(n)-1)) ;
: A4(n)=randsample(first_place,1);
: A_4(1)=A_4(A4(n)); A_4(A4(n)) = 1;
你A4有必要留下來嗎?
如果不用留可以寫成
t=randsample(first_place,1);
A_4([1 t])=A_4([t 1]);
: A_5(1) = 1 ;
: A_5(2:z_nub(n)) = randsample (ww_x,(z_nub(n)-1)) ;
: A5(n)=randsample(first_place,1);
: A_5(1)=A_5(A5(n)); A_5(A5(n)) = 1;
for i=1:2
A(i,:)=[1 randsample(ww_x,(z_nub(n)-1))];
t=randsample(first_place,1);
A(i,[1 t])=A(i,[t 1]);
end
: 第一個問題是每個評審分別都會對不同參賽者排序
: 假設來5位參賽者那就是評審會隨機評1~5名
: 可能會有以下情況
: B_1得到[1,2,5,3,4]
: B_2得到[1,5,4,3,2]
: B_3得到[1,4,5,3,2]
: A_4得到[3,4,5,1,2]
: A_5得到[4,3,2,5,1]
: 我希望他能夠自行將 總評審數量由1跑到17,
: 並搭配特殊評審由0跑到該次的總評審數量做組合搭配
: 當B=3 A=5時,他能跑出上面那5個陣列,
: 想用迴圈但卡住寫不出來,有人推薦我可能可以用二維陣列去寫?
: 不知有沒有什麼語法可以推薦呢?
所以你要的大概是這樣?
for i=1:17
for j=0:i
clear A,B
for k=1:i-j
B(k,:)=[1 randsample(ww_x,(z_nub(n)-1))];
end
for k=1:j
A(k,:)=[1 randsample(ww_x,(z_nub(n)-1))];
t=randsample(first_place,1);
A(i,[1 t])=A(i,[t 1]);
end
%% 做你想做的事
end
end
: 第二個問題是
: 每個評審分別都會對不同參賽者排序
: 假設來5位參賽者那就是評審會評1~5名
: 可能就會有以下情況
: B_1得到[1,2,5,3,4]
: B_2得到[1,5,4,3,2]
: B_3得到[1,4,5,3,2]
: A_4得到[3,4,5,1,2]
: A_5得到[4,3,2,5,1]
: 最後每個人的排序加起來最低的就是勝者
: 會得到C=[1,2,5,3,4
: 1,5,4,3,2
: 1,4,5,3,2
: 3,4,5,1,2
: 4,3,2,5,1]
如果問題一的解法可行
這裡的C就單純是C=[A;B];
: 我會自己另外把他變成
: D=[10,18,21,15,11]
這邊的D可以寫成 D=sum(C,1);
: 第二個問題就在"A和B這兩個不固定數量與長度的陣列疊加成一個矩陣"
: 也就是C這個步驟我辦不到只能土法煉鋼每個狀態去更改,
: 剛剛查到似乎可以使用append去串接,
: 不過因為第一個問題所以沒辦法嘗試
: 且每次名稱都會由A1.A2.A3做變化因此無法使用A=1:17;
: 我有看到可以用eval依照他們增質的數量去定義,
: 不過自己嘗試寫了一下還是跑不出來.
: 目前也算是只用土法煉鋼的方法在更改
: 麻煩各位幫忙了 兩個問題解答一個的750P 以表感謝
希望有解決你的問題
作者: runkong (米塔克)   2017-05-23 16:24:00
感謝解答 不過從早上一直嘗試到現在還是怪怪的目前分別測A和B都是可用的C看起來是可用的 但大迴圈怪怪的目前正在尋找是哪邊有問題

Links booklink

Contact Us: admin [ a t ] ucptt.com