作者runkong (米塔克)
看板MATLAB
标题[请益]选取不特定数量变数作成阵列与回圈问题
时间Sun May 21 22:26:47 2017
小弟是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://webptt.com/cn.aspx?n=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
1F:推 sunev: 程序增质? 05/21 23:53
抱歉 我前面解说的不是很好
举个例子 假设原本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
2F:推 sunev: 我看不出你举例中的A1A2有何差别 05/22 00:52
没有差别 只差在最前面的A1A2
虽然都程式码都一样但因用随机所以取出来的值会不同 最後会需要相加
简单来说我在让他们做评分的动作
评分方式相同 但出来的分数会不一样
※ 编辑: runkong (115.43.76.217), 05/22/2017 01:29:29
3F:推 sunev: 所以你的A是变数不是程序对吧,把数个A叠成矩阵不行吗? 05/22 11:40
A并不是单一个代号,他是刚刚如同A1那整串的程序,
我不知道这样能不能称为是一个变数,不好意思定义不够明确,
数个A叠成矩阵这边我写不出来,
因为A的数量每次都不相同,并且还会被B出现的数量影响,
所以写矩阵时不知道怎麽设定
※ 编辑: runkong (140.124.63.65), 05/22/2017 12:11:11
4F:推 sunev: 程序是丢东西吐东西,变数是存东西,你的A看起来就是变数 05/22 17:59
5F:→ sunev: 这样问好了A=[A1;A2] 成立吗? 05/22 17:59
我发现说错了 抱歉 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
6F:推 sunev: 不太懂,程序不可能在等号左边,因为只有变数才能赋值 05/22 20:04
7F:→ sunev: 我也不太懂你大小写的差异为何 05/22 20:05
下面这两行 全部我称他为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
8F:推 sunev: 阵列也是变数,可用来存东西的东西都叫变数 05/22 22:34
9F:→ sunev: 如果你觉得A2也是阵列,那A2和a2到底有何不同? 05/22 22:35
10F:→ YoursEver: 建议: 重新编辑文章,把你每一步,每一次叠代所需要的 05/22 23:50
11F:→ YoursEver: input和输出的output全部列下来,否则很难看得懂你想说 05/22 23:50
12F:→ YoursEver: 什麽. 05/22 23:50
※ 编辑: runkong (140.124.63.65), 05/23/2017 01:03:44