1#ifndef OPT_MODEL_FUNCTIONS_HH
2#define OPT_MODEL_FUNCTIONS_HH
7#include "dune/common/fvector.hh"
8#include "dune/istl/bvector.hh"
9#include "dune/istl/matrix.hh"
13 namespace OPT_MODEL_FUNCTIONS_Detail
15 template <
class FieldType>
26 template <
class FieldType>
34 template <
class FieldType>
44 class QuadraticFunction
50 : constantPart(constantPart_), linearPart(linearPart_),
quadraticPart(quadraticPart_)
55 double d0(std::vector<double>
const& argument)
const
57 using namespace OPT_MODEL_FUNCTIONS_Detail;
59 for(
int i=0; i<argument.size(); ++i) arg[i]=argument[i];
61 return constantPart+linearPart*arg+arg*tmp;
66 using namespace OPT_MODEL_FUNCTIONS_Detail;
68 for(
int i=0; i<argument.size(); ++i) arg[i]=argument[i];
73 FieldType constantPart;
85 omegaL(omegaL_), quadraticModel(quadraticModel_), normBlf(normBlf_), regWeight(0)
89 : omegaL(omegaL_), quadraticModel(quadraticModel_), normBlf(normBlf_), regWeight(regWeight_)
94 return quadraticModel.
d0(iterate);
97 double d0(std::vector<double>
const & iterate)
const
99 return quadraticModel.
d0(iterate)+omegaL/6*pow(normBlf.
d0(iterate),1.5);
102 std::vector<double>
d1(std::vector<double>
const & iterate)
const
104 using namespace OPT_MODEL_FUNCTIONS_Detail;
106 std::vector<double> w(v.size());
107 for(
int i=0; i<w.size(); ++i) w[i]=v[i][0];
117 class CubicModel1dForFmin
124 std::vector<double> iterate(1);
126 return cb.
d0(iterate);
133 class ContractionModelFunction
139 omegaC(omegaC_), normBlf(normBlf_)
142 double d0(std::vector<double>
const & iterate)
const
145 return omegaC/2*pow(normBlf.
d0(iterate),0.5);
148 std::vector<double>
d1(std::vector<double>
const & iterate)
const
150 using namespace OPT_MODEL_FUNCTIONS_Detail;
152 std::vector<double> w(v.size());
153 for(
int i=0; i<w.size(); ++i) w[i]=v[i][0];
virtual double d0(std::vector< double > const &) const =0
double d0(std::vector< double >const &iterate) const
ContractionModelFunction(QuadraticFunction normBlf_, double omegaC_)
Dune::FieldVector< double, 1 > FieldType
std::vector< double > d1(std::vector< double >const &iterate) const
CubicModel1dForFmin(CubicModelFunction const &cb_)
double operator()(double tau)
CubicModelFunction(QuadraticFunction quadraticModel_, QuadraticFunction normBlf_, double omegaL_, double regWeight_)
std::vector< double > d1(std::vector< double >const &iterate) const
double d0(std::vector< double > const &iterate) const
double evalQuadraticModel(std::vector< double >const &iterate) const
Dune::FieldVector< double, 1 > FieldType
CubicModelFunction(QuadraticFunction quadraticModel_, QuadraticFunction normBlf_, double omegaL_)
TODO !!!!! Entscheidung über Vektortyp !!!!!!
Dune::FieldVector< double, 1 > FieldType
std::vector< double > d1(std::vector< double > const &argument) const
Dune::Matrix< FieldType > quadraticPart
QuadraticFunction(double constantPart_, Dune::BlockVector< FieldType > linearPart_, Dune::Matrix< FieldType > quadraticPart_)
double d0(std::vector< double > const &argument) const
Dune::BlockVector< FieldType > d1(std::vector< double > const &argument) const
QuadraticFunction(QuadraticFunction const &)=default
Dune::BlockVector< FieldType > operator+(Dune::BlockVector< FieldType > const &x, Dune::BlockVector< FieldType > const &y)
Dune::BlockVector< FieldType > operator*(Dune::Matrix< FieldType > const &A, Dune::BlockVector< FieldType > const &x)