Как упоминалось в этой ссылке , вы можете расширить однопараметрическое гамма-распределение 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();
}