Box-Muller Algorithm

以前想过的一个很有意思的问题,如何从均匀分布生成正态分布.

Description

$x_1$ and $x_2$ are two independent $uniform(0,1)$ random variables, and let

\[r = \sqrt{-2 \log{x_1}}, \quad \theta = 2 \pi x_2\]

Then

\[z_1 = r \cos{\theta}, \quad z_2 = r \sin{\theta}\]

are independent $normal(0,1)$ random variabls.

Proof

首先,

\[p(z_1,z_2) = \frac{1}{2\pi} e^{\frac{-(z_1^2 + z_2^2)}{2}}\]

代入$r,\theta$得到

\[f(r,\theta) = \frac{1}{2\pi} e^{\frac{-r^2}{2}}\]

这里可以看到$f(r,\theta)$的取值只和$r$有关,所以对于相同的$r=R$,$\theta$的取值的概率相同,所以可知

\[\theta = 2 \pi x_2.\]

接下来我们求出$r$的pdf和cdf,即$p(r)$和$F(r)$,然后用$F^{-1}(1-x_1)$来得到$r$.

对$\theta$求积分

\[\int \int p(z_1,z_2) dz_1 dz_2 = \int \int rf(r,\theta) dr d\theta\]

得到$r$的概率密度函数

\[p(r) = r e^{\frac{-r^2}{2}}\]

然后可知$r$的累积分布函数

\[F(r) = 1 - e^{\frac{-r^2}{2}}\]

同时

\[F^{-1}(y) = \sqrt{-2\log(1-y)}\]

因为$F^{-1}(1-U)$就可以把均匀分布变量转化为目标分布,得到

\[r = \sqrt{-2\log(x_1)}\]

Polar form

原始的方法需要计算$sin(\theta)$和$cos(\theta)$, Polar form的改进可以直接取样出$sin(\theta)$和$cos(\theta)$.

方法: 在单位圆里均匀取样一个点$(x,y)$, 可得

\[s = x^2 + y^2, sin(\theta) = y/\sqrt{s}, cos(\theta) = x/\sqrt{s}\]

很容易验证,$s$符合均匀分布,最终我们得到

\[r = \sqrt{-2 \log{s}} \\ z_1 = r y/\sqrt{s} \\ \quad z_2 = r x/\sqrt{s}\]

如何在单位圆内均匀取样? Rejection sampling

do
  $x,y \sim U(0,1)$
while $x^2 + y^2 > 1$