知识大全 正态分布的随机数发生器

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

相关参考