44 #ifndef ROL_RAISEDCOSINE_HPP 45 #define ROL_RAISEDCOSINE_HPP 48 #include "Teuchos_ParameterList.hpp" 64 : mean_(mean), var_(((var>0.) ? var : 0.5)) {}
67 mean_ = parlist.sublist(
"SOL").sublist(
"Distribution").sublist(
"Raised Cosine").get(
"Mean",0.5);
68 var_ = parlist.sublist(
"SOL").sublist(
"Distribution").sublist(
"Raised Cosine").get(
"Scale",0.5);
69 var_ = (var_ > 0.) ? var_ : 0.5;
74 return ((input >= a && input <= b) ?
75 (1.+std::cos(M_PI*(input-mean_)/var_))/(2.0*var_) : 0.);
80 return ((input < a) ? 0. : ((input > b) ? 1. :
81 0.5*(1.+(input-mean_)/var_+std::sin(M_PI*(input-mean_)/var_)/M_PI)));
86 return ((input < a) ? 0. : ((input > b) ? input - var_ :
87 0.5*(v+0.5*v*v/var_-var_*((std::cos(M_PI*v/var_)+1.)/(M_PI*M_PI)-0.5))));
90 Real a = mean_-
var_, b = mean_+
var_, c = 0.;
93 Real sa = ((fa < 0.) ? -1. : ((fa > 0.) ? 1. : 0.));
95 for (
size_t i = 0; i < 100; i++) {
98 sc = ((fc < 0.) ? -1. : ((fc > 0.) ? 1. : 0.));
102 if ( sc == sa ) { a = c; fa = fc; sa = sc; }
109 Real a = mean_-
var_, b = mean_+
var_;
110 Real am = std::pow(a,m+1), bm = std::pow(b,m+1);
111 Real omega = M_PI/
var_, phi = -M_PI*mean_/
var_;
112 Real val_cos = 0., val_sin = 0.;
113 for (
size_t k = 0; k < (m-1)/2; k++) {
114 val_cos += ((k%2==0) ? 1. : -1.)*
factorial(m)/(
factorial(m-2*k-1)*std::pow(omega,2+2*k))
115 *(std::pow(b,m-2*k-1)*std::cos(omega*b+phi)-std::pow(a,m-2*k-1)*std::cos(omega*a+phi));
117 for (
size_t k = 0; k < m/2; k++) {
118 val_sin += ((k%2==0) ? 1. : -1.)*
factorial(m)/(
factorial(m-2*k)*std::pow(omega,1+2*k))
119 *(std::pow(b,m-2*k)*std::sin(omega*b+phi)-std::pow(a,m-2*k)*std::sin(omega*a+phi));
121 return 0.5*((bm-am)/((Real)m+1) + val_cos + val_sin)/
var_;
132 void test(std::ostream &outStream = std::cout )
const {
134 std::vector<Real> X(size,0.);
135 std::vector<int> T(size,0);
136 X[0] = mean_-var_-4.*(Real)rand()/(Real)RAND_MAX;
140 X[2] = (2.*
var_)*(Real)rand()/(Real)RAND_MAX + (mean_-var_);
144 X[4] = mean_+var_+4.*(Real)rand()/(Real)RAND_MAX;
Real upperBound(void) const
Real invertCDF(const Real input) const
void test(std::ostream &outStream=std::cout) const
Real moment(const size_t m) const
Real lowerBound(void) const
Real evaluateCDF(const Real input) const
RaisedCosine(const Real mean=0.5, const Real var=0.5)
size_t factorial(const size_t m) const
virtual void test(std::ostream &outStream=std::cout) const
Real evaluatePDF(const Real input) const
Real integrateCDF(const Real input) const
RaisedCosine(Teuchos::ParameterList &parlist)
static const double ROL_EPSILON
Platform-dependent machine epsilon.