为什么数字不是使用Matlab随机化的

时间:2015-04-10 21:22:25

标签: matlab random

我正在尝试编写一个Matlab代码来模拟骰子并计算其均值和标准差。

问题在于,无论我们运行此代码多少次,randi(6)的结果都保持不变。这让我发疯了。

n=20;
m=0;
c=0;

for i=1:10000

    while m<n
    x=randi(6);
    c=c+1;
    m=m+x;
    end

    M(i)=m;
    count(i)=c;
    diff(i)=M(i)-n;
end

2 个答案:

答案 0 :(得分:1)

我想你忘了在for的结尾处将m设置为ZERO。如果你想改变randi序列,你应该看看函数“rng”。

n=20;
m=0;
c=1;

for i=1:100

    while m<n
        x(i, c)=randi(6);
        m=m+x(i,c);
        c=c+1;
    end

    M(i)=m;
    count(i)=c;
    diff(i)=M(i)-n;
    m = 0;
end

答案 1 :(得分:0)

m循环终止后,您忘记重置 cwhile回到0。 m仅在for循环之外设置为0,因此当m最终超过n时,m 永不改变。因此,只需在m = 0循环发生之前在for循环中设置while即可。您还需要将c设置为0,因为您希望每次for循环迭代时计算事件。

我也不确定你如何认为所有diff(i) = 2.5 i。这种差异是概率值。此外,我不知道如何在差异中获得浮点数,因为您正在为每个试验生成整数并累积整数。我认为你需要检查这个值应该是什么。

所以:

n=20;
%//m=0;
%//c=0;

for i=1:10000
    m = 0; %// Change here
    c = 0; %// Change here too
    while m<n
    x=randi(6);
    c=c+1;
    m=m+x;
    end

    M(i)=m;
    count(i)=c;
    diff(i)=M(i)-n;
end