2016-01-21 68 views
1

我知道许多统一的随机数发生器(RNGs)基于一些算法,物理系统等。最终,所有这些导致均匀分布的随机数。知道是否存在高斯RNG,即该算法或其他什么产生高斯随机数是有趣和重要的。更确切地说,我想说的是,我不想使用Box-Muller或Marsaglia极坐标法等变换来从统一RNG获取高斯。我感兴趣的是,如果有一些论文,算法或甚至想法来创建高斯随机数而不使用任何统一的RNG。这只是说我们假装我们不知道存在统一的随机数发生器。生成没有统一的随机数发生器的高斯随机数

+5

为什么你想要避免统一分配作为你的基础? –

+1

只有存在高斯RNG才有意思。然后变换从高斯到统一 – Narek

+0

一个古怪的事实是,由于中心极限定理,有可能通过对从几乎*任意*分布采样的几个(10+)随机变量求和来获得高斯分布的随机变量。所以当然你不需要使用统一分配作为基础。 – kfx

回答

0

正如其他人已经指出,这有点不清楚你的动机是什么,因此我不确定以下是否回答你的问题。

尽管如此,如果没有特定的公式转换您提到的统一RNG,可以生成(近似)。与任何RNG一样,我们必须有一些随机性(或伪随机性)的来源。因此,我假定存在一些无限序列的二进制位,这些二进制位独立同等地可能是0或1(注意,有可能反对这是一个统一的离散二进制RNG,所以我不确定这是否回答你的问题)。

选择一些大的固定n。对于RNG的每次调用,生成Ñ这样的位,总结它们作为X,并返回

(2× - 1)/ √Ñ

通过de Moivre–Laplace theorem这是正常的,平均0和方差1.

+0

谢谢。我已经得到了你的答案。所以现在我们可以用相反的方式使用Box-Muller变换来获得Uniform,对吧? – Narek

+0

@Narek我们已经从统一的0-1范围开始,你忘记了吗?您可以更简单地创建N长均匀范围 - 将每一位用作数字的下一位。所以,随机位会给你2^n-1长的均匀范围。 – Gangnus

+0

@Narek,Gangnus在这里是正确的。 –

1

正如答案/评论中指出的那样,凭借CLT,任何iid随机数的一些总和可以变成一些合理的看起来高斯。如果输入流是统一的,这基本上是Bates distribution。 Ami Tavory的答案几乎相当于使用Bates伪装。你可以看看密切相关的Irwin-Hall distribution,并在n=12或更高,他们看起来很像高斯。

有一种方法在实践中使用并且不依赖于U(0,1) - 华莱士方法的转换(Wallace,CS1996。“Fast Pseudorandom Generators for Normal and Exponential Variates。”ACM Transactions on数学软件。)或高斯池方法。我会建议阅读说明here,看看它是否适合您的目的

+0

在一篇相当近期的论文中(http://arxiv.org/pdf/1004.3114.pdf),RP Brent描述了华莱士PRNG的向量化实现,据称它比基于Box-Muller的高斯PRNG快得多(在特定的矢量处理器上;我怀疑这些性能特征是否适用于高性能处理器)。 – njuffa

+0

@njuffa谢谢,很高兴知道 –

+0

非常感谢你,这对我来说是新的。 – Narek