HCL_OpProductDomain_d is the base class for (presumably nonlinear) operators
virtual HCL_VectorSpace_d& | Domain () const Domain space access |
virtual HCL_ProductSpace_d& | ProductDomain () const Access to the domain, explicitly as a product vector space |
virtual HCL_VectorSpace_d& | Range () const Range space access |
virtual HCL_EvaluateOp_d* | Evaluate ( const HCL_Vector_d & x ) const Evaluate creates an evaluation object which knows how to compute the image and the derivative (as a linear operator with adjoint) at a point |
virtual HCL_LinearOp_d* | PartialDeriv ( int i, const HCL_Vector_d & x ) const PartialDeriv computes the partial derivative of the operator, with respect to the ith component of the independent variable |
virtual HCL_BiLinearOp_d* | SecondPartialDeriv ( int i, int j, const HCL_Vector_d & x ) const SecondPartialDeriv computes the second partial derivative of the operator, with respect to the ith and jth components of the independent variable |
int | CheckPartialDeriv ( int ind, const HCL_Vector_d &, const HCL_Vector_d &, ostream & str, int n=10, double hmin=0.1, double hmax=1.0 ) const Check partial derivatives |
int | CheckPartialDerivAdj ( int ind, const HCL_Vector_d &, const HCL_Vector_d &, ostream & str, int n=10, double hmin=0.1, double hmax=1.0 ) const CheckPartialDerivAdj calls CheckPartialDeriv to test the correctness of the partial derivative, then calls the HCL_LinearOp_d method CheckAdj to test the correctness of the adjoint |
int | CheckSecondPartialDeriv ( int i, int j, const HCL_Vector_d & x, const HCL_Vector_d & dxj, const HCL_Vector_d & dxi, ostream & str, int n=10, double hmin=0.1, double hmax=1.0 ) const Check second partial derivatives |
int | CheckSecondPartialDerivAdj ( int i, int j, const HCL_Vector_d & x, const HCL_Vector_d & dxj, const HCL_Vector_d & dxi, ostream & str, int n=10, double hmin=0.1, double hmax=1.0 ) const CheckSecondPartialDerivAdj calls CheckSecondPartialDeriv to test the correctness of the second partial derivative, then calls the HCL_BiLinearOp_d method CheckAdj to test the correctness of the various adjoints |
int | CheckSecondPartialDeriv ( int i, const HCL_Vector_d & x, const HCL_Vector_d & dxi, ostream & str, int n=10, double hmin=0.1, double hmax=1.0 ) const This version of CheckSecondPartialDeriv checks the ``pure'' (not mixed) second partial derivative |
int | CheckSecondPartialDerivAdj ( int i, const HCL_Vector_d & x, const HCL_Vector_d & dxi, ostream & str, int n=10, double hmin=0.1, double hmax=1.0 ) const This version of CheckSecondPartialDerivAdj checks the ``pure'' (not mixed) second partial derivative |
virtual ostream& | Write ( ostream & str ) const Debugging information |
virtual void | Image1 ( const HCL_Vector_d & x, HCL_Vector_d & y ) const Image1 computes the image of the operator on x, yielding y |
virtual void | PartialDerivImage ( int i, const HCL_Vector_d & x, const HCL_Vector_d & dx, HCL_Vector_d & dy ) const PartialDerivImage computes the image of the derivative on dx, yielding dy |
virtual void | PartialDerivAdjImage ( int i, const HCL_Vector_d & x, const HCL_Vector_d & dy, HCL_Vector_d & dx ) const PartialDerivAdjImage computes the image of the adjoint of the derivative on dy, yielding dx |
virtual void | PartialDerivInvImage ( int i, const HCL_Vector_d & x, const HCL_Vector_d & dy, HCL_Vector_d & dx ) const PartialDerivInvImage computes the image of the inverse of the derivative on dy, yielding dx |
virtual void | PartialDerivInvAdjImage ( int i, const HCL_Vector_d & x, const HCL_Vector_d & dx, HCL_Vector_d & dy ) const PartialDerivInvAdjImage computes the image of the inverse of the adjoint on dx, yielding dy |
virtual HCL_LinearOp_d* | PartialDeriv1 ( int i, const HCL_Vector_d & x ) const PartialDeriv1 computes a partial derivative of the operator |
virtual void | SecondPartialDerivImage ( int i, int j, const HCL_Vector_d & x, const HCL_Vector_d & dxj, const HCL_Vector_d & dxi, HCL_Vector_d & dy ) const This method computes |
virtual void | SecondPartialDerivPartialAdjImage ( int i, int j, int flag, const HCL_Vector_d & x, const HCL_Vector_d & dxij, const HCL_Vector_d & dy, HCL_Vector_d & dxji ) const This method computes (flag==1) or (flag==2) |
virtual HCL_BiLinearOp_d* | SecondPartialDeriv1 ( int i, int j, const HCL_Vector_d & x ) const SecondPartialDeriv1 computes a second partial derivative of the operator as a bilinear operator |
HCL_OpProductDomain_d is the base class for (presumably nonlinear) operators. Such an operator maps one vector space into another, say The term "ProductDomain" refers to the fact that the domain is a product space:The primary methods of this class are:
- Domain Returns a reference to the domain of the operator. This is used primarily for error-checking.
- Range Returns a reference to the range of the operator. This is used primarily for error-checking.
- Image Computes the action of the operator on a vector. Here is an example illustrating the use of Domain, Range, and Image:
void fcn( HCL_Op_d & F,HCL_Vector_d & x,HCL_Vector_d & y ) { if( x.Space() != F.Domain() || y.Space() != F.Range() ) // Error condition . . . F.Image( x,y ); // y <-- F(x) . . . }- ImageAdd Adds the image of the operator to the output vector.
- Deriv Creates the derivative of the operator at a point. This derivative is a linear operator and this method constructs it as an HCL_LinearOp_d.
- PartialDeriv creates a partial derivative of the operator as an HCL_LinearOp_d.
- SecondDeriv Creates the second derivative of the operator at a point. This derivative is a bilinear operator and this method constructs it as an HCL_BiLinearOp_d.
- SecondPartialDeriv creates a second partial derivative of the operator as an HCL_BiLinearOp_d.
- Evaluate Creates an "evaluation object" which knows the image and derivatives of the operator at a given 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. The implementor of the operator can put these intermediate calculations in the evaluation object, so that they need only be done once at each point. The implementor of optimization algorithms should respect this by using Evaluate to get the image and/or derivatives instead of using Image, Deriv, and/or SecondDeriv.
In addition to the above methods, HCL_OpProductDomain_d has a number of protected virtual functions that allow the user to avoid writing a distinct evaluation class if desired. If these methods, which include Image1, PartialDerivImage, etc. (or PartialDeriv1), SecondPartialDerivImage, etc. (or SecondPartialDeriv1), are over-ridden in a derived class, then the default Evaluate method can be used, which creates an instance of HCL_OpPDDefaultEval_d.
Defining operators is expected to be one of the main activities of users of HCL, since the many optimization problems involve operators in the definition of the objective function or constraints. As the last paragraph suggests, there are a number of ways to implement operators. These are described in detail in the report
"Implementing operators in HCL", Technical Report 99-22, Department of Computational and Applied Mathematics, Rice University, Houston, TX 77251-1892.
A forthcoming report, "Implementing HCL functionals and operators on product spaces", will provide similar details about implementing operators on product spaces. This report should be available from the same source in early 2000.
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