基于Box–Muller变换的正态随机数生成方法
来源:互联网 发布:艾奇软件注册码 编辑:程序博客网 时间:2024/06/05 06:09
Box–Muller变换最初由 George E. P. Box 与 Mervin E. Muller 在1958年提出。George E. P. Box 是统计学的一代大师,统计学中的很多名词术语都以他的名字命名。Box 之于统计学的家学渊源相当深厚,他的导师是 统计学开山鼻祖 皮尔逊的儿子,英国统计学家Egon Pearson,同时Box还是统计学的另外一位巨擘级奠基人 费希尔 的女婿。统计学中的名言“all models are wrong, but some are useful”(所有模型都是错的,但其中一些是有用的)也出自Box之口。
我们在之前的文章(http://blog.csdn.net/baimafujinji/article/details/51407703)中曾经谈过,本质上来说,计算机只能生产符合均匀分布的采样。如果要生成其他分布的采样,就需要借助一些技巧性的方法,例如我们在前面的文章提到过的逆变换采样、拒绝采样以及自适应的拒绝采样等等。而在众多的“其他分布”中,正态分布无疑占据着相当重要的地位。下面这个定理,就为我们生成符合正态分布的采样(随机数)提供了一种方法,而且这也是很多软件或者编程语言的库函数中生成正态分布随机数时所采样的方法。
定理(Box-Muller变换):如果随机变量U1和U2是IID的,且U1,U2 ~Uniform[0, 1],则
Z0和Z1独立且服从标准正态分布。
如何来证明这个定理呢?这需要用到一些微积分中的知识,首先回忆一下二重积分化为极坐标下累次积分的方法:
假设现在有两个独立的标准正态分布 X~N(0,1) 和 Y~N(0,1),由于二者相互独立,则联合概率密度函数为
做极坐标变换,则x=Rcosθ,y=Rsinθ,则有
你可以看到这个结果可以看成是两个概率分布的密度函数的乘积,其中一个可以看成是[0, 2π]上均匀分布,将其转换为标准均匀分布则有θ ~Unif (0, 2π)=2π U2。
另外一个的密度函数为
则其累计分布函数CDF为
这个CDF函数的反函数可以写成
根据逆变换采样的原理,如果我们有个PDF为P(R)的分布,那么对齐CDF的反函数进行均匀采样所得的样本分布将符合P(R)的分布,而如果 u 是均匀分布的,那么 U1 = 1-u 也将是均匀分布的,于是用 U1 替换1-u,最后可得
结论得证。最后我们来总结一下利用Box-Muller变换生成符合高斯分布的随机数的方法:
(本文完)
- 基于Box–Muller变换的正态随机数生成方法
- 随机采样系列3:Box-Muller方法产生正太分布
- C语言实现高斯分布的原理——Box-Muller 方法
- Python 生成正态随机数
- normal distribution, lognormal distribution,正态随机数的生成
- 【算法分析】随机数的生成:均匀分布、正态、泊松 、瑞利
- 生成随机数的方法
- 生成随机数的方法
- 生成随机数的方法
- 生成随机数的方法
- 生成随机数的方法
- 基于CORDIC的正余弦波形生成
- Symbian生成随机数的方法
- C#生成随机数的方法
- 生成一个随机数的方法
- C++随机数的生成方法
- 随机数的生成方法_1
- 随机数的生成方法_2
- c# 查看系统中的服务
- Sockets编程--网络传输对象(采用异步机制)
- 我的C语言学习日志(三)
- Drools专家引擎安装方法
- 初临CSDN有感
- 基于Box–Muller变换的正态随机数生成方法
- 虚方法与重写方法的使用
- 初来乍到
- Kerberos的原理
- 树的一些概念
- VS2008对话框显示语言(中文、英文)设置
- ZOJ1048
- 关于PC2007装载Linux9花屏问题解决
- ANSI C 标准函数库