AbstractLinAlgPack::MatrixSymNonsing Class Reference

Abstract base class for all polymorphic symmetrix nonsingular matrices that can be used to solve for linear systems relatively efficently. More...

#include <AbstractLinAlgPack_MatrixSymNonsing.hpp>

Inheritance diagram for AbstractLinAlgPack::MatrixSymNonsing:

Inheritance graph
[legend]
List of all members.

Public types

enum  EMatrixDummyArg
  More...

Clone

virtual mat_msns_mut_ptr_t clone_msns ()
 Clone the non-const matrix object (if supported).
virtual mat_msns_ptr_t clone_msns () const
 Clone the const matrix object (if supported).
mat_mns_mut_ptr_t clone_mns ()
 Returns this->clone_msns().
mat_mns_ptr_t clone_mns () const
 Returns this->clone_msns().

Level-3

virtual void M_StMtInvMtM (MatrixSymOp *symwo_lhs, value_type alpha, const MatrixOp &mwo, BLAS_Cpp::Transp mwo_trans, EMatrixDummyArg) const
 symwo_lhs = alpha * op(mwo) * inv(M) * op(mwo)'.

Friends

void M_StMtInvMtM (MatrixSymOp *sym_gms_lhs, value_type alpha, const MatrixOp &mwo, BLAS_Cpp::Transp mwo_trans, const MatrixSymNonsing &mswof, EMatrixDummyArg mwo_rhs)
 

Detailed Description

Abstract base class for all polymorphic symmetrix nonsingular matrices that can be used to solve for linear systems relatively efficently.

This interface defines a single addition method to those found in MatrixNonsing:

symwo_lhs = alpha * op(mwo) * inv(M) * op(mwo)'

The reason that this method could not be defined in the MatrixNonsing interface is that the lhs matrix matrix argument symwo_lhs is only guaranteed to be symmetric if the rhs matrix argument M (which is this matrix) is guaranteed to be symmetric. Since a MatrixNonsing matrix object may be unsymmetric, it can not implement this operation, only a symmetric nonsingular matrix can.

Any symmetric nonsingular matrix abstraction that can be used to solve for nonlinear systems should also be able to support the MatrixSymOp interface. Therefore, this interface is more of an implementation artifact than an a legitimate domain abstraction. However, some symmetric linear solvers that can implement this interface, can not easily implement the MatrixSymOp interface and therefore this interface is justified. A general client should never use this interface directly. Instead, the combined interface MatrixSymOpNonsing should be used with fully formed symmetric matrix abstractions.

Clients should use the provided non-member functions to call the methods and not the methods themselves.

Definition at line 61 of file AbstractLinAlgPack_MatrixSymNonsing.hpp.


Member Enumeration Documentation

enum AbstractLinAlgPack::MatrixSymNonsing::EMatrixDummyArg

Definition at line 76 of file AbstractLinAlgPack_MatrixSymNonsing.hpp.


Member Function Documentation

MatrixSymNonsing::mat_msns_mut_ptr_t AbstractLinAlgPack::MatrixSymNonsing::clone_msns (  )  [virtual]

Clone the non-const matrix object (if supported).

The default implementation returns NULL which is perfectly acceptable. A matrix object is not required to return a non-NULL value but almost every good matrix implementation will.

Reimplemented in AbstractLinAlgPack::MatrixSymOpNonsing.

Definition at line 37 of file AbstractLinAlgPack_MatrixSymNonsing.cpp.

MatrixSymNonsing::mat_msns_ptr_t AbstractLinAlgPack::MatrixSymNonsing::clone_msns (  )  const [virtual]

Clone the const matrix object (if supported).

The behavior of this method is the same as for the non-const version above except it returns a smart pointer to a const matrix object.

Reimplemented in AbstractLinAlgPack::MatrixSymOpNonsing.

Definition at line 43 of file AbstractLinAlgPack_MatrixSymNonsing.cpp.

void AbstractLinAlgPack::MatrixSymNonsing::M_StMtInvMtM ( MatrixSymOp symwo_lhs,
value_type  alpha,
const MatrixOp mwo,
BLAS_Cpp::Transp  mwo_trans,
EMatrixDummyArg   
) const [protected, virtual]

symwo_lhs = alpha * op(mwo) * inv(M) * op(mwo)'.

The default implementation is based on the operation M_StInvMtM(...) assuming that this M# is a symmetric matrix. For an efficient implementation (for this = L*L' for instance) the subclass may want to override this function.

Definition at line 48 of file AbstractLinAlgPack_MatrixSymNonsing.cpp.

MatrixSymNonsing::mat_mns_mut_ptr_t AbstractLinAlgPack::MatrixSymNonsing::clone_mns (  )  [virtual]

Returns this->clone_msns().

Overridden from MatrixNonsing

Reimplemented from AbstractLinAlgPack::MatrixNonsing.

Reimplemented in AbstractLinAlgPack::MatrixSymOpNonsing.

Definition at line 58 of file AbstractLinAlgPack_MatrixSymNonsing.cpp.

MatrixSymNonsing::mat_mns_ptr_t AbstractLinAlgPack::MatrixSymNonsing::clone_mns (  )  const [virtual]

Returns this->clone_msns().

Reimplemented from AbstractLinAlgPack::MatrixNonsing.

Reimplemented in AbstractLinAlgPack::MatrixSymOpNonsing.

Definition at line 64 of file AbstractLinAlgPack_MatrixSymNonsing.cpp.


Friends And Related Function Documentation

void M_StMtInvMtM ( MatrixSymOp sym_gms_lhs,
value_type  alpha,
const MatrixOp mwo,
BLAS_Cpp::Transp  mwo_trans,
const MatrixSymNonsing mswof,
EMatrixDummyArg  mwo_rhs 
) [friend]


The documentation for this class was generated from the following files:
Generated on Wed May 12 21:31:44 2010 for AbstractLinAlgPack: C++ Interfaces For Vectors, Matrices And Related Linear Algebra Objects by  doxygen 1.4.7