生成具有非均匀分布的随机数

Oph*_*erV 10 javascript random distribution

Javascript Math.random()返回带有"统一"分布的伪随机数.

我需要生成一个偏向任一侧的[0,1]范围内的随机数.(意思是,在0或1旁边获得更多数字的机会更高)

理想情况下,我希望有一个参数来设置此曲线.

我认为我可以做到Math.random^2这样的结果,但是有什么更复杂的方法来实现这一目标?

Nis*_*nth 15

我想你想要beta发行版alpha=beta=0.5

可以使用逆累积分布将均匀随机数变换为β分布.

unif = Math.random()
Run Code Online (Sandbox Code Playgroud)

我不熟悉javascript,但这应该是清楚的:

beta = sin(unif*pi/2)^2
Run Code Online (Sandbox Code Playgroud)

PS:你可以生成很多这样的数字并绘制直方图 在此输入图像描述

编辑:

为了向0倾斜,将beta值转换为 -

beta_left = (beta < 0.5) ? 2*beta : 2*(1-beta);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

为了向1倾斜,转换为 -

beta_right = (beta > 0.5) ? 2*beta-1 : 2*(1-beta)-1;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述