0

DicePlotと呼ばれる私の関数は、10個のサイコロを5000回振るのをシミュレートします。この関数では、各ロールの10個のサイコロの値の合計を計算します。これは1×5000のベクトルになり、ヒストグラムの各ビンが表すのと同じ方法でビンのエッジが選択された相対度数ヒストグラムをプロットします。サイコロの合計の可能な値。

ダイス値の1×5000の合計から平均と標準偏差が計算され、相対頻度ヒストグラムの上に正規分布の確率密度関数(計算された平均と標準偏差を使用)がプロットされます。

私はすべてを完了しましたが、確率密度関数をプロットする方法について混乱しています。どんな助けでも大歓迎です。ありがとう!

参考までに、グラフは次のようになります。ここに画像の説明を入力してください

function DicePlot ( throw_num, die_num )

throw_num=5000
die_num= 10

  throws = rand ( throw_num, die_num );

  throws = ceil ( 6 * throws );

  for i = die_num : die_num*6
    j = find ( score == i );
    y(i-die_num+1) = length ( j ) / throw_num;
  end 

  bar ( x, y )

  xlabel ( 'Score' )
  ylabel ( 'Estimated Probability' )


  score_ave = sum ( score(1:throw_num) ) / throw_num;
  score_var = var ( score );



  return
end
4

1 に答える 1

2

ヒストグラムの上にスケーリングされたガウスpdfをプロットするために、前の質問に対する私の回答からコードに追加しました。2つの重要な追加は次のとおりです。1)とを使用hold onhold offてヒストグラムを取得し、同じ図にプロットします。2)の出力をnormpdf適切なサイズにスケーリングして、ヒストグラムと同じスケールになるようにします。

もう1つ、私はあなたが私の前の答えからの提案をあなたの関数にまだ組み込んでいないことに気づかずにはいられません。これには特別な理由がありますか?あなたが過去に持っていた提案をあなたの仕事に取り入れたという証拠を見ることができない限り、私は確かにあなたの質問を+1しません!そして今、あなたは行って、私を私の高校の先生の一人のように聞こえさせました!:-)

%#Define the parameters
NumDice = 2;
NumFace = 6;
NumRoll = 500;

%#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');
hold on

%#Obtain the mean and standard deviation of the data
Mu = mean(SumRoll);
Sigma = sqrt(var(SumRoll));

%#Obtain the Gaussian function using 4 standard deviations on either side of Mu
LB = Mu - 4 * Sigma; UB = Mu + 4 * Sigma;
Partition = (LB:(UB - LB) / 100:UB)';
GaussianData = normpdf(Partition, Mu, Sigma);

%#Scale the Gaussian data so the size matches that of the histogram
GaussianData = NumRoll * GaussianData;

%Plot the Gaussian data
plot(Partition, GaussianData, '-r');
hold off

ps、ヒストグラムがガウス分布である必要があることをアプリオリに知らなかった場合(中心極限定理のため)、ksdensity統計ツールボックスからカーネル関数を使用して経験的密度を取得することもできます。

于 2012-11-21T06:53:30.697 に答える