KASKADE 7 development version
penaltyFunctions.hh
Go to the documentation of this file.
1#ifndef PENALTY_FUNCTIONS_HH
2#define PENALTY_FUNCTIONS_HH
3
4#include <cmath>
5
7
8namespace Kaskade
9{
11 {
12 public:
13 QuadraticAndLogBase(double c_, double d_)
14 {
15 init(c_,d_);
16 }
17
19
22
23 double d0(double t) const { return c*t*t + d*log(t);}// + e; }
24 double d1(double t) const { return 2*c*t + d/t; }
25 double d2(double t) const { return 2*c - d/(t*t); }
26 double d3(double t) const { return 2*d/(t*t*t); }
27
28 private:
29void init(double c_, double d_)
30 {
31 // assert(c_>0);
32 c = c_;
33 d = d_;
34 e = -d0(1);
35 }
36
37 double c = 1, d = 1, e = 0;
38 };
39
40
41
42 template <size_t k1, int k2>
44 {
45// static_assert(k2<0, "power not admissible");
46 public:
47 explicit Polynomial(double c_, double d_) : c(c_), d(d_)
48 {
49 assert(c>0);
50 e = -d0(1);
51 }
52
53 Polynomial() : Polynomial(1.,1.) {}
54 Polynomial(Polynomial const&) = default;
55 Polynomial& operator=(Polynomial const&) = default;
56
57 double d0(double t) const { return c*pow(t,k1) + d*pow(t,k2) + e; }
58 double d1(double t) const { return c*k1*pow(t,k1-1) + d*k2*pow(t,k2-1); }
59 double d2(double t) const { return c*k1*(k1-1)*pow(t,k1-2) + d*k2*(k2-1)*pow(t,k2-2); }
60 double d3(double t) const { return c*k1*(k1-1)*(k1-2)*pow(t,k1-3) + d*k2*(k2-1)*(k2-2)*pow(t,k2-3); }
61
62 private:
63 double c, d, e = 0;
64 };
65
69
71}
72
73#endif
Sets a function to std::numeric_limits<double>::max() for negative arguments.
Polynomial(Polynomial const &)=default
double d0(double t) const
Polynomial & operator=(Polynomial const &)=default
double d3(double t) const
double d2(double t) const
Polynomial(double c_, double d_)
double d1(double t) const
QuadraticAndLogBase(double c_, double d_)
double d2(double t) const
double d1(double t) const
double d0(double t) const
double d3(double t) const
QuadraticAndLogBase(QuadraticAndLogBase const &)=default
QuadraticAndLogBase & operator=(QuadraticAndLogBase const &)=default
PenaltyFunction< Polynomial< 5,-5 > > Hartmann03
PenaltyFunction< QuadraticAndLogBase > QuadraticAndLog
PenaltyFunction< Polynomial< 2,-2 > > QuadQuad