【问题标题】:Why the number is not randomized using Matlab为什么数字不是使用 Matlab 随机化的
【发布时间】:2015-04-10 21:22:24
【问题描述】:

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

【问题讨论】:

  • 您期望的输出是什么?
  • 我希望 diff(i) 为 2.5。
  • 好的,非常感谢,

标签: matlab random


【解决方案1】:

我想你忘了在 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

【讨论】:

  • 是的,但是在我更改之后,我仍然得到了相同的结果。
  • 我添加了代码,矩阵 M 包含您的值。但我不确定你的语句 count(i) = c 和 diff(i)=M(i)-n 是否真的在做你期望他们做的事情......
【解决方案2】:

一旦while 循环终止,您忘记重置 mc 回到 0。 mfor 循环之外仅设置为 0 一次,因此当 m 最终超过 n 时,m 永不改变。因此,只需在 while 循环发生之前在 for 循环中设置 m = 0。您还需要将 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    相关资源
    最近更新 更多