【问题标题】:Gamma Distribution in BoostBoost 中的 Gamma 分布
【发布时间】:2010-03-26 20:21:04
【问题描述】:
我正在尝试使用来自 boost::math 的 Gamma 分布,但似乎无法将它与 boost::variate_generator 一起使用。有人可以证实吗?或者有什么方法可以使用。
我发现有一个未记录的 boost::gamma_distribution 可能也可以使用,但它只允许从分布中选择 alpha 参数而不是 beta。
谢谢!
【问题讨论】:
标签:
c++
boost
random
gamma-distribution
【解决方案1】:
如this link 中所述,您只需将 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();
}