2

我正在尝试使用来自 boost::math 的 Gamma 分布,但看起来它无法与 boost::variate_generator 一起使用。有人可以证实吗?或者有没有办法使用它。

我发现有一个未记录的 boost::gamma_distribution 可能也可以使用,但它只允许从分布中选择 alpha 参数而不是 beta。

谢谢!

4

1 回答 1

4

如此链接中所述,您可以通过将 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();
}
于 2010-05-20T15:35:22.260 回答