我有这个(伪代码):
var a = Math.random(); // returns random number from 0 to 1
我希望有更大的可能性选择较低的数字,就像图片描述的那样。方程(代码)应该如何?
这里最简单的是继续进行拒绝采样。
基本上你模拟一个二维变量 (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;
您实际上可以通过仅绘制一个随机变量(通过计算和反转累积分布函数)来摆脱它,但在这种情况下要复杂得多。
倒置累积分布函数给出
1 - Math.sqrt(1 - Math.random()),
所以
1 - Math.sqrt(Math.random())
会给你你想要的分布。
请注意,0 处的概率密度必须为 2,因此曲线下的面积给出的总概率为 1。