采用C++ TR1中的随机数发生器生成Gamma分布随机数
随机水文学中常会用到符合Gamma分布的随机数,用于模拟一些随机的水文过程,这里水文工具集介绍一种使用C++语言的TR1新特征中的随机数发生器来产生Gamma分布随机数,当然TR1的随机数库里面还有许多生成其它分布的类(如:柏努利分布,二项分布,指数分布,几何分布,正态分布和泊松分布等),这里仅就Gamma分布进行简单介绍,其它的也很容易的,如果什么时候需要的话,也可以写成DLL或者COM以供其它语言调用的。具体产生Gamma分布随机数的源代码如下:
/* 采用CPP TR1中的随机数发生器生成Gamma分布随机数 */ #include <random> #include <iostream> typedef std::mt19937 Myeng; //可参考下:/index.php/archives/mersenne-twister-pseudorandom-number-generator/ typedef std::gamma_distribution<double> Mydist; int main() { Myeng eng; Mydist dist(1.5,2.5); Mydist::input_type engval = eng(); Mydist::result_type distval = dist(eng); distval = distval; // to quiet "unused" warnings engval = engval; std::cout << "alpha == " << dist.alpha() << ";beta == " << dist.beta() << std::endl; dist.reset(); // discard any cached values std::cout << "a random value == " << dist(eng) << std::endl; std::cout << "a random value == " << dist(eng) << std::endl; std::cout << "a random value == " << dist(eng) << std::endl; return (0); }
lsc on 七月 16th, 2010
太高深了
CnHUP on 七月 16th, 2010
少来了,才几行代码呀……
不过这个随机库还是有不少人开发的