【问题标题】:Dice simulation with matlab用matlab模拟骰子
【发布时间】:2016-02-11 01:18:38
【问题描述】:

我是这个论坛的新手。首先,我觉得拥有这样一个网站非常有趣,因为每个人都可以在不同的领域获得帮助。非常感谢。

所以我有一个问题:我应该解决以下问题:

  • randntrials模拟掷骰子。
  • 如果rand()[0, 1/6] 中则抛出1;
  • 如果 rand()(1/6, 2/6] 中,则抛出 2
  • ...
  • 如果 rand()(5/6, 1] 中,则抛出 6。
  • 使用直方图生成试验结果的直方图。

这就是我所做的:

ntrials = 100;
X = abs(rand(1,ntrials)*6) + 1;
hist(floo(X))

现在我必须做第二个练习:

  • 掷出两个骰子,S 是两个骰子的总和
  • 计算 S 分别接受值 2、3、4、5.....12 之一的概率。
  • 编写一个 Matlab 函数twoTimesDice,通过模拟第一个练习中掷出 2 个骰子的理论结果。

这就是我尝试过的:

function twoTimesDice
  x1 = abs(rand(1,11))*6 + 1;
  s1 = floor(x1);      % probably result of the first dice
  x2 = abs(rand(1,11))*6 +1;
  s2 = floor(x2)       % probably result of de second dice
  S = s1 +s2;
  hist(S);
end

如果我做得好,你能告诉我吗?

【问题讨论】:

  • 在第一个函数中你可以删除abs。此外,使用hist(floor(X),1:6) 仅绘制这些值的直方图。您也可以使用X = randi(6, ntrials); hist(X, 1:6)。类似的 cmets 适用于第二个函数
  • 作为一个提示:你也可以使用randi(6,n)。你的构造对我来说并不直观。

标签: matlab


【解决方案1】:

randi() 可以在 1 和 6 之间生成骰子。

首先,使用randi() 代替floor()abs()

X = randi(6,1,ntrials)

这将为您提供一个长度为ntrials 的数组,其中随机整数范围为 1 到 6。(您需要 1 否则它将返回一个大小为 ntrials 的方阵)。 randi documentation

在函数中,我个人的偏好是请求试验次数作为输入。

然后你的函数变成:

function twoTimesDice(ntrials)
  s1 = randi(6,1,ntrials);      % result of the first dice
  s2 = randi(6,1,ntrials);      % result of the second dice
  S = s1 +s2;
  hist(S);
end

对于标准化直方图,您可以将hist(S) 替换为:

numOfBins = 11;
[histFreq, histXout] = hist(S, numOfBins);
figure;
bar(histXout, histFreq/sum(histFreq)*100);
xlabel('Value');ylabel('Percentage');

(如this question中所述)

【讨论】:

  • 天哪!你在这个论坛上真是太棒了:) 20 年前,如此迅速地找到帮助是不可想象的。你的贡献太有用了。非常感谢!!!最良好的祝愿 Y. Patrick
【解决方案2】:

对于第一部分,我会使用 floor 而不是 abs,

X = floor(rand(1, ntrials)*6) + 1;

因为它返回您正在寻找的值,或者正如Daniel 评论的那样,使用

randi(6)

返回一个整数。

然后你就可以运行了

hist(X,6)

对于第二部分,我相信他们要求掷两次骰子,每一次是 1-6,而不是一次 2-12。

x = floor(rand(1)*6) + 1;

分布看起来会有所不同。滚动两次,添加结果,这就是你的 twoTimesDice 函数。 滚动该 ntrials 次,然后对其进行直方图(就像您已经做的那样)。

我不确定 rand() 到底有多随机。

【讨论】:

  • 而不是rand / floor 我推荐randi
  • 对,那是随机整数,对吧?让我补充一下。
  • 内联代码请缩进代码行或使用标签``,而不是引用块。
猜你喜欢
  • 2015-09-27
  • 1970-01-01
  • 2012-09-28
  • 2011-07-12
  • 1970-01-01
  • 2011-01-19
  • 2019-05-09
  • 2018-01-03
相关资源
最近更新 更多