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

Why the number is not randomized using Matlab

我正在尝试编写一个 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

我想你忘了在 for 的末尾将 m 设置回零。如果你想改变 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

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

我也不确定你怎么会认为 diff(i) = 2.5 对所有 i。这种差异是 概率 值。另外,我看不出如何在差异中获得浮点数,因为您正在生成 integers 并为每次试验累积整数。我想你需要检查一下这个值应该是多少。

所以:

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