【发布时间】:2012-06-08 04:29:09
【问题描述】:
我需要在掷两个骰子时产生 7 的总和之前生成掷骰数的概率直方图。实验正常运行,通过 10,000 次迭代,我得到的数据看起来与您预期的一样。然而,我在直方图中显示这些数据时遇到了很多麻烦。问题是有大量额外数据似乎打印到直方图上,而这些数据在我传递给hist() 的向量中不存在。这在 x 轴上显示为大量无限大的 bin。
由于掷出 7 的总和的概率是 6/36 = 1/6,因此这通常发生在前几次掷出的其中之一上。这里我有一个行向量“rollbins”,其中第 i 个条目保存需要“i”个滚动的实验的频率。经过多次实验迭代后,rollbins 的前几个元素较大,随后的每个元素都较小,直到第 45 个元素通常为零。
我使用了带有 bins 向量参数的 hist() 函数,并且根据 this 问题,我使用了 xlim() 将 x 轴上的显示限制为仅 0-45。但是输出不受xlim()的限制。
非常感谢任何帮助:)
iters = 1000;
% do not consider extreme results
maxrolls = 45;
% rollbins(i) is how many experiments occured with i rolls
rollbins = zeros(1, maxrolls);
for r=1 : 1 : iters
% roll die until get sum of 7, note times taken
sum = 0;
% the amount of rolls the experiment takes
rolls = 0;
while sum ~= 7
rolls = rolls + 1;
% sum two rolls of a die (same as one roll two dies)
sum = floor( 6*rand(1) + 1 ) + floor( 6*rand(1) + 1 );
end
% assign if within the vector's limits; discards outliers
if rolls < maxrolls
rollbins(rolls) = rollbins(rolls) + 1;
end
end
% 1,2,3...45
range = 1:1:maxrolls;
% limit the values on x-axis to 0-45
xlim([0 maxrolls]);
% the histogram shows more than 45 vertical bars
hist(rollbins, range)
编辑:xlim() 调用应该在 hist() 函数之后。去掉最后一个图形函数的分号 (ylim) 可以实现这些效果。
hist(rollbins, range);
xlim([0 maxrolls-1]);
ylim([0 iters / 5])
但是我现在意识到,条形仍然太短,并且 bin 以 0.1 的间隔出现,而不是我预期的 1。
【问题讨论】:
-
顺便说一句,你不应该使用
sum和range作为变量名,它只会在未来引起头痛......
标签: matlab probability histogram