采用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
少来了,才几行代码呀……
不过这个随机库还是有不少人开发的