使用Matlab我必须生成1到3之间的随机整数两次,概率相等。
A=round(((rand(1)*2)+1))
B=round(((rand(1)*2)+1))
然后我必须生成另一个1到3之间的随机整数C,它不能与变量A和B相同。
即。 A = 1,B = 3,C = 2 要么 A = 2,B = 2,C可以等于1或3.
最好使用“if”功能。
答案 0 :(得分:2)
您应该使用RANDI
来制作随机整数。
AB = randi([1, 3], 1, 2); % Generate A and B at the same time
while true
C = randi([1 3]); % Make C
if ~ismember(C, AB) % Is C ok?
break; % Then terminate the loop.
end
end
或者这是没有循环的另一种方法。
AB = randi([1, 3], 1, 2); % Generate A and B at the same time
possibleC = setdiff(AB, 1:3); % All valid values of C
C = possibleC(randi(numel(possibleC))); % pick one at random.
答案 1 :(得分:1)
首先
A=round(((rand(1)*2)+1))
将在25%的时间内选择1
,在{50}的时间选择2
,在3
25%的时间选择A=floor(((rand*3)+1));
。这是 NOT 统一分布。
你真正想要的是
A=round(((rand(10000,1)*2)+1))
要证明这一点,请尝试sum(A==1)/10000
并观察sum(A==2)/10000
,C
等的值......
现在试试S = randperm(3);
C = S(S~=A & S~=B);
C = C(1);
并按照Divakar的建议继续进行。
{{1}}
答案 2 :(得分:0)
试试这个 -
lin_ind = 1:3;
out = lin_ind(lin_ind~=A & lin_ind~=B);
C = out(1)
答案 3 :(得分:0)
A = ceil(3*rand); %// 1,2,3 with equal probability
B = ceil(3*rand); %// 1,2,3 with equal probability, independent from A
notAB = setdiff(1:3,union(A,B)); %// allowed values for C
indC = ceil(rand*numel(notAB)); %// select one of them, with equal probability
C = notAB(indC);
在这种情况下,显式写入所有允许的组合并随机选择其中一个可能更简单:
template = [1 1 2
1 1 3
1 2 3
1 3 2
2 1 3
2 2 1
2 2 3
2 3 1
3 1 2
3 2 1
3 3 1
3 3 2];
ind = ceil(rand*size(template,1));
A = template(ind,1);
B = template(ind,2);
C = template(ind,3);