0

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

计算 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。两个关键添加如下: 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从统计工具箱中使用核函数来获取经验密度。

于 2012-11-21T06:53:30.697 回答