08模拟
模拟
用实验的方法来确定概率值的方式称之为模拟。
而我们最常见的模拟即用计算机来模拟对应的概率分布,或者一个实验过程等。通常来说计算机都有一内置程序,成为随机数发生器,它产生一个伪随机数序列。就实用目的来说,这个伪随机数序列,与来自$(0,1)$均匀分布的样本没有区别。也就是相当于我们有一个均匀分布的随机变量。这个随机变量我们通常用$U$来表示。
模拟连续型随机变量的一般方法
本节主要介绍两种利用随机数模拟连续型随机变量的一般方法。
逆变换法
定理 1
设$U$为$(0,1)$上均匀随机变量,$F$为任意一个连续分布函数,如果定义随机变量
$$Y=F^{-1}(U)$$则$Y$具有分布函数$F$。
这个定理实际上就对应第5章问题26,29。证明方式一致,从分布函数出发。
$$ F_Y(a)=P\{Y\le a\}=P\{F^{-1}(U)\le a\} $$注意$F$为分布函数一定是单调递增函数,所以逆函数也是单调递增函数。所以$F^{-1}(U)\le a$成立当且仅当$U\le F(a)$。于是上是变成:
$$ F_Y(a)=P\{U\le F(a)\}=F(a) $$所以通常可以令$X=F^{-1}(U)$来模拟具有连续分布函数$F$得随机变量$X$。
舍取法
舍取法,其实类似于重复采样筛选出符合条件的值。这里更数学的表示这种方式的正确性。
假设有一种方式可以模拟密度函数为$g(x)$的随机变量,我们先模拟出一个密度函数为$g$的随机变量$Y$。然后以正比于$f(Y)/g(Y)$的概率采用$Y$的值,这样就能够模拟一个密度为$f(x)$的随机变量。
具体来说,如果存在一个常数$c$有
$$ \frac{f(y)}{g(y)}\le c \quad \text{for all }y $$则可以通过如下方式来模拟具有密度$f$的随机变量
- 模拟具有密度$g$的$Y$,同时产生一随机数$U$。
- 若$U\le f(Y)/[cg(Y)]$,则$X=Y$,否则回到第一步。
证明
设$X$为舍取法模拟的随机变量,其由上述算法经过$N$次循环来模拟。
$$ P\{X\le x\}=P\{Y_N\le x\}=P\{Y\le x|U\le \frac{f(Y)}{cg(Y)}\} $$根据算法步骤,最终$X\lt x$的情况,需在$U\le f(Y)/[cg(Y)]$条件下,使得最后生成的$Y$也小于$x$。即最后一部分条件概率。根据条件概率有:
$$ P\{Y\le x|U\le \frac{f(Y)}{cg(Y)}\}=P\{Y\le x,U\le \frac{f(Y)}{cg(Y)}\}/P\{U\le \frac{f(Y)}{cg(Y)}\} $$现在考虑$Y,U$两个随机变量,其为独立随机变量。$Y$符合概率密度为$g$的分布,$U$为$(0,1)$上的均匀分布。则$Y,U$的联合概率密度为两个分布的乘积,即有:
$$ f(y,u)=g(y)\quad 0\lt u\lt 1 $$令$K=P\{U\le f(Y)/cg(Y)\}$则原概率表达式有
$$ \begin{aligned} \frac{1}{K}P\{Y\le x,U\le \frac{f(Y)}{cg(Y)}\}&=\frac{1}{K}\int_{-\infty}^x\int_0^{f(y)/cg(y)}g(y)dudy\\ &=\frac{1}{cK}\int_{-\infty}^xf(y)dy \end{aligned} $$注意其中$\int_{-\infty}^xf(y)dy$实际上就是$X$的概率分布表达式。现在令$x\to \infty$。可得
$$ 1=\frac{1}{cK}\int_{-\infty}^\infty f(y)dy=\frac{1}{cK} $$这说明$cK$值必然为1。进而说明此时的$X$即具有概率密度为$f$的随机变量。
其实这个算法过程就相当于模拟一个量,随机一个指定位置,然后用$f(Y)/[cg(Y)]$比例来筛选是否合格。合格则接受这个值,否则拒绝。因为存在失败可能性,所以存在多次模拟可能性。
根据算法可见,每次循环独立地接受$Y$的概率为$P\{U\le f(Y)/[cg(Y)]\}=K=1/c$。可知循环次数为以$c$为均值的几何分布。
几个模拟例子
这里需要记录几个常用的模拟方式。
正态分布
在随机变量的联合分布章节中,其实有提过模拟正态分布的方式。若$X,Y$是相互独立的标准正态随机变量,则他们的极坐标$R=\sqrt{X^2+Y^2}$和$\Theta=\arctan(Y/X)$各自独立。$R^2$服从均值为2的指数随机变量。$\Theta$服从$(0,2\pi)$上的均匀分布。
所以设$U_1,U_2$为随机数则
$$ X=R\cos \Theta=(-2\ln U_1)^\frac{1}{2}\cos(2\pi U_2)\\ Y=R\sin \Theta=(-2\ln U_1)^\frac{1}{2}\sin(2\pi U_2)\\ $$为两个独立的标准正态分布。这个方法也成为Box_Muller方法。
由于计算正弦值和余弦值,算法效率会收到影响。有一种方法可以避免潜在的费时的困难。这个方式就是通过舍取法模拟圆内的均匀分布,给出坐标$(V_1,V_2)$。因为是圆内的均匀分布,可以证明,其极坐标表示$\bar{R},\bar{\Theta}$相互独立,$\bar{\Theta}$服从$(0,2\pi)$上的均匀分布,$\bar{R}^2$服从$(0,1)$上的均匀分布。同时有
$$ \sin\Theta=\frac{V_2}{\sqrt{V_1^2+V_2^2}}=\frac{V_2}{\bar{R}} \quad \cos\Theta=\frac{V_1}{\sqrt{V_1^2+V_2^2}}=\frac{V_1}{\bar{R}} $$进而可以化简原来模拟函数中的三角函数计算部分,即有:
$$ X=R\cos \Theta=(-2\ln U_1)^\frac{1}{2}V_2/\bar{R}\\ Y=R\sin \Theta=(-2\ln U_1)^\frac{1}{2}V_1/\bar{R} $$还可以注意到$\bar{R}^2$服从$(0,1)$上的均匀分布这正好是均匀变量$U$的分布所以可以直接用$\bar{R}^2$来替换$U_1$即有:
$$ X=R\cos \Theta=(-2\ln \bar{R}^2)^\frac{1}{2}V_2/\bar{R}\\ Y=R\sin \Theta=(-2\ln \bar{R}^2)^\frac{1}{2}V_1/\bar{R} $$这个方式是避免了三角函数的计算。但是因为舍取法的问题,会有重复计算的问题。
圆内均匀分布
游戏常见随机在圆内生成物体。这要求生成一个坐标$(x,y)$其服从半径为$1$内的均匀分布。简单来说其要生成两个联合随机变量$(X,Y)$满足如下的概率密度函数:
$$ f_{X,Y}(x,y)= \begin{cases} \frac{1}{\pi} \quad &\text{if }x^2+y^2\le 1\\ 0\quad &\text{other} \end{cases} $$模拟圆分布的一个问题是,模拟的随机变量要限制在圆内,满足圆约束。或者说$X,Y$不是相互独立的。
一种方式也是通过舍取法来获得。即生成两个$(-1,1)$上的均匀随机变量$U_1,U_2$。其相当于在$(-1,1)$的正方形内均匀分布。如果$(x,y)$满足在圆内,则使用。否则舍弃。 这个方式是可以生成圆内均匀分布的随机变量。也是前面正态分布中用来优化三角函数选取的方式。可以知道其存在循环求取过程,循环次数等于$4/\pi$。
还有一种方式是尝试通过联合分布函数将$X,Y$拆解成两个可以独立的随机变量。再各自模拟对应的随机变量来求取。最直接的就是极坐标表示。
令$R=(X^2+Y^2)^{1/2}$和$\Theta=\arctan(Y/X)$。我们现在来看$R,\Theta$的分布。
根据随机变量函数的联合分布有
$$ f_{R,\Theta}(r,\theta)=f_{X,Y}(x,y)\left|J(x,y)\right|^{-1} $$其中
$$ \left|J(x,y)\right|^{-1}=\begin{vmatrix} \frac{x}{\sqrt{x^2+y^2}}&\frac{y}{\sqrt{x^2+y^2}}\\ -\frac{y}{x^2+y^2}&\frac{x}{x^2+y^2}\\ \end{vmatrix}^{-1}=\sqrt{x^2+y^2} $$可得
$$ f_{R,\Theta}(r,\theta)= \begin{cases} \frac{1}{2\pi}2r\quad &\text{if }0\le r\le 1\space 0\le\theta\le 2\pi\\ 0\quad &\text{other} \end{cases} $$所以可以看到$R,\Theta$独立,$R$服从密度函数为$r/2$的分布函数。而$\Theta$为$(0,2\pi)$上的均匀分布。所以现在通过逆变法用随机数模拟$R,\Theta$再转换成$X,Y$即可。
由$f_R(r)=2r$可得$F_R(a)=a^2$其中$0\le a \le 1$。所以要用$U_1,U_2$模拟$R,\Theta$得分布可令
$$ R=F^{-1}(U_1)=\sqrt{U_1} \\ \Theta=2\pi U_2 $$最后转化成$X,Y$即可:
$$ X=R\cos\Theta=\sqrt{U_1}\cos2\pi U_2\\ y=R\sin\Theta=\sqrt{U_1}\sin2\pi U_2\\ $$