我是这个论坛的新人。首先,我发现拥有这样一个网站非常有趣,每个人都可以在不同的领域获得帮助。非常感谢你。
所以我有一个问题:我应该解决以下问题:
rand
ntrials
掷骰子。 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))
现在我必须做第二次练习:
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
如果我做得好,你能告诉我吗?
答案 0 :(得分:0)
对于第一部分,我会使用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()究竟是多么随机。
答案 1 :(得分:0)
生成1到6之间的骰子可以通过randi()
完成。
首先,使用randi()
代替floor()
和abs()
:
X = randi(6,1,ntrials)
将为您提供一个长度为ntrials
的数组,其随机整数范围为1到6.(您需要1或者它将返回ntrials大小为ntrial的方阵)。 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中所述)