1#ifndef ELEMENTARY_FUNCTIONS_HH
2#define ELEMENTARY_FUNCTIONS_HH
14 template <
typename... Args>
20 double d0(
double const& x)
const
22 if(x < 1e-16) std::cout <<
"negative value x in penalty function d0: " << x << std::endl;
24 else return Base::d0(x);
26 double d1(
double const& x)
const
28 if(x < 1e-16) std::cout <<
"negative value x in penalty function d1: " << x << std::endl;
32 double d2(
double const& x)
const
34 if(x < 1e-16) std::cout <<
"negative value x in penalty function d2: " << x << std::endl;
38 double d3(
double const& x)
const
40 if(x < 1e-16) std::cout <<
"negative value x in penalty function d3: " << x << std::endl;
42 else return Base::d3(x);
58 std::cout <<
"Created monomial of order " << k << std::endl;
66 double d0(
double const x)
const
75 double d1(
double const x)
const
77 return a*k*pow(x,k-1);
84 double d2(
double const x)
const
86 return a*k*(k-1)*pow(x,k-2);
93 double d3(
double const x)
const
95 return a*k*(k-1)*(k-2)*pow(x,k-3);
99 void setA(
double const a_) { a=a_; }
114 explicit LN(
double const a_=1.0) :
118 std::cout <<
"Created natural logarithm" << std::endl;
126 double d0(
double const x)
const
128 if(x<0) std::cout <<
"Warning: negative argument for log" << std::endl;
136 double d1(
double const x)
const
138 if(x<0) std::cout <<
"Warning: negative argument for a/x" << std::endl;
146 double d2(
double const x)
const
155 double d3(
double const x)
const
157 return 2.0*a/(x*x*x);
161 void setA(
double const a_) { a=a_; }
178 explicit Exp(
double a_=1.0) : a(a_){}
184 double d0(
double x)
const
193 double d1(
double x)
const
202 double d2(
double x)
const
211 double d3(
double x)
const
227 double d0(
double x)
const noexcept
232 double d1(
double x)
const noexcept
234 return 1./(2*sqrt(x));
237 double d2(
double x)
const noexcept
239 return -1./(4*pow(x,1.5));
242 double d3(
double x)
const noexcept
244 return 3./(8*pow(x,2.5));
Exponential function of the form a*exp(b*x)
double d1(double x) const
First derivative.
Exp(double a_=1.0)
Constructor.
void setA(double a_)
Set a.
double d3(double x) const
Third derivative.
double d2(double x) const
Second derivative.
double d0(double x) const
Function value.
Natural logarithm of the form a*\ln(x)
double d1(double const x) const
First derivative.
LN(double const a_=1.0)
Constructor.
double d3(double const x) const
Third derivative.
void setA(double const a_)
Set a.
double d2(double const x) const
Second derivative.
double d0(double const x) const
Function value.
Monomial a*x^k of order k.
double d3(double const x) const
Third derivative.
void setA(double const a_)
Set a.
double d2(double const x) const
Second derivative.
double d0(double const x) const
Function value.
double d1(double const x) const
First derivative.
Monomial(double const a_=1.0)
Constructor.
Sets a function to std::numeric_limits<double>::max() for negative arguments.
PenaltyFunction & operator=(PenaltyFunction const &)=default
double d1(double const &x) const
double d2(double const &x) const
PenaltyFunction(const Args &... args)
PenaltyFunction(PenaltyFunction const &)=default
double d3(double const &x) const
double d0(double const &x) const
double d2(double x) const noexcept
double d3(double x) const noexcept
double d1(double x) const noexcept
double d0(double x) const noexcept
Dune::FieldVector< T, n > max(Dune::FieldVector< T, n > x, Dune::FieldVector< T, n > const &y)
Componentwise maximum.
Functional::Scalar d1(Assembler &assembler, Functional const &f, typename Functional::AnsatzVars::VariableSet &x, typename Functional::Scalar tolerance=1e-6, typename Functional::Scalar increment=1e-12, bool toFile=false, std::string const &filename=std::string("d1error"))
Functional::Scalar d2(Assembler &assembler, Functional const &f, typename Functional::AnsatzVars::VariableSet const &x, typename Functional::Scalar increment=1e-12, typename Functional::Scalar tolerance=1e-6, bool toFile=false, std::string const &savefilename=std::string("d2error"))
PenaltyFunction< LN > PenaltyLN