2 つのサイコロを振って、合計が 7 になる前に、ロール回数の確率ヒストグラムを生成する必要があります。実験は適切に機能し、10,000 回の反復で期待どおりのデータが得られました。ただし、このデータをヒストグラムに表示するのに多くの問題があります。問題は、ヒストグラムに出力されたように見える大量の余分なデータがあり、渡したベクトルには存在しないことhist()
です。これは、x 軸の大きな値で大量の無限に大きなビンとして表示されます。
合計が 7 になる確率は 6/36 = 1/6 であるため、これは最初の数回のロールの 1 つで発生するのが一般的です。ここに行ベクトル「rollbins」があり、i 番目のエントリは「i」回のロールを必要とする実験の頻度を保持します。実験を何度も繰り返した後、rollbins の最初のいくつかの要素は大きくなり、その後の各エントリは小さくなり、45 番目の要素は通常ゼロになります。
hist()
bins ベクトル引数を指定して関数を使用しました。この質問に従って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])
しかし、バーがまだ短すぎて、ビンが予想どおり 1 ではなく .1 の間隔で表示されることに気付きました。