class HCL_LeastSquaresFcnlGN_d : public HCL_Functional_d

HCL_LeastSquaresFcnlGN creates least squares objective functions from operators and data

Inheritance:


Public Methods

HCL_LeastSquaresFcnlGN_d (HCL_LinearOp_d * Operator, HCL_Vector_d * Data, double PenaltyParameter = 0.0, HCL_LinearOp_d * RegularizingOperator = NULL, HCL_Vector_d * ModelPrior = NULL)
Usual constructor for linear operator input
HCL_LeastSquaresFcnlGN_d (HCL_Op_d * Operator, HCL_Vector_d * Data, double PenaltyParameter = 0.0, HCL_LinearOp_d * RegularizingOperator = NULL, HCL_Vector_d * ModelPrior = NULL)
Usual constructor for nonlinear operator input
virtual HCL_VectorSpace_d& Domain () const
Domain space access
virtual HCL_EvaluateFunctional_d* Evaluate ( const HCL_Vector_d & x ) const
Evaluate creates an "evaluation" object, which knows how to compute the function value, gradient,and Hessian at the given x
virtual ostream& Write ( ostream & str ) const
Write prints out a description of the functional.

Inherited from HCL_Functional_d:

Public Methods

virtual double MaxStep( const HCL_Vector_d & x, const HCL_Vector_d & dir) const
virtual double Value( const HCL_Vector_d & x ) const
virtual void Gradient( const HCL_Vector_d & x, HCL_Vector_d & g ) const
virtual HCL_LinearOp_d* Hessian( const HCL_Vector_d & x ) const
void Scan( const HCL_Vector_d & x, const HCL_Vector_d & dx, int N, double hmin, double hmax, char * fname = NULL )
int CheckGrad( const HCL_Vector_d & x, const HCL_Vector_d & y, ostream & str, int n=10, double hmin=0.1, double hmax=1.0 )
int CheckHess( const HCL_Vector_d &, const HCL_Vector_d &, ostream & str, int n=10, double hmin=0.1, double hmax=1.0 )

Protected Methods

virtual double Value1( const HCL_Vector_d & x ) const
virtual void Gradient1( const HCL_Vector_d & x, HCL_Vector_d & y ) const
virtual void HessianImage( const HCL_Vector_d & x, const HCL_Vector_d & dx, HCL_Vector_d & dy ) const
virtual void HessianInvImage( const HCL_Vector_d & x, const HCL_Vector_d & dy, HCL_Vector_d & dx ) const
virtual HCL_LinearOp_d* Hessian1( const HCL_Vector_d & x ) const

Inherited from HCL_Base:

Public Methods

void IncCount() const
void DecCount() const
int Count() const

Documentation

HCL_LeastSquaresFcnlGN creates least squares objective functions from operators and data. This is a so called bridge class, i.e. it exists merely to make objects of some class behave like objects of another class. In this case, the input objects are a linear or nonlinear operator (an instance of HCL_LinearOp_d or HCL_Op_d) and a data vector d. The interface to these objects constructed by the class is the least squares functional its gradient and the Gauss-Newton approximation to its Hessian operator expressed as an HCL_Functional_d, an input class for optimization methods.

So this class can be used to solve linear least squares problems straight from the implementation of the underlying operator, without constructing by hand the least squares function, as follows:

If you have a linear operator L (an instance of HCL_LinearOp_d), and a data vector d (an instance of HCL_Vector), construct the least squares functional as follows:

  HCL_LeastSquaresFcnlGN_d F(L, d);
  

whereas if you have a nonlinear operator N instead (an instance of HCL_Op_d), use

  HCL_LeastSquaresFcnlGN_d F(N, d);
  

That is, the constructors look the same---the code does appropriate things according to the types of the arguments submitted to the constructor.

The HCL_Functional_d F so constructed is suitable for submission to an optimization algorithm using second derivative information, such as Steihaug-Toint (HCL_UMinTR_d), or to any of the algorithms using first derivative information, such as BFGS (HCL_UMin_lbfgs_d) or nonlinear conjugate gradients (HCL_UMinNLCG_d).

Many least squares problems of practical interest are ill-posed, and must be regularized to yield stable solutions. This class offers a simple interface for defining a quadratic penalty term, to create a penalized least squares function from three optional parameters to the constructor:

These parameters appear in the order given here, and default to natural values. If none of them appear, no regularization takes place and the constructor builds the function previously described. Otherwise several special cases are implemented efficiently:

HCL_LeastSquaresFcnlGN_d(HCL_LinearOp_d * Operator, HCL_Vector_d * Data, double PenaltyParameter = 0.0, HCL_LinearOp_d * RegularizingOperator = NULL, HCL_Vector_d * ModelPrior = NULL)
Usual constructor for linear operator input. The constructor needs pointers to the (linear) operator and data. Optionally, a regularization weight, regularization operator, and target model can be given. See the class documentation for the behavior of the class using regularization.

HCL_LeastSquaresFcnlGN_d(HCL_Op_d * Operator, HCL_Vector_d * Data, double PenaltyParameter = 0.0, HCL_LinearOp_d * RegularizingOperator = NULL, HCL_Vector_d * ModelPrior = NULL)
Usual constructor for nonlinear operator input. The constructor needs pointers to the (nonlinear) operator and data. Optionally, a regularization weight, regularization operator, and target model can be given. See the class documentation for the behavior of the class using regularization.

virtual HCL_VectorSpace_d& Domain() const
Domain space access. Returns a reference to the vector space defining the domain of the functional.

virtual HCL_EvaluateFunctional_d* Evaluate( const HCL_Vector_d & x ) const
Evaluate creates an "evaluation" object, which knows how to compute the function value, gradient,and Hessian at the given x

virtual ostream& Write( ostream & str ) const
Write prints out a description of the functional.


This class has no child classes.

alphabetic index hierarchy of classes


this page has been generated automatically by doc++

(c)opyright by Malte Zöckler, Roland Wunderling
contact: doc++@zib.de