我正在尝试使用来自 boost::math 的 Gamma 分布,但看起来它无法与 boost::variate_generator 一起使用。有人可以证实吗?或者有没有办法使用它。
我发现有一个未记录的 boost::gamma_distribution 可能也可以使用,但它只允许从分布中选择 alpha 参数而不是 beta。
谢谢!
我正在尝试使用来自 boost::math 的 Gamma 分布,但看起来它无法与 boost::variate_generator 一起使用。有人可以证实吗?或者有没有办法使用它。
我发现有一个未记录的 boost::gamma_distribution 可能也可以使用,但它只允许从分布中选择 alpha 参数而不是 beta。
谢谢!
如此链接中所述,您可以通过将 rng 的输出乘以所需的比例来扩展 Boost(或 TR1)的单参数伽马分布。
下面是用于variate_generator
从伽马分布中提取数字的示例代码,由均值和方差参数化:
#include <boost/random.hpp>
#include <boost/random/gamma_distribution.hpp>
double rgamma( double mean, double variance, boost::mt19937& rng ) {
const double shape = ( mean*mean )/variance;
double scale = variance/mean;
boost::gamma_distribution<> gd( shape );
boost::variate_generator<boost::mt19937&,boost::gamma_distribution<> > var_gamma( rng, gd );
return scale*var_gamma();
}