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

看板MATLAB作者 (米塔克)時間7年前 (2017/05/21 22:26), 7年前編輯推噓6(606)
留言12則, 2人參與, 最新討論串1/4 (看更多)
小弟是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)) ; 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; 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; 第一個問題是每個評審分別都會對不同參賽者排序 假設來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個陣列, 想用迴圈但卡住寫不出來,有人推薦我可能可以用二維陣列去寫? 不知有沒有什麼語法可以推薦呢? 第二個問題是 每個評審分別都會對不同參賽者排序 假設來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] 我會自己另外把他變成 D=[10,18,21,15,11] 第二個問題就在"A和B這兩個不固定數量與長度的陣列疊加成一個矩陣" 也就是C這個步驟我辦不到只能土法煉鋼每個狀態去更改, 剛剛查到似乎可以使用append去串接, 不過因為第一個問題所以沒辦法嘗試 且每次名稱都會由A1.A2.A3做變化因此無法使用A=1:17; 我有看到可以用eval依照他們增質的數量去定義, 不過自己嘗試寫了一下還是跑不出來. 目前也算是只用土法煉鋼的方法在更改 麻煩各位幫忙了 兩個問題解答一個的750P 以表感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.124.63.65 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1495376809.A.846.html ※ 編輯: runkong (140.124.63.65), 05/21/2017 22:32:46 ※ 編輯: runkong (140.124.63.65), 05/21/2017 22:43:22 ※ 編輯: runkong (140.124.63.65), 05/21/2017 22:45:12

05/21 23:53, , 1F
程序增質?
05/21 23:53, 1F
抱歉 我前面解說的不是很好 舉個例子 假設原本A程序是 A1(1)=1 A1(2;z_nub(n))=randsample(wwa,(z_nub(n)-1)); 那程序遞增後就是 A2(1)=1 A2(2;z_nub(n))=randsample(wwa,(z_nub(n)-1)); 以此類推到A17 期間每個跟B的組合都要分別做計算 ※ 編輯: runkong (115.43.76.217), 05/22/2017 00:39:19 ※ 編輯: runkong (115.43.76.217), 05/22/2017 00:40:04

05/22 00:52, , 2F
我看不出你舉例中的A1A2有何差別
05/22 00:52, 2F
沒有差別 只差在最前面的A1A2 雖然都程式碼都一樣但因用隨機所以取出來的值會不同 最後會需要相加 簡單來說我在讓他們做評分的動作 評分方式相同 但出來的分數會不一樣 ※ 編輯: runkong (115.43.76.217), 05/22/2017 01:29:29

05/22 11:40, , 3F
所以你的A是變數不是程序對吧,把數個A疊成矩陣不行嗎?
05/22 11:40, 3F
A並不是單一個代號,他是剛剛如同A1那整串的程序, 我不知道這樣能不能稱為是一個變數,不好意思定義不夠明確, 數個A疊成矩陣這邊我寫不出來, 因為A的數量每次都不相同,並且還會被B出現的數量影響, 所以寫矩陣時不知道怎麼設定 ※ 編輯: runkong (140.124.63.65), 05/22/2017 12:11:11

05/22 17:59, , 4F
程序是丟東西吐東西,變數是存東西,你的A看起來就是變數
05/22 17:59, 4F

05/22 17:59, , 5F
這樣問好了A=[A1;A2] 成立嗎?
05/22 17:59, 5F
我發現說錯了 抱歉 A和B出來會是陣列 例如 B1=[1,3,2,4] B2=[3,2,1,4] A3=[3,2,4,1] A4=[4,3,2,1] A5=[2,3,1,4] b1=整個B1跑出的陣列,a3=A3程序跑出的陣列 我問題二就是希望能有一個C矩陣=[b1;b2;a3;a4;a5] 但因A和B的數量會變動所以沒辦法如上面那種寫法寫出我要的東西 如果我把 A3(1)=1 A3(2;z_nub(n))=randsample(wwa,(z_nub(n)-1)); 整串放進去 那A=[A3;A4]不會成立 要把A3,A4跑出來的那個陣列放進去才會成立 ※ 編輯: runkong (140.124.63.65), 05/22/2017 19:53:59 ※ 編輯: runkong (140.124.63.65), 05/22/2017 20:00:59

05/22 20:04, , 6F
不太懂,程序不可能在等號左邊,因為只有變數才能賦值
05/22 20:04, 6F

05/22 20:05, , 7F
我也不太懂你大小寫的差異為何
05/22 20:05, 7F
下面這兩行 全部我稱他為A2 A2(1)=1 A2(2;z_nub(n))=randsample(wwa,(z_nub(n)-1)); a2就是A2整個運算後 得到的一個陣列 剛剛想了一下 確實不能稱為程序 但似乎也不是叫變數 因為他並不是單一數? 比較像是長度不固定的陣列 ※ 編輯: runkong (140.124.63.65), 05/22/2017 20:45:46

05/22 22:34, , 8F
陣列也是變數,可用來存東西的東西都叫變數
05/22 22:34, 8F

05/22 22:35, , 9F
如果你覺得A2也是陣列,那A2和a2到底有何不同?
05/22 22:35, 9F

05/22 23:50, , 10F
建議: 重新編輯文章,把你每一步,每一次疊代所需要的
05/22 23:50, 10F

05/22 23:50, , 11F
input和輸出的output全部列下來,否則很難看得懂你想說
05/22 23:50, 11F

05/22 23:50, , 12F
什麼.
05/22 23:50, 12F
※ 編輯: runkong (140.124.63.65), 05/23/2017 01:03:44
文章代碼(AID): #1P8QEfX6 (MATLAB)
文章代碼(AID): #1P8QEfX6 (MATLAB)