48 #include "Teuchos_ParameterList.hpp" 62 Real
igamma(
const Real s,
const Real x)
const {
63 Real sum = 0., term = 1./s;
65 while ( term != 0. ) {
67 term *= x/(s+(Real)n);
70 return std::pow(x,s)*std::exp(-x)*sum;
74 Gamma(
const Real shape = 1.,
const Real scale = 1.)
75 : shape_((shape > 0.) ? shape : 1.), scale_((scale > 0.) ? scale : 1.) {
76 gamma_shape_ = tgamma(shape_);
77 coeff_ = 1./(gamma_shape_*std::pow(scale_,shape_));
80 Gamma(Teuchos::ParameterList &parlist) {
81 shape_ = parlist.sublist(
"SOL").sublist(
"Distribution").sublist(
"Gamma").get(
"Shape",1.);
82 scale_ = parlist.sublist(
"SOL").sublist(
"Distribution").sublist(
"Gamma").get(
"Scale",1.);
83 shape_ = (shape_ > 0.) ? shape_ : 1.;
84 scale_ = (scale_ > 0.) ? scale_ : 1.;
85 gamma_shape_ = tgamma(shape_);
86 coeff_ = 1./(gamma_shape_*std::pow(scale_,shape_));
90 return ((input <= 0.) ? 0. : coeff_*std::pow(input,shape_-1.)*std::exp(-input/scale_));
94 return ((input <= 0.) ? 0. :
igamma(shape_,input/scale_)/gamma_shape_);
99 return ((input <= 0.) ? 0. : (x*
igamma(shape_,x) -
igamma(shape_+1.,x))/scale_);
108 Real s = 0., xs = 0., a = 1., tmp = 0.;
109 for (
size_t i = 0; i < 100; i++) {
116 while ( std::abs(fx) > (1.0 - 1.e-4*a)*std::abs(tmp) ) {
131 return shape_*scale_*scale_*(1. +
shape_);
133 return std::pow(scale_,m)*tgamma(shape_+(Real)m)/
gamma_shape_;
144 void test(std::ostream &outStream = std::cout )
const {
146 std::vector<Real> X(size,0.);
147 std::vector<int> T(size,0);
148 X[0] = -4.0*(Real)rand()/(Real)RAND_MAX;
152 X[2] = 4.0*(Real)rand()/(Real)RAND_MAX;
Real invertCDF(const Real input) const
Gamma(const Real shape=1., const Real scale=1.)
Real igamma(const Real s, const Real x) const
Real evaluatePDF(const Real input) const
Real evaluateCDF(const Real input) const
void test(std::ostream &outStream=std::cout) const
Real upperBound(void) const
Real lowerBound(void) const
virtual void test(std::ostream &outStream=std::cout) const
static const double ROL_INF
Gamma(Teuchos::ParameterList &parlist)
static const double ROL_EPSILON
Platform-dependent machine epsilon.
Real moment(const size_t m) const
Real integrateCDF(const Real input) const