0

我有这个(伪代码):

var a = Math.random(); // returns random number from 0 to 1

在此处输入图像描述

我希望有更大的可能性选择较低的数字,就像图片描述的那样。方程(代码)应该如何?

4

2 回答 2

4

这里最简单的是继续进行拒绝采样。

基本上你模拟一个二维变量 (x,y) = (Math.random(), Math.random())。它是正方形 [0,1][0,1] 中的一个点。如果变量 (x,y) 在您绘制的三角形中,则取 x。

x 将具有您正在寻找的分布。

伪代码:

x = Math.random();
y = Math.random();

if x+y < 1:
   return x;

您实际上可以通过仅绘制一个随机变量(通过计算和反转累积分布函数)来摆脱它,但在这种情况下要复杂得多。

于 2012-06-19T22:09:08.117 回答
1

倒置累积分布函数给出

1 - Math.sqrt(1 - Math.random()),

所以

 1 - Math.sqrt(Math.random())

会给你你想要的分布。

请注意,0 处的概率密度必须为 2,因此曲线下的面积给出的总概率为 1。

于 2012-06-20T09:08:44.820 回答