为什么不使用 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
循环终止后 重置 m
和 c
回到 0。 m
在 for
循环之外仅设置为 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
我正在尝试编写一个 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
循环终止后 重置 m
和 c
回到 0。 m
在 for
循环之外仅设置为 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