RVL::LinearOp< Scalar > Class Template Reference

Principal RVL interface for Linear Operators. More...

#include <linop_base.hh>

Inheritance diagram for RVL::LinearOp< Scalar >:

RVL::Operator< Scalar > RVL::Writeable RVL::AdjLinearOp< Scalar > RVL::BlockLinearOp< Scalar > RVL::BlockLinearOpBlock< Scalar > RVL::ColumnLinearOp< Scalar > RVL::CompLinearOp< Scalar > RVL::DerivEvaluation< Scalar > RVL::LinCombLinearOp< Scalar > RVL::LinearBilinearOp< Scalar > RVL::LinearOpFO< Scalar > RVL::LinearOpWithInverse< Scalar > RVL::LinearRestrictOp< Scalar > RVL::NormalLinearOp< Scalar > RVL::PartialDerivEvaluation< Scalar > RVL::ScaleOpFwd< Scalar > RVL::ScaleOpInv< Scalar > List of all members.

Public Member Functions

 LinearOp ()
 LinearOp (const LinearOp< Scalar > &Op)
virtual ~LinearOp ()
void applyOp (Vector< Scalar > const &x, Vector< Scalar > &y) const
 This function assigns to $ y $ the value $ A x$.
void applyAdjOp (Vector< Scalar > const &x, Vector< Scalar > &y) const
 This function assigns to $ y $ the value $ A^* x$.
virtual void applyPlusOp (Vector< Scalar > const &x, Vector< Scalar > &y) const
 Apply and increment, like axpy: $ y = \alpha A x + y $.
virtual void applyPlusAdjOp (Vector< Scalar > const &x, Vector< Scalar > &y) const
 Apply and increment, like axpy: $ y = \alpha A^T x + y $.
virtual void applyOp (Scalar alpha, Vector< Scalar > const &x, Scalar beta, Vector< Scalar > &y) const
 Apply and linear combination: $ y = \alpha A x + \beta y $.
virtual void applyAdjOp (Scalar alpha, Vector< Scalar > const &x, Scalar beta, Vector< Scalar > &y) const
 Adjoint apply and linear combination: $ y = \alpha A^* x + \beta y$.

Protected Member Functions

void * operator new (size_t size)
 operator new - not available to general public, but available to children who will use it to define a clone method, for example
virtual void applyAdj (const Vector< Scalar > &x, Vector< Scalar > &y) const =0
 Evaluation of adjoint linear operator on constant input vector x, output written on mutable vector y.
void applyDeriv (const Vector< Scalar > &, const Vector< Scalar > &dx, Vector< Scalar > &dy) const
 implemented derivative method - a linear operator is its own derivative.
void applyAdjDeriv (const Vector< Scalar > &, const Vector< Scalar > &dy, Vector< Scalar > &dx) const
 similar to applyDeriv.
void applyDeriv2 (const Vector< Scalar > &, const Vector< Scalar > &, const Vector< Scalar > &, Vector< Scalar > &dy) const
 implemented deriv2 method - deriv2 of a linear operator is zero.
void applyAdjDeriv2 (const Vector< Scalar > &, const Vector< Scalar > &, const Vector< Scalar > &, Vector< Scalar > &dx1) const
 similar to applyDeriv

Detailed Description

template<class Scalar>
class RVL::LinearOp< Scalar >

Principal RVL interface for Linear Operators.

Since linear operators in Hilbert space have well-defined adjoints, this class really defines a pair of operators, adjoint to each other.

The abstract public interface consists of

Definition at line 123 of file linop_base.hh.


Constructor & Destructor Documentation

template<class Scalar>
RVL::LinearOp< Scalar >::LinearOp (  ) 

Definition at line 182 of file linop_base.hh.

template<class Scalar>
RVL::LinearOp< Scalar >::LinearOp ( const LinearOp< Scalar > &  Op  ) 

Definition at line 183 of file linop_base.hh.

template<class Scalar>
virtual RVL::LinearOp< Scalar >::~LinearOp (  )  [virtual]

Definition at line 184 of file linop_base.hh.


Member Function Documentation

template<class Scalar>
void* RVL::LinearOp< Scalar >::operator new ( size_t  size  )  [protected]

operator new - not available to general public, but available to children who will use it to define a clone method, for example

Version 1.0: user control, for the bold. "There are old sailors, and there are bold sailors, but there are no old, bold sailors."

Reimplemented from RVL::Operator< Scalar >.

Definition at line 137 of file linop_base.hh.

template<class Scalar>
virtual void RVL::LinearOp< Scalar >::applyAdj ( const Vector< Scalar > &  x,
Vector< Scalar > &  y 
) const [protected, pure virtual]

Evaluation of adjoint linear operator on constant input vector x, output written on mutable vector y.

Accessed only through public applyOp method, so creator of subclasses may assume that input is in domain, output is in range

Implemented in RVL::BlockLinearOp< Scalar >, RVL::BlockLinearOpBlock< Scalar >, RVL::ColumnLinearOp< Scalar >, RVL::CompLinearOp< Scalar >, RVL::LinearOpFO< Scalar >, RVL::AdjLinearOp< Scalar >, RVL::NormalLinearOp< Scalar >, RVL::ScaleOpFwd< Scalar >, RVL::ScaleOpInv< Scalar >, RVL::LinCombLinearOp< Scalar >, RVL::LinearBilinearOp< Scalar >, RVL::LinearRestrictOp< Scalar >, RVL::DerivEvaluation< Scalar >, and RVL::PartialDerivEvaluation< Scalar >.

Referenced by RVL::LinearOp< Scalar >::applyAdjDeriv(), and RVL::LinearOp< Scalar >::applyAdjOp().

template<class Scalar>
void RVL::LinearOp< Scalar >::applyDeriv ( const Vector< Scalar > &  ,
const Vector< Scalar > &  dx,
Vector< Scalar > &  dy 
) const [protected, virtual]

implemented derivative method - a linear operator is its own derivative.

First arg: position, of which result is independent.

Implements RVL::Operator< Scalar >.

Definition at line 156 of file linop_base.hh.

References RVL::Operator< Scalar >::apply().

template<class Scalar>
void RVL::LinearOp< Scalar >::applyAdjDeriv ( const Vector< Scalar > &  ,
const Vector< Scalar > &  dy,
Vector< Scalar > &  dx 
) const [protected, virtual]

similar to applyDeriv.

First arg: position, of which result is independent.

Implements RVL::Operator< Scalar >.

Definition at line 161 of file linop_base.hh.

References RVL::LinearOp< Scalar >::applyAdj().

template<class Scalar>
void RVL::LinearOp< Scalar >::applyDeriv2 ( const Vector< Scalar > &  ,
const Vector< Scalar > &  ,
const Vector< Scalar > &  ,
Vector< Scalar > &  dy 
) const [protected, virtual]

implemented deriv2 method - deriv2 of a linear operator is zero.

First three args: position, two perturbation vectors in domain - result is independent of these.

Reimplemented from RVL::Operator< Scalar >.

Definition at line 169 of file linop_base.hh.

References RVL::Vector< Scalar >::zero().

template<class Scalar>
void RVL::LinearOp< Scalar >::applyAdjDeriv2 ( const Vector< Scalar > &  ,
const Vector< Scalar > &  ,
const Vector< Scalar > &  ,
Vector< Scalar > &  dx1 
) const [protected, virtual]

similar to applyDeriv

Reimplemented from RVL::Operator< Scalar >.

Definition at line 175 of file linop_base.hh.

References RVL::Vector< Scalar >::zero().

template<class Scalar>
void RVL::LinearOp< Scalar >::applyOp ( Vector< Scalar > const &  x,
Vector< Scalar > &  y 
) const

This function assigns to $ y $ the value $ A x$.

Output vector y may not be aliased with input vector x. Applies standard sanity test, then delegates to protected apply method.

Definition at line 193 of file linop_base.hh.

References RVL::Operator< Scalar >::apply(), RVL::Operator< Scalar >::getDomain(), RVL::Operator< Scalar >::getRange(), RVL::Vector< Scalar >::getSpace(), and RVL::Writeable::write().

Referenced by RVL::AdjointTest(), RVL::CompLinearOp< Scalar >::apply(), RVL::ScaleOpFwd< Scalar >::applyAdj(), RVL::NormalLinearOp< Scalar >::applyAdj(), RVL::LinearOp< Scalar >::applyOp(), and RVL::LinearOp< Scalar >::applyPlusOp().

template<class Scalar>
void RVL::LinearOp< Scalar >::applyAdjOp ( Vector< Scalar > const &  x,
Vector< Scalar > &  y 
) const

This function assigns to $ y $ the value $ A^* x$.

Output vector y may not be aliased with input vector x. Applies standard sanity test, then delegates to protected applyAdj method.

Definition at line 252 of file linop_base.hh.

References RVL::LinearOp< Scalar >::applyAdj(), RVL::Operator< Scalar >::getDomain(), RVL::Operator< Scalar >::getRange(), RVL::Vector< Scalar >::getSpace(), and RVL::Writeable::write().

Referenced by RVL::AdjointTest(), RVL::CompLinearOp< Scalar >::applyAdj(), RVL::LinearOp< Scalar >::applyAdjOp(), and RVL::LinearOp< Scalar >::applyPlusAdjOp().

template<class Scalar>
virtual void RVL::LinearOp< Scalar >::applyPlusOp ( Vector< Scalar > const &  x,
Vector< Scalar > &  y 
) const [virtual]

Apply and increment, like axpy: $ y = \alpha A x + y $.

Obvious default implementation provided for convenience, can be overridden to fuse loops for efficiency, if desired. Output vector y may not be aliased with input vector x.

Definition at line 310 of file linop_base.hh.

References RVL::LinearOp< Scalar >::applyOp(), and RVL::Vector< Scalar >::linComb().

template<class Scalar>
virtual void RVL::LinearOp< Scalar >::applyPlusAdjOp ( Vector< Scalar > const &  x,
Vector< Scalar > &  y 
) const [virtual]

Apply and increment, like axpy: $ y = \alpha A^T x + y $.

Obvious default implementation provided for convenience, can be overridden to fuse loops for efficiency, if desired. Output vector y may not be aliased with input vector x.

Definition at line 328 of file linop_base.hh.

References RVL::LinearOp< Scalar >::applyAdjOp(), and RVL::Vector< Scalar >::linComb().

template<class Scalar>
virtual void RVL::LinearOp< Scalar >::applyOp ( Scalar  alpha,
Vector< Scalar > const &  x,
Scalar  beta,
Vector< Scalar > &  y 
) const [virtual]

Apply and linear combination: $ y = \alpha A x + \beta y $.

Obvious default implementation provided for convenience, can be overridden to fuse loops for efficiency, if desired. Output vector y may not be aliased with input vector x.

Definition at line 346 of file linop_base.hh.

References RVL::LinearOp< Scalar >::applyOp(), and RVL::Vector< Scalar >::linComb().

template<class Scalar>
virtual void RVL::LinearOp< Scalar >::applyAdjOp ( Scalar  alpha,
Vector< Scalar > const &  x,
Scalar  beta,
Vector< Scalar > &  y 
) const [virtual]

Adjoint apply and linear combination: $ y = \alpha A^* x + \beta y$.

Obvious default implementation provided for convenience, can be overridden to fuse loops for efficiency, if desired. Output vector y may not be aliased with input vector x.

Definition at line 365 of file linop_base.hh.

References RVL::LinearOp< Scalar >::applyAdjOp(), and RVL::Vector< Scalar >::linComb().


The documentation for this class was generated from the following file:
Generated on 5 Jan 2017 for RVL by  doxygen 1.4.7