class  HCL_OpProductDomain_d : public HCL_Op_d HCL_OpProductDomain_d is the base class for (presumably nonlinear) operators
|   | Domain () const  Domain space access  | 
|   | ProductDomain () const  Access to the domain, explicitly as a product vector space  | 
|   | Range () const  Range space access  | 
|   | 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  | 
|   | 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  | 
|   | 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  | 
|   | 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  | 
|   | 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  | 
|   | 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  | 
|   | 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  | 
|   | 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  | 
|   | 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  | 
|   | Write ( ostream & str ) const  Debugging information  | 
|   | Image1 ( const HCL_Vector_d & x, HCL_Vector_d & y ) const  Image1 computes the image of the operator on x, yielding y  | 
|   | 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  | 
|   | 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  | 
|   | 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  | 
|   | 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  | 
|   | PartialDeriv1 ( int i, const HCL_Vector_d & x ) const  PartialDeriv1 computes a partial derivative of the operator  | 
|   | 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  
 | 
|   | 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)
 | 
|   | 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, sayThe 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.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 virtual  void  PartialDerivImage( int i, const HCL_Vector_d & x, const HCL_Vector_d & dx, HCL_Vector_d & dy ) const 
 virtual  void  PartialDerivAdjImage( int i, const HCL_Vector_d & x, const HCL_Vector_d & dy, HCL_Vector_d & dx ) const 
 virtual  void  PartialDerivInvImage( int i, const HCL_Vector_d & x, const HCL_Vector_d & dy, HCL_Vector_d & dx ) const 
 virtual  void  PartialDerivInvAdjImage( int i, const HCL_Vector_d & x, const HCL_Vector_d & dx, HCL_Vector_d & dy ) const 
 virtual  HCL_LinearOp_d*  PartialDeriv1( int i, const HCL_Vector_d & x ) const 
 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 
. 
If this method and SecondPartialDerivPartialAdjImage are
implemented in a derived class, then HCL_OpPDDefaultEval_d
will be able to compute second partial derivatives.  
 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 
(flag==1) or 
(flag==2)
 virtual  HCL_BiLinearOp_d*  SecondPartialDeriv1( int i, int j, const HCL_Vector_d & x ) const 
 virtual  HCL_VectorSpace_d&  Domain() const 
 virtual  HCL_ProductSpace_d&  ProductDomain() const 
 virtual  HCL_VectorSpace_d&  Range() const 
 virtual  HCL_EvaluateOp_d*  Evaluate( const HCL_Vector_d & x ) const 
 virtual  HCL_LinearOp_d*  PartialDeriv( int i, const HCL_Vector_d & x ) const 
 virtual  HCL_BiLinearOp_d*  SecondPartialDeriv( int i, int j, const HCL_Vector_d & x ) const 
 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 
 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 
 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 
 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 
 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 
 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 
 virtual  ostream&  Write( ostream & str ) const 
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