class HCL_LeastSquaresFcnlGrad_d : public HCL_FunctionalGrad_d

HCL_LeastSquaresFcnlGrad creates least squares objective functions from operators and data

Inheritance:


Public Methods

virtual HCL_LinearOpAdj_d* DerivAdj ()
DerivAdj computes the derivative, as a linear operator with adjoint, of the operator
virtual HCL_VectorSpace_d& Domain ()
Domain space access.
virtual HCL_VectorSpace_d& Domain ()
Domain space access.
virtual HCL_VectorSpace_d& Domain ()
Domain space access.
virtual HCL_VectorSpace_d& Domain ()
Domain space access.
virtual HCL_VectorSpace_d& Domain1 ()
Access to the domain of the first argument
virtual HCL_VectorSpace_d& Domain2 ()
Access to the domain of the second argument
virtual HCL_EvaluateOpDeriv2Adj_d* EvaluateDeriv2Adj ( const HCL_Vector_d & x )
EvaluateDeriv2Adj creates and evaluation object which knows how to compute the image, first derivative, and second derivative, along with all relevant adjoints, at a point
HCL_EvalLOpAdj_d ( HCL_LinearOpAdj_d * LL, const HCL_Vector_d & xx )
Usual constructor.
HCL_LeastSquaresFcnlGrad_d (HCL_LinearOpAdj_d & Operator, HCL_Vector_d & Data)
Usual constructor for Linear Operator input.
HCL_LeastSquaresFcnlGrad_d (HCL_OpDerivAdj_d & Operator, HCL_Vector_d & Data)
Usual constructor for Nonlinear Operator input.
HCL_LOp_d ( const HCL_LinearOp_d & LL )
Usual constructor, reference version.
HCL_LOp_d ( const HCL_LinearOp_d * LL )
Usual constructor, pointer version.
HCL_EvalLSFcnlProductDomainHess_d ( const HCL_ProductVector_d & Input, HCL_OpProductDomainDerivAdj_d * Operator, HCL_Vector_d * Data)
Usual constructor.
virtual HCL_ProductVectorSpace_d& ProductDomain ()
Access to the domain, explicitly as a product vector space
virtual double Value ()
Value computes the value of the functional.
virtual void PartialGradient ( HCL_Vector_d & g, int i )
PartialGradient computes the component of the gradient corresponding to the ith component of the independent variable
virtual HCL_LinearOp_d* Hessian ()
Hessian computes the Hessian of the function
virtual HCL_LinearOpAdj_d* HessianBlock ( int i, int j )
HessianBlock creates the (i,j) block of the Hessian, as a linear operator with adjoint
virtual ostream& Write ( ostream & str )
Write invokes the Write method for the underlying objects (operator and data)
HCL_LeastSquaresFcnlProductDomainHess_d ( HCL_OpProductDomainDerivAdj_d * Operator, HCL_Vector_d * Data)
Usual constructor.
virtual HCL_VectorSpace_d& Domain ()
Domain space access
virtual HCL_ProductVectorSpace_d& ProductDomain ()
Access to the domain, explicitly as a product vector space
virtual ostream& Write ( ostream & str )
Write invokes the Write methods of the operator and data.
HCL_LOpAdj_d ( const HCL_LinearOpAdj_d * LL )
Usual constructor, pointer version.
HCL_LOpAdj_d ( const HCL_LinearOpAdj_d & LL )
Usual constructor, reference version.
HCL_ZeroBiLinearOp_d ( const HCL_VectorSpace_d * d1, const HCL_VectorSpace_d * d2, const HCL_VectorSpace_d * r )
Usual constructor.
virtual void Image ( HCL_Vector_d & y )
Image computes the image of the operator.
virtual void Image ( const HCL_Vector_d & x, HCL_Vector_d & y )
Image computes the image of x under the operator, giving y.
virtual void Image ( const HCL_Vector_d & x, const HCL_Vector_d & y, HCL_Vector_d & z )
Image computes the action of the operator on the pair (x,y), giving z.
virtual HCL_LinearOpAdj_d* Op1Adj ( const HCL_Vector_d & x )
Access to Op1 as a linear operator with adjoint.
virtual HCL_LinearOpAdj_d* Op2Adj ( const HCL_Vector_d & y )
Access to Op2 as a linear operator with adjoint.
virtual HCL_LinearOpAdj_d* Op3Adj ( const HCL_Vector_d & z )
Access to the "partial adjoint" of the bilinear operator
virtual HCL_VectorSpace_d& Range ()
Range space access.
virtual HCL_VectorSpace_d& Range ()
Range space access.
virtual HCL_VectorSpace_d& Range ()
Range space access.
virtual HCL_VectorSpace_d& Range ()
Access to the range
virtual HCL_BiLinearOpAdj_d* SecondDerivAdj ()
SecondDerivAdj computes the second derivative of the operator
virtual ostream& Write ( ostream & str )
Debugging information.
virtual ostream& Write ( ostream & str )
Debugging information
virtual ostream& Write ( ostream & str )
Debugging information.
virtual ostream& Write ( ostream & str )
Debugging information.

Inherited from HCL_FunctionalGrad_d:

Public Methods

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 )
virtual HCL_EvaluateFunctionalGrad_d* EvaluateGrad( const HCL_Vector_d & x )
virtual void Gradient( const HCL_Vector_d & x, HCL_Vector_d & g )
virtual double Value( const HCL_Vector_d & x )

Inherited from HCL_Functional_d:

Public Methods

virtual double MaxStep( const HCL_Vector_d & x, const HCL_Vector_d &dir)
void Scan( const HCL_Vector_d & x, const HCL_Vector_d & dx, int N, double hmin, double hmax, char * fname = NULL )

Inherited from HCL_Base:

Public Methods

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

Private Fields

int ReferenceCount

Documentation

HCL_LeastSquaresFcnlGrad 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 an input or nonlinear operator $A$ with both derivative image and adjoint image methods (an instance of HCL_LinearOpAdj or HCL_OpDerivAdj) and a data vector $d$. The interface to these objects constructed by the class is the least squares functional and its gradient expressed as an HCL_FunctionalGrad, the input class for various 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_LinearOpAdj), and a data vector d (an instance of HCL_Vector), construct the least squares functional as follows:

  HCL_LeastSquaresFcnlGrad_d F(L, d);
  

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

  HCL_LeastSquaresFcnlGrad_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_FunctionalGrad_d F so constructed is now suitable for submission to an optimization algorithm based on first derivative information, such as BFGS (HCL_UMin_lbfgs) or nonlinear conjugate gradients (HCL_UMinNLCG).

HCL_LOp_d( const HCL_LinearOp_d * LL )
Usual constructor, pointer version.

HCL_EvalLSFcnlProductDomainHess_d( const HCL_ProductVector_d & Input, HCL_OpProductDomainDerivAdj_d * Operator, HCL_Vector_d * Data)
Usual constructor.

virtual HCL_ProductVectorSpace_d& ProductDomain()
Access to the domain, explicitly as a product vector space

virtual double Value()
Value computes the value of the functional.

virtual void PartialGradient( HCL_Vector_d & g, int i )
PartialGradient computes the component of the gradient corresponding to the ith component of the independent variable

virtual HCL_LinearOp_d* Hessian()
Hessian computes the Hessian of the function. This method is re-defined in this class because, when the entire Hessian is desired, it can be provided more efficiently as the composition of the derivative and its adjoint, rather than as a block operator.

virtual HCL_LinearOpAdj_d* HessianBlock( int i, int j )
HessianBlock creates the (i,j) block of the Hessian, as a linear operator with adjoint

virtual ostream& Write( ostream & str )
Write invokes the Write method for the underlying objects (operator and data)

HCL_LeastSquaresFcnlProductDomainHess_d( HCL_OpProductDomainDerivAdj_d * Operator, HCL_Vector_d * Data)
Usual constructor.

virtual HCL_VectorSpace_d& Domain()
Domain space access

virtual HCL_ProductVectorSpace_d& ProductDomain()
Access to the domain, explicitly as a product vector space

virtual ostream& Write( ostream & str )
Write invokes the Write methods of the operator and data.

HCL_LOp_d( const HCL_LinearOp_d & LL )
Usual constructor, reference version.

virtual HCL_VectorSpace_d& Domain()
Domain space access.

virtual HCL_VectorSpace_d& Range()
Range space access.

virtual void Image( const HCL_Vector_d & x, HCL_Vector_d & y )
Image computes the image of x under the operator, giving y.

virtual ostream& Write( ostream & str )
Debugging information.

HCL_ZeroBiLinearOp_d( const HCL_VectorSpace_d * d1, const HCL_VectorSpace_d * d2, const HCL_VectorSpace_d * r )
Usual constructor.

virtual HCL_VectorSpace_d& Domain1()
Access to the domain of the first argument. Returns a reference to a HCL_VectorSpace_d.

virtual HCL_VectorSpace_d& Domain2()
Access to the domain of the second argument. Returns a reference to a HCL_VectorSpace_d.

virtual HCL_VectorSpace_d& Range()
Access to the range. Returns a reference to a HCL_VectorSpace_d.

virtual void Image( const HCL_Vector_d & x, const HCL_Vector_d & y, HCL_Vector_d & z )
Image computes the action of the operator on the pair (x,y), giving z.

virtual HCL_LinearOpAdj_d* Op1Adj( const HCL_Vector_d & x )
Access to Op1 as a linear operator with adjoint.

virtual HCL_LinearOpAdj_d* Op2Adj( const HCL_Vector_d & y )
Access to Op2 as a linear operator with adjoint.

virtual HCL_LinearOpAdj_d* Op3Adj( const HCL_Vector_d & z )
Access to the "partial adjoint" of the bilinear operator. Assume B:XxY --> Z is the bilinear operator. Then Op3Adj returns the operator x |---> (B(x))'z. Its adjoint is the operator y |---> (B(.)y)'z

virtual ostream& Write( ostream & str )
Debugging information

HCL_EvalLOpAdj_d( HCL_LinearOpAdj_d * LL, const HCL_Vector_d & xx )
Usual constructor.

virtual HCL_VectorSpace_d& Domain()
Domain space access.

virtual HCL_VectorSpace_d& Range()
Range space access.

virtual void Image( HCL_Vector_d & y )
Image computes the image of the operator.

virtual HCL_LinearOpAdj_d* DerivAdj()
DerivAdj computes the derivative, as a linear operator with adjoint, of the operator. Note that this method constructs a HCL_LinearOp_d, which the calling program is responsible for deleting with HCL_delete.

virtual HCL_BiLinearOpAdj_d* SecondDerivAdj()
SecondDerivAdj computes the second derivative of the operator. The second derivative is a bilinear operator which knows how to compute all relevant adjoints.

virtual ostream& Write( ostream & str )
Debugging information.

HCL_LOpAdj_d( const HCL_LinearOpAdj_d * LL )
Usual constructor, pointer version.

HCL_LOpAdj_d( const HCL_LinearOpAdj_d & LL )
Usual constructor, reference version.

virtual HCL_VectorSpace_d& Domain()
Domain space access.

virtual HCL_VectorSpace_d& Range()
Range space access.

virtual HCL_EvaluateOpDeriv2Adj_d* EvaluateDeriv2Adj( const HCL_Vector_d & x )
EvaluateDeriv2Adj creates and evaluation object which knows how to compute the image, first derivative, and second derivative, along with all relevant adjoints, at a point. The purpose of the evaluation object is to accommodate the common situation in which the computation of the image and derivatives involve some common intermediate calculations.

virtual ostream& Write( ostream & str )
Debugging information.

HCL_LeastSquaresFcnlGrad_d(HCL_LinearOpAdj_d & Operator, HCL_Vector_d & Data)
Usual constructor for Linear Operator input.

HCL_LeastSquaresFcnlGrad_d(HCL_OpDerivAdj_d & Operator, HCL_Vector_d & Data)
Usual constructor for Nonlinear Operator input.

virtual HCL_VectorSpace_d& Domain()
Domain space access.


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