1

我将如何在 MATLAB 中模拟概率密度函数,使得

fx(x)={ x/8    0<=x<=4
      {   0     Other
4

1 回答 1

7

任意概率密度函数的模拟如下进行:

1) 导出逆累积分布。

2) 从均匀的 [0, 1] 分布模拟。

3) 将均匀的 [0, 1] 数代入逆累积分布。

在你的情况下,你有一个很好的简单概率密度可以使用,这让我怀疑这是一个家庭作业问题。鉴于您尚未发布任何代码表明您已尝试自己解决它,因此我不会只为您写出答案。

相反,您为什么不自己推导逆累积分布呢?首先,您需要获得累积分布。这可以通过找到从负无穷到 x 的概率密度的积分来完成,在您的情况下,这相当于从 0 到 x 的积分。完成此操作后,您需要找到它的倒数。这里的示例应该足以向您展示如何为您的简单案例执行此操作。如果你走得那么远,那么使用rand(100, 1)从均匀的 [0, 1] 密度模拟 100 次抽签,然后将这些数字代入逆累积分布。

如果您遇到任何问题,请随时编辑您的问题以添加它们,并对此答案发表评论,我会帮助您。我在接下来的一个小时左右。

干杯。

更新:我认为 OP 的作业现在可能已经到期了,所以为了完整性:概率密度的积分,即累积分布,是 f(x) = (1/16) x^2。请注意,当 x = 0 时,f(x) = 0,当 x = 4 时,f(x) = 1。这表明该问题正确地说明了概率密度的域。接下来,f(x) 意味着 g(x) = 4 * x^(1/2) 的逆 CDF。因此:

MyInverseCDF = @(x) (4 * sqrt(x));
MySimulatedDraw = MyInverseCDF(rand(100, 1));

我们可以使用以下方法直观地验证一切是否正常:

hist(MySimulatedDraw);

另一件事,这里是另一个相关 SO 问题的链接:defining-your-own-probability-distribution-function-in-matlab

于 2012-12-04T04:00:09.470 回答