12#include "libmesh/utility.h"
23 "scale", 1.0,
"scale > 0",
"Scale parameter (theta or 1/beta).");
28 :
Distribution(parameters), _alpha(getParam<Real>(
"shape")), _theta(getParam<Real>(
"scale"))
33Gamma::pdf(
const Real &
x,
const Real & alpha,
const Real & beta)
38 return std::pow(beta, alpha) * std::pow(
x, alpha - 1.0) * std::exp(-beta *
x) /
43Gamma::cdf(
const Real &
x,
const Real & alpha,
const Real & beta)
78 const Real
tol = 1e-14;
79 const unsigned int max_iter = 1e6;
80 const Real coef = std::pow(
x,
a) * std::exp(-
x) / std::tgamma(
a + 1.0);
84 for (
unsigned int i = 0; i < max_iter; ++i)
89 if (std::abs(cn / val) <
tol)
93 mooseAssert(
false,
"Could not compute incomplete gamma function.");
100 Real
x =
a > 1.0 ?
a : std::pow(
p * std::tgamma(
a + 1.0), 1.0 /
a);
101 const Real
scale = std::tgamma(
a);
102 const Real
tol = 1e-14;
103 const unsigned int max_iter = 1e6;
106 for (
unsigned int i = 0; i < max_iter; ++i)
109 if (std::abs(
f) <
tol)
111 df = std::pow(
x,
a - 1.0) * std::exp(-
x) /
scale;
115 mooseAssert(
false,
"Could not find inverse of incomplete gamma function.");
Real f(Real x)
Test function for Brents method.
const std::vector< double > x
registerMooseObject("StochasticToolsApp", Gamma)
static InputParameters validParams()
A class used to generate a Gamma distribution.
static Real incompleteGammaInv(const Real &a, const Real &p)
Inverse of lower incomplete gamma function.
virtual Real pdf(const Real &x) const override
static Real incompleteGamma(const Real &a, const Real &x)
Lower incomplete gamma function.
virtual Real quantile(const Real &p) const override
const Real & _alpha
Shape.
static InputParameters validParams()
virtual Real cdf(const Real &x) const override
const Real & _theta
Scaling.
Gamma(const InputParameters ¶meters)