Гамма-распределение в Boost
-
22-09-2019 - |
Вопрос
Я пытаюсь использовать гамма-распределение из 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();
}