生成1到3之间的随机整数,不包括变量

时间:2014-03-06 12:46:52

标签: matlab random integer probability rounding

使用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”功能。

4 个答案:

答案 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)/10000C等的值......

现在试试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);