知识大全 正态分布的随机数发生器
Posted 变量
篇首语:一年好景君须记,最是橙黄橘绿时。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 正态分布的随机数发生器相关的知识,希望对你有一定的参考价值。
主要参考《Numerical Recipes in C++ /e》p ~p 和《Simulation Modeling and Analysis /e》p ~p
Box 和 Muller 在 年给出了由均匀分布的随机变量生成正态分布的随机变量的算法 设 U U 是区间 ( ) 上均匀分布的随机变量 且相互独立 令
X = sqrt( *log(U )) * cos( *PI*U );
X = sqrt( *log(U )) * sin( *PI*U );
那么 X X 服从 N( ) 分布 且相互独立 等于说我们用两个独立的 U( ) 随机数得到了两个独立的 N( )随机数
Marsaglia 和 Bray 在 年提出了一种改进算法 避免使用三角函数 以下的实现代码用的就是这种改进算法
//
// Gaussian Random Number Generator class
// ref ``Numerical Recipes in C++ /e p ~ p
//
public class GaussianRNG
int iset;
double gset;
Random r r ;
public GaussianRNG()
r = new Random(unchecked((int)DateTime Now Ticks));
r = new Random(~unchecked((int)DateTime Now Ticks));
iset = ;
public double Next()
double fac rsq v v ;
if (iset == )
do
v = * r NextDouble() ;
v = * r NextDouble() ;
rsq = v *v + v *v ;
while (rsq >= || rsq == );
fac = Math Sqrt( *Math Log(rsq)/rsq);
gset = v *fac;
iset = ;
return v *fac;
else
iset = ;
return gset;
cha138/Article/program/net/201311/11655
相关参考