44 #ifndef ROL_LAPLACE_HPP 45 #define ROL_LAPLACE_HPP 48 #include "Teuchos_ParameterList.hpp" 59 if ( k == 0 || m == 0 || m == 1 ) {
63 for (
size_t i = m-k; i < m; i++) {
70 Laplace(
const Real mean = 0.,
const Real scale = 1.)
71 : mean_(mean), scale_(scale) {}
73 Laplace(Teuchos::ParameterList &parlist) {
74 mean_ = parlist.sublist(
"SOL").sublist(
"Distribution").sublist(
"Laplace").get(
"Mean",0.);
75 scale_ = parlist.sublist(
"SOL").sublist(
"Distribution").sublist(
"Laplace").get(
"Scale",1.);
76 scale_ = (scale_ > 0.) ? scale_ : 1.;
80 return 0.5*std::exp(-std::abs(input-mean_)/scale_)/
scale_;
84 return ((input < mean_) ? 0.5*std::exp((input-mean_)/scale_) :
85 1.-0.5*std::exp(-(input-mean_)/scale_));
89 return ((input < mean_) ? 0.5*scale_*std::exp((input-mean_)/scale_) :
90 (input-mean_)+0.5*scale_*std::exp(-(input-mean_)/scale_));
94 Real sgn = ((input < 0.5) ? -1. : ((input > 0.5) ? 1. : 0.0));
95 return mean_ - scale_*sgn*std::log(1.-2.*std::abs(input-0.5));
103 return std::pow(mean_,2) + 2.*std::pow(scale_,2);
105 Real coeff = 0., val = 0.;
106 for (
size_t k = 0; k < m+1; k++) {
109 val += coeff*std::pow(scale_,k)*std::pow(mean_,m-k);
123 void test(std::ostream &outStream = std::cout )
const {
125 std::vector<Real> X(size,4.*(Real)rand()/(Real)RAND_MAX - 2.);
126 std::vector<int> T(size,0);
void test(std::ostream &outStream=std::cout) const
Real evaluatePDF(const Real input) const
Real invertCDF(const Real input) const
Real moment(const size_t m) const
Laplace(const Real mean=0., const Real scale=1.)
Real integrateCDF(const Real input) const
Laplace(Teuchos::ParameterList &parlist)
Real upperBound(void) const
size_t compute_coeff(const size_t m, const size_t k) const
Real evaluateCDF(const Real input) const
Real lowerBound(void) const
virtual void test(std::ostream &outStream=std::cout) const
static const double ROL_INF
static const double ROL_NINF