我正在尝试编写一个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
答案 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
循环终止后,您忘记重置 c
和while
回到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