美文网首页算法数据结构和算法分析
服从Gaussian分布的近似随机数生成算法

服从Gaussian分布的近似随机数生成算法

作者: ProjectDaedalus | 来源:发表于2020-03-07 15:06 被阅读0次

中心极限定理是概率论中的一组定理,研究的是大量相互独立的随机变量之和在什么样的条件下会收敛于正态分布。我们利用林德伯格-列维(Lindeberg-Levy)中心极限定理,可以通过服从均匀分布的随机数生成服从高斯分布的随机数生成算法

figu.png

林德伯格-列维中心极限定理

具有有限期望和方差(不为0)的独立同分布的随机变量之和,经过标准化后,其分布收敛于标准正态分布

令随机变量 X_1, X_2, … , X_n 独立同分布,且具有有限的期望和方差 E(X_i) = \mu, D(X_i) = \sigma^2 \neq 0 \quad (i = 1,2, .., n)


Y = \frac{ \sum_{i=1}^{n} X_i - n\mu }{\sqrt{n} \sigma } \tag{1}

\lim_{n \to \infty} P(Y \leq a) = \Phi(a)
其中\Phi(a)是标准正态分布的分布函数

生成服从Gaussian分布的近似随机数

标准正态分布

根据上文,我们可以得知,取多次指定分布下的随机数,然后经过求和、标准化后,即可使得该随机数满足标准正态分布

这里我们取容易获得的均匀分布X_n \sim U(0,1)为例,则易知:

E(X_i) = 1/2, D(X_i) = 1/12

则根据(1)式可得,所需的服从标准正态分布的随机变量Y:
Y = \sqrt(\frac{12}{n}) (\sum_{i=1}^{n}X_n - \frac{n}{2}) \sim N(0,1)
在有些算法的实现源码可以看到n取值12,其原因就在这里根号正好可以消去。n越大,其精度越高

普通高斯分布

一般高斯分布Z \sim N( \mu_2, \sigma_2 )和标准正态分布Y \sim N(0, 1)的转换公式如下:
Y = \frac{Z-\mu_2}{\sigma_2} \tag{2}
则可以用(2)式获得指定的高斯分布

相关文章

  • 服从Gaussian分布的近似随机数生成算法

    中心极限定理是概率论中的一组定理,研究的是大量相互独立的随机变量之和在什么样的条件下会收敛于正态分布。我们利用林德...

  • Python numpy学习笔记之生成随机数

    废话不多说,直接开干。 生成均匀离散的随机数 生成服从均匀分布、3行2列的随机数 生成服从正态分布的随机数 经典例...

  • C++11 生成正态分布随机数

    要生成服从标准正态分布的随机数,类似matlab中的randn函数。C++11中引入了正态分布模板类std::no...

  • python随机数生成算法

    python随机数生成算法# 现在程序中用的随机数,都是伪随机数算法生成的。例如线性同余法,平方取中法等。 1.梅...

  • python中random模块功能详解(python工程狮)

    random — 生成伪随机数,random模块为各种分布实现伪随机数的生成。 1.random.random()...

  • 理解正态分布

    正态分布是概率论中最重要的分布。大量的实践结果与理论分析表明,大多数随机变量均服从或近似服从正态分布,如测量的误差...

  • 基于C++的生成随机数曲线

    VC++生成随机数曲线,根据生成的随机数的大小生成曲线,看上去像示波器一样。生成随机数的方式有三种,一种是平均分布...

  • Random

    生成0~100之间的随机数 生成[0,1]之间均匀分布的随机数 产生任意范围的随机数(范围:[m,n]) [m,n...

  • Swift 随机数生成

    // 随机数生成 // arc4random 随机数算法 let dicFaceCount = 6 let ran...

  • R语言学习笔记4-随机数的产生

    1、均匀分布随机数 在R语言中,生成均匀分布随机数的函数是:runif() 基本语法:runif(n, min=0...

网友评论

    本文标题:服从Gaussian分布的近似随机数生成算法

    本文链接:https://www.haomeiwen.com/subject/ooscdhtx.html