我叫RollDice功能模拟的六个骰子给定数量的给定次数的滚动。 该函数有两个输入参数,这将在每个实验中且使骰子将被轧制的总次数(NumRolls)被卷起骰子(NumDice)的数量。 该函数的输出将是包含在每个实验中骰子值的总和长度NumRolls的向量SumDice。
这是我的代码现在:我怎么解释骰子的总和? 谢谢!
function SumDice= RollDice(NumDice,NumRolls)
FACES= 6;
maxOut= FACES*NumDice;
count= zeros(1,maxOut);
for i = 1:NumRolls
outcome= 0;
for k= 1:NumDice
outcome= outcome + ceil(ranNumDice(1)*FACES);
end
count(outcome)= count(outcome) + 1;
end
bar(NumDice:maxOut, count(NumDice:length(count)));
message= sprintf('% NumDice rolls of % NumDice fair dice', NumRolls, NumDice);
title(message);
xlabel('sum of dice values'); ylabel('Count');
这是一个简单而整洁的小问题(+1),我很喜欢看进去:-)
有相当在那里我觉得我可以改善你的函数的几个领域。 而不是通过他们去一个一个,我想我只是重新写我怎么会做它的功能,我们可以从那里。 我写它作为一个剧本,但它可以变成很轻松地功能。 最后,我还通过允许骰子具有任何数目的面(6或其他)的广义它一下。 所以,在这里,它是:
%#Define the parameters
NumDice = 2;
NumFace = 6;
NumRoll = 50;
%#Generate the rolls and obtain the sum of the rolls
AllRoll = randi(NumFace, NumRoll, NumDice);
SumRoll = sum(AllRoll, 2);
%#Determine the bins for the histogram
Bins = (NumDice:NumFace * NumDice)';
%#Build the histogram
hist(SumRoll, Bins);
title(sprintf('Histogram generated from %d rolls of %d %d-sided dice', NumRoll, NumDice, NumFace));
xlabel(sprintf('Sum of %d dice', NumDice));
ylabel('Count');
我建议你在我的代码仔细看和我使用的每个函数的文档。 在未来解决在Matlab其他问题时,运动可能证明对您有用。 一旦你这样做了,如果有什么你不明白,那么请让我知道在评论,我会尽力帮助。 干杯!
ps的,如果你不以往任何时候都需要再次提及的各个轧辊,当然你也可以转换AllRoll
和SumRoll
行成一个班轮,即: SumRoll = sum(randi(NumFace, NumRoll, NumDice), 2);
。 我觉得两个内胆是更具可读性个人而言,我怀疑这会带来多大的改变,以代码的效率。