HCL_BlockLinearOp_d implements a 2D array of linear operators acting on a product vector space
HCL_BlockLinearOp_d ( HCL_ProductSpace_d * d, HCL_ProductSpace_d * r ) Usual constructor; needs the domain and range spaces | |
HCL_BlockLinearOp_d ( HCL_ProductSpace_d * d, HCL_VectorSpace_d * r, int flag ) Special constructor for the case of a ``row'' or ``column'' operator | |
int | Initialized () const Initialized is a boolean method indicating whether all blocks in the operator have been initialized |
int | IsSet ( int i, int j ) const IsSet is a boolean indicated whether the (i,j) block has been initialized |
virtual HCL_VectorSpace_d& | Domain () const Domain space access. Returns a reference to the domain. |
virtual HCL_VectorSpace_d& | Range () const Range space access. Returns a reference to the range. |
HCL_LinearOp_d& | operator) ( int i, int j ) const The () operator provides access to the individual operators. |
int | Rows () const Rows returns the number of rows in the array. |
int | Cols () const Cols returns the number of columns in the array. |
virtual void | Image ( const HCL_Vector_d & x, HCL_Vector_d & y ) const Image computes the action of the operator on x, giving y. |
virtual void | AdjImage ( const HCL_Vector_d & x, HCL_Vector_d & y ) const AdjImage computes the action of the adjoint on y, giving x. |
virtual void | InvImage (const HCL_Vector_d & y, HCL_Vector_d & x) const InvImage computes the action of the inverse on y, giving x |
virtual void | InvAdjImage (const HCL_Vector_d & x, HCL_Vector_d & y) const InvAdjImage computes the action of the inverse adjoint on x, giving y |
virtual void | ImageAdd (const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const ImageAdd implements |
virtual void | AdjImageAdd (const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const AdjImageAdd implements |
virtual void | ImageAdd (const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const ImageAdd implements |
virtual void | AdjImageAdd (const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const AdjImageAdd implements |
void | SetNext ( HCL_LinearOp_d * L ) SetNext sets the "next" block to L; when this method is used, the blocks must be specified by rows |
void | Set ( int i, int j, HCL_LinearOp_d * L ) Set sets the (i,j) block to L |
virtual ostream& | Write ( ostream & str ) const Write invokes the Write method for the blocks. |
HCL_BlockLinearOp_d implements a 2D array of linear operators acting on a product vector space. For example, if the array is 2x2, the operator is of the form In general, HCL_BlockLinearOp_d represents an operator defined byIn order to construct a general block operator, one must specify the domain and range, which are product spaces represented by instances of HCL_ProductSpace_d. The blocks are then specified by rows using the SetNext method, or in any order using the Set method. Here is an example of creating a block operator using the SetNext method. In this example, the operator is , that is, the domain space has two factors, while the range space has three.
// X and Y are instances of HCL_ProductSpace_d with 2 and 3 factors, // respectively. The operator L will map X into Y. HCL_BlockLinearOp_d L( &X,&Y ); // L11, L12, L21, L22, L31, L32 are instances of HCL_LinearOp_d with the // appropriate domains and ranges. For example, L21 must map X(1) into Y(2). // Note that, when using the SetNext method, the blocks are specified by // rows. L.SetNext( &L11 ); L.SetNext( &L12 ); L.SetNext( &L21 ); L.SetNext( &L22 ); L.SetNext( &L31 ); L.SetNext( &L32 ); // L is now ready to use.The same thing can be accomplished using the Set method:// X and Y are instances of HCL_ProductSpace_d with 2 and 3 factors, // respectively. The operator L will map X into Y. HCL_BlockLinearOp_d L( &X,&Y ); // L11, L12, L21, L22, L31, L32 are instances of HCL_LinearOp_d with the // appropriate domains and ranges. For example, L21 must map X(1) into Y(2). // Note that, when using the Set method, the blocks can be specified in // any order. L.Set( 1,1,&L11 ); L.Set( 2,1,&L21 ); L.Set( 3,2,&L32 ); L.Set( 2,2,&L22 ); L.Set( 3,1,&L31 ); L.Set( 1,2,&L12 ); // L is now ready to use.It is not intended that SetNext and Set both be used in initializing a single operator (although they should work---SetNext sets the first unitialized block, scanning across the rows).It is also possible to use HCL_BlockLinearOp_d to represent a "row" operator or a "column" operator. A row operator maps a product space into an ordinary vector space, while a column operator maps an ordinary vector space into a product space. This option is provided so that users of the class do not need to construct a product space with one factor to represent an ordinary vector space. To construct a row or column operator, pass the constructor the product space, the ordinary vector space, and either the ROWOP or the COLUMNOP flag (these flags are defined in the header file).
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