如何在直方图上绘制概率密度函数?

时间:2012-11-21 06:11:06

标签: matlab histogram average standard-deviation

我的功能名为DicePlot,模拟滚动10个骰子5000次。在该函数中,它计算每个卷的10个骰子的值的总和,其将是1×5000向量,并且绘制具有边缘的相对频率直方图,以相同的方式选择,其中直方图中的每个仓应该表示骰子总和的可能值。

计算1×5000骰子值之和的平均值和标准偏差,并绘制在相对频率直方图之上的正态分布的概率密度函数(具有计算的平均值和标准偏差)。

我已经完成了所有工作,但我对如何绘制概率密度函数感到困惑。任何帮助表示赞赏。谢谢!

作为参考,该图应该看起来像!enter image description here

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

1 个答案:

答案 0 :(得分:2)

我已经从我对your previous question的回答添加到代码中,在直方图的顶部绘制了缩放的高斯pdf。两个关键的增加如下:1)使用hold onhold off来获得直方图并绘制在同一图上。 2)将normpdf的输出缩放到适当的大小,使其与直方图的比例相同。

另外一件事,我不禁注意到你还没有把我之前回答的建议纳入你的功能。有什么特别的原因吗?我当然不会为你的问题+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来使用核函数得到经验密度。