8#include "istl/matrix.hh"
11#include "dune/common/fmatrix.hh"
27 SearchSpaceCreator(AbstractTangentialSolver* tangentialSolver_,AbstractNormalSolver* normalSolver_):
28 tangentialSolver(tangentialSolver_),normalSolver(normalSolver_), normalactive(false) {};
35 if(tangentialSolver) dim+=tangentialSolver->nSolutionVectors();
36 if(normalSolver) dim+=1;
45 return currentdimension;
57 std::unique_ptr<AbstractLinearization>& tangentialLinearization,
70 AbstractTangentialSolver* tangentialSolver;
71 AbstractNormalSolver* normalSolver;
92 std::vector<AbstractFunctionSpaceElement *>& basis,
95 AbstractTangentialSolver
const* tS,
97 bool useHessianAsNorm);
117 double d=
eval(iterate,0.0,0.0,0.0);
130virtual double eval(std::vector<double> & iterate,
double oL,
double oC,
double g,
double soscale=1.0,
double foscale=1.0,
double alpha=1.0)
154 std::vector<double> iterate(p.
data);
162 std::vector<double> iterate(p.
data);
163 if(
fixednu && iterate.size()<
sz) iterate.push_back(1.0);
164 std::vector<double> v(
sz),w(
sz),w2(
sz);
175 for(
int i=0; i<g.
data.size();++i)
178 for(
int i=0; i<g.
data.size();++i)
184 for(
int i=0; i<g.
data.size();++i)
200 std::vector<double> iterate(x.
data);
209 double normC(std::vector<double>& coeff)
214 double normL(std::vector<double>& coeff)
219 double normH(std::vector<double>& coeff)
228 if(in.size() < mat.
cols() || out.size() < mat.
rows())
230 std::vector<double> in2(mat.
cols(),0.0), out2(mat.
rows(),0.0);
231 for(
int i=0; i<in.size();++i)
234 for(
int i=0; i<out.size();++i)
243 std::vector<double> Ar(left.size());
253 barg -= oC/2 * normIter;
257 double dot(std::vector<double>
const& v1,std::vector<double>
const& v2)
260 for(
int i=0; i<v1.size(); ++i)
Interfaces for function space oriented algorithms.
Abstract Vector for function space algorithms.
Representation of a nonlinear functional.
For optimization with cubic upper bounds method.
double normL(std::vector< double > &coeff)
double normC(std::vector< double > &coeff)
double compute_barrier_arg(std::vector< double > &iterate, double oC)
CUBThetaModelFunction(AbstractLinearization const &linT, AbstractLinearization const &linN, std::vector< AbstractFunctionSpaceElement * > &basis, AbstractScalarProduct &scL, AbstractScalarProduct &scC, SearchSpaceCreator &sp)
CUBThetaModelFunction(AbstractLinearization const &linT, AbstractLinearization const &linN, std::vector< AbstractFunctionSpaceElement * > &basis, AbstractScalarProduct &scL, AbstractScalarProduct &scC, AbstractTangentialSolver const *tS, SearchSpaceCreator &sp, bool useHessianAsNorm)
virtual int HasAnalyticGradient()
virtual void gradient(dvec &p, dvec &g)
SLAPMatrix< double, 1 > dmat
void getMinimalCoefficients(std::vector< double > &coeff)
virtual ~CUBThetaModelFunction()
double dot(std::vector< double >const &v1, std::vector< double >const &v2)
double computeblf(SLAPMatrix< double > &blf, std::vector< double > &left, std::vector< double > &right)
virtual double evalModel(std::vector< double > &iterate)
SLAPMatrix< double > normMblf
std::vector< double > gradientcoeff
double f_to_minimize(dvec &p)
virtual int ValidParameters(dvec &x)
virtual double eval(std::vector< double > &iterate, double oL, double oC, double g, double soscale=1.0, double foscale=1.0, double alpha=1.0)
virtual double evalRegModel(std::vector< double > &iterate, double omegaL)
double normH(std::vector< double > &coeff)
SLAPMatrix< double > normLblf
bool const tangentialstep
SLAPMatrix< double > hessianblf
void MatMultiply(SLAPMatrix< double > &mat, std::vector< double > &in, std::vector< double > &out)
SLAPMatrix< double > normHblf
SLAPMatrix< double > normCblf
void reparametrize(double omegaL_, double omegaC_, double gamma_, Paras p)
SLAPMatrix< double > ablf
Very simple dense matrix class for interfacing with LAPACK routines and the optimization tool uncmin.
bool normalFactorizationPresent()
bool hasEqualityConstraints()
virtual ~SearchSpaceCreator()
int getMaxDimension() const
virtual void computeBasisVectors(std::vector< AbstractFunctionSpaceElement * > &basisVectors, AbstractFunctionSpaceElement &iterate, AbstractLinearization &normalLinearization, AbstractFunctional &tangentialFunctional, std::unique_ptr< AbstractLinearization > &tangentialLinearization, AbstractNorm const &norm, double ThetaAim, double omegaC, double omegaL, double omegaH, int report, double &nu0, double &normNormal)
void getLinearCombination(std::vector< AbstractFunctionSpaceElement * > &basisVectors, std::vector< double >const &coefficients, AbstractFunctionSpaceElement &result) const
SearchSpaceCreator(AbstractTangentialSolver *tangentialSolver_, AbstractNormalSolver *normalSolver_)
bool hasNontrivialFunctional()
AbstractNormalSolver * getNormalSolver()
AbstractTangentialSolver * getTangentialSolver()
Very simple vector wrapper for the use of the optimization tool uncmin, which is not capable of using...
std::vector< double > data
void MatrixMultiply(SLAPMatrix< double > A, std::vector< double > &in, std::vector< double > &out)
Matrix multiplication.
Simple interface to acml (AMD Core Math Library), to be augmented.