首页 > 其他分享 >[转]基于Box–Muller变换的正态随机数生成方法

[转]基于Box–Muller变换的正态随机数生成方法

时间:2023-05-16 11:26:07浏览次数:40  
标签:Box 采样 变换 正态 均匀分布 正态分布 Muller

为什么我的眼里常含泪水?因为我有一个算法不会。为了节约点眼泪,今天我们就来介绍著名的Box–Muller变换,基于这种变换,我们便可以得到一个从均匀分布中得到正态分布采样的算法,本文也会详细解释其中蕴含的数学原理。

 

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-也将是均匀分布的,于是用 U1 替换1-u,最后可得

结论得证。最后我们来总结一下利用Box-Muller变换生成符合高斯分布的随机数的方法:

标签:Box,采样,变换,正态,均匀分布,正态分布,Muller
From: https://www.cnblogs.com/bing2023/p/17404374.html

相关文章

  • 该算法主要用于处理高光谱和近红外光谱的原始数据,主要包括标准正态变量交化(SNV)、标准
    该算法主要用于处理高光谱和近红外光谱的原始数据,主要包括标准正态变量交化(SNV)、标准化(Autoscales)、SavitZky一Golay卷积平滑法(SG-平滑)、一阶求导(1stderivative)、归一化(normalization)、移动平均平滑(movingaverage,MA)等光谱预处理方法,替换数据就可以直接使用,代码注释都已经写好。I......
  • el-checkbox中设置不可编辑
    做项目遇到el-checkbox需要不可编辑,必须固定选择的需求,首先想到的肯定是disabled,但是disabled的样式不很好看,你接下来可能还会想到readonly,然后你就会发现checkbox上面没有readonly这个属性。那我们怎么办呢! 下面是我的两个方法: 1,既然disabled不好看,那当然我们可以通过dee......
  • check_box被点击后改变背景
    "QCheckBox::indicator"                    "{"                    "background-color:rgb(40,50,62);"                    "}""QCheckBo......
  • el-tree 根据多个结果筛选树状图(增加checkbox勾选)
    <template><divclass="wrapper-jjy"><el-dialogtitle="接警员查找"v-model="jjyDialogVisible":draggable="true"width="735px"height="300":close-on-click-modal="true&q......
  • Blackbox_exporter的HTTP模块配置Bearer令牌
    如果要监控需要携带token才能访问的接口,您可以使用Blackbox_exporter的HTTP模块配置Bearer令牌。以下是一个示例:安装和配置Blackbox_exporter。创建一个名为auth.yml的配置文件,并将其放置在Blackbox_exporter配置文件夹中。在auth.yml文件中,添加类似以下的配置:modules:  http_2x......
  • c#设置checkbox选中状态
    this.checkBox1.Checked=true;//设置默认勾选......
  • Yolov5 根据自己的需要更改 预测框box和蒙版mask的颜色
    1、首先找到项目中utils/plots.py文件,打开该代码将原来的Colors类注释掉(或删掉),改成如下Colors类classColors:def__init__(self):self.red=(255,0,0)#深红色self.green=(0,255,0)#绿色def__call__(self,i,bgr=False):......
  • (转)Dubbox Dubbo 扩展
    Dubbo 是一个被国内很多互联网公司广泛使用的开源分布式服务框架,即使从国际视野来看应该也是一个非常全面的SOA基础框架。作为一个重要的技术研究课题,在当当网我们根据自身的需求,为Dubbo实现了一些新的功能,并将其命名为Dubbox(即DubboeXtensions)。主要的新功能包括:支持......
  • how to configure blackbox.yml
    modules:http_2xx:prober:httphttp:follow_redirects:truehttp_post_2xx:prober:httphttp:method:POSTfollow_redirects:trueheaders:Content-Type:application/jsonbody_size_limit:10MB......
  • 【PyQt6】Python实现QComboBox显示文本与对应值不同的方法
    问题实现QComboBox显示文本与对应值不同的方法。比如下拉框显示“正确”和“错误”,但程序中想要获取“1”和“0”,但又不想再根据显示内容来判断。解决#设置combobox.addItem("正确",1)combobox.addItem("错误",0)#获取text=combobox.currentText()#正确/错误val......