44 #ifndef ROL_TRUNCATEDEXPONENTIAL_HPP 45 #define ROL_TRUNCATEDEXPONENTIAL_HPP 48 #include "Teuchos_ParameterList.hpp" 64 if ( k == m || m == 0 || m == 1 ) {
68 for (
size_t i = k; i < m; i++) {
76 : a_(std::min(a,b)), b_(std::max(a,b)), scale_((scale>0.) ? scale : 1.) {
77 expa_ = std::exp(-scale_*a_);
78 expb_ = std::exp(-scale_*b_);
79 diff_ = expa_ -
expb_;
80 coeff_ = scale_/
diff_;
84 Teuchos::ParameterList TElist
85 = parlist.sublist(
"SOL").sublist(
"Distribution").sublist(
"Truncated Exponential");
86 a_ = TElist.get(
"Lower Bound",0.);
87 b_ = TElist.get(
"Upper Bound",1.);
90 b_ = std::max(b_,tmp);
91 scale_ = TElist.get(
"Scale",1.);
92 scale_ = (scale_ > 0.) ? scale_ : 1.;
93 expa_ = std::exp(-scale_*a_);
94 expb_ = std::exp(-scale_*b_);
95 diff_ = expa_ -
expb_;
96 coeff_ = scale_/
diff_;
100 return ((input >= a_) ? ((input <= b_) ? coeff_*std::exp(-scale_*input) : 0.) : 0.);
104 return ((input > a_) ? ((input < b_) ? (expa_-std::exp(-scale_*input))/diff_ : 1.) : 0.);
108 return ((input > a_) ? ((input < b_) ?
109 (expa_*(input-a_) - (expa_ - std::exp(-scale_*input))/scale_)/diff_ :
110 (expa_*(b_-a_) - (expa_ - expb_)/scale_)/diff_ + (input - b_)) : 0.);
114 return ((input > 0.) ? ((input < 1.) ? -std::log(expa_-diff_*input)/scale_ : b_) : a_);
118 Real val = 0., coeff = 0.;
119 for (
size_t i = 0; i < m+1; i++) {
121 val += coeff*(std::pow(a_,i)*expa_-std::pow(b_,i)*
expb_)/std::pow(scale_,m-i+1);
134 void test(std::ostream &outStream = std::cout )
const {
136 std::vector<Real> X(size,0.);
137 std::vector<int> T(size,0);
138 X[0] = a_-4.0*(Real)rand()/(Real)RAND_MAX;
142 X[2] = (b_-
a_)*(Real)rand()/(Real)RAND_MAX + a_;
146 X[4] = b_+4.0*(Real)rand()/(Real)RAND_MAX;
Real invertCDF(const Real input) const
TruncatedExponential(const Real a=0., const Real b=1., const Real scale=1.)
Real evaluateCDF(const Real input) const
size_t compute_coeff(const size_t m, const size_t k) const
TruncatedExponential(Teuchos::ParameterList &parlist)
void test(std::ostream &outStream=std::cout) const
Real lowerBound(void) const
virtual void test(std::ostream &outStream=std::cout) const
Real moment(const size_t m) const
Real upperBound(void) const
Real integrateCDF(const Real input) const
Real evaluatePDF(const Real input) const