生成具有线性分布的随机数

机器算法验证 r 可能性 分布
2022-03-06 07:33:39

如何生成随机浮点数,其概率函数是线性的?假设我可以生成统一的随机数。分布图

图是线性分布的例子。f - 概率密度,x - 随机值。

2个回答

有很多方法。这里有几个。

  • 您可以使用带有统一信封的拒绝(“接受-拒绝”)。

  • 可以对密度使用逆 cdf 方法,通过计算 cdf 并将其反转X=F1(U)

  • 您可以分成均匀的和三角形的部分(即两者的有限混合)。三角形部分可以通过多种方式中的任何一种生成(例如,两个制服的,或使用逆 cdf 方法,...)然后缩放到正确的区间,并且制服是微不足道的(只需向右缩放间隔)。max

  • 如果视为三角形,然后在它低于的情况下使用拒绝。很小(比一半少一点),这将非常有效。x1(0,x2)x1x1/x2

  • 您可以使用ziggurat 方法

还有许多其他方法。它们之间的选择将取决于诸如便利与速度的重要性等考虑因素(如果您只需要几千个值,速度可能并不重要;如果您需要多次使用它并可能长时间运行,那么它可能更重要)。

这让我想起了另一篇关于具有函数形式的线性 pdf 的帖子:

h(x)=1+αx2,x[1,1],α[1,1]


(来源:tri.org.au

我称之为“急性线性”分布,或可爱的线性分布。

如果是独立的,则 。 .. 有一个可爱的线性分布。X1Triangular(1,1,1)X2Uniform(1,1)

XαX1+(1α)X2

伪随机数生成

cdf(在支持域内)是:

H=14(x+1)(α(x1)+2)

逆 cdf 为:

x=H1(u)=α22α+4αu+11α

中的伪随机绘图替换中生成伪随机绘图uUniform(0,1)h(x)

如果你想改变比例,或者改变它,你可以转换你生成的数据 .. 例如 ...它应该能够生成你所生成的任何结构的丰富度欲望(可能需要一点点玩耍,取决于你固定的东西)。XdataY=b+cXdata