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