Вопрос

Я пытаюсь использовать гамма-распределение из boost::math, но, похоже, его невозможно использовать с boost::variate_generator .Может ли кто-нибудь подтвердить это?Или есть способ использовать это.

Я обнаружил, что существует недокументированный boost::gamma_distribution, который, вероятно, тоже можно было бы использовать, но он позволяет выбирать только альфа-параметр из дистрибутива, а не бета-версию.

Спасибо!

Это было полезно?

Решение

Как упоминалось в эта ссылка, вы можете расширить однопараметрическое гамма-распределение Boost (или TR1), просто умножив выходной сигнал rng на желаемый масштаб.

Ниже приведен пример кода, который использует 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();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top