MOAB  4.9.3pre
Eigen::IterativeSolverBase< Derived > Class Template Reference

Base class for linear iterative solvers. More...

#include <IterativeSolverBase.h>

Inheritance diagram for Eigen::IterativeSolverBase< Derived >:
Collaboration diagram for Eigen::IterativeSolverBase< Derived >:

List of all members.

Public Types

enum  { ColsAtCompileTime = MatrixType::ColsAtCompileTime, MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime }
typedef internal::traits
< Derived >::MatrixType 
MatrixType
typedef internal::traits
< Derived >::Preconditioner 
Preconditioner
typedef MatrixType::Scalar Scalar
typedef MatrixType::StorageIndex StorageIndex
typedef MatrixType::RealScalar RealScalar

Public Member Functions

 IterativeSolverBase ()
template<typename MatrixDerived >
 IterativeSolverBase (const EigenBase< MatrixDerived > &A)
 ~IterativeSolverBase ()
template<typename MatrixDerived >
Derived & analyzePattern (const EigenBase< MatrixDerived > &A)
template<typename MatrixDerived >
Derived & factorize (const EigenBase< MatrixDerived > &A)
template<typename MatrixDerived >
Derived & compute (const EigenBase< MatrixDerived > &A)
Index rows () const
Index cols () const
RealScalar tolerance () const
Derived & setTolerance (const RealScalar &tolerance)
Preconditionerpreconditioner ()
const Preconditionerpreconditioner () const
Index maxIterations () const
Derived & setMaxIterations (Index maxIters)
Index iterations () const
RealScalar error () const
template<typename Rhs , typename Guess >
const SolveWithGuess< Derived,
Rhs, Guess > 
solveWithGuess (const MatrixBase< Rhs > &b, const Guess &x0) const
ComputationInfo info () const
template<typename Rhs , typename DestScalar , int DestOptions, typename DestIndex >
void _solve_impl (const Rhs &b, SparseMatrix< DestScalar, DestOptions, DestIndex > &dest) const

Protected Types

typedef SparseSolverBase< Derived > Base
typedef
internal::generic_matrix_wrapper
< MatrixType
MatrixWrapper
typedef
MatrixWrapper::ActualMatrixType 
ActualMatrixType

Protected Member Functions

void init ()
const ActualMatrixTypematrix () const
template<typename InputType >
void grab (const InputType &A)

Protected Attributes

MatrixWrapper m_matrixWrapper
Preconditioner m_preconditioner
Index m_maxIterations
RealScalar m_tolerance
RealScalar m_error
Index m_iterations
ComputationInfo m_info
bool m_analysisIsOk
bool m_factorizationIsOk

Detailed Description

template<typename Derived>
class Eigen::IterativeSolverBase< Derived >

Base class for linear iterative solvers.

See also:
class SimplicialCholesky, DiagonalPreconditioner, IdentityPreconditioner

Definition at line 143 of file IterativeSolverBase.h.


Member Typedef Documentation

template<typename Derived>
typedef MatrixWrapper::ActualMatrixType Eigen::IterativeSolverBase< Derived >::ActualMatrixType [protected]

Definition at line 365 of file IterativeSolverBase.h.

template<typename Derived>
typedef internal::generic_matrix_wrapper<MatrixType> Eigen::IterativeSolverBase< Derived >::MatrixWrapper [protected]

Definition at line 364 of file IterativeSolverBase.h.

template<typename Derived>
typedef MatrixType::StorageIndex Eigen::IterativeSolverBase< Derived >::StorageIndex

Definition at line 153 of file IterativeSolverBase.h.


Member Enumeration Documentation

template<typename Derived>
anonymous enum
Enumerator:
ColsAtCompileTime 
MaxColsAtCompileTime 

Definition at line 156 of file IterativeSolverBase.h.

       {
    ColsAtCompileTime = MatrixType::ColsAtCompileTime,
    MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
  };

Constructor & Destructor Documentation

template<typename Derived>
Eigen::IterativeSolverBase< Derived >::IterativeSolverBase ( ) [inline]

Default constructor.

Definition at line 166 of file IterativeSolverBase.h.

  {
    init();
  }
template<typename Derived>
template<typename MatrixDerived >
Eigen::IterativeSolverBase< Derived >::IterativeSolverBase ( const EigenBase< MatrixDerived > &  A) [inline, explicit]

Initialize the solver with matrix A for further Ax=b solving.

This constructor is a shortcut for the default constructor followed by a call to compute().

Warning:
this class stores a reference to the matrix A as well as some precomputed values that depend on it. Therefore, if A is changed this class becomes invalid. Call compute() to update it with the new matrix A, or modify a copy of A.

Definition at line 182 of file IterativeSolverBase.h.

    : m_matrixWrapper(A.derived())
  {
    init();
    compute(matrix());
  }
template<typename Derived>
Eigen::IterativeSolverBase< Derived >::~IterativeSolverBase ( ) [inline]

Definition at line 189 of file IterativeSolverBase.h.

{}

Member Function Documentation

template<typename Derived>
template<typename Rhs , typename DestScalar , int DestOptions, typename DestIndex >
void Eigen::IterativeSolverBase< Derived >::_solve_impl ( const Rhs &  b,
SparseMatrix< DestScalar, DestOptions, DestIndex > &  dest 
) const [inline]

Definition at line 334 of file IterativeSolverBase.h.

  {
    eigen_assert(rows()==b.rows());
    
    Index rhsCols = b.cols();
    Index size = b.rows();
    Eigen::Matrix<DestScalar,Dynamic,1> tb(size);
    Eigen::Matrix<DestScalar,Dynamic,1> tx(cols());
    // We do not directly fill dest because sparse expressions have to be free of aliasing issue.
    // For non square least-square problems, b and dest might not have the same size whereas they might alias each-other.
    SparseMatrix<DestScalar,DestOptions,DestIndex> tmp(cols(),rhsCols);
    for(Index k=0; k<rhsCols; ++k)
    {
      tb = b.col(k);
      tx = derived().solve(tb);
      tmp.col(k) = tx.sparseView(0);
    }
    tmp.swap(dest);
  }
template<typename Derived>
template<typename MatrixDerived >
Derived& Eigen::IterativeSolverBase< Derived >::analyzePattern ( const EigenBase< MatrixDerived > &  A) [inline]

Initializes the iterative solver for the sparsity pattern of the matrix A for further solving Ax=b problems.

Currently, this function mostly calls analyzePattern on the preconditioner. In the future we might, for instance, implement column reordering for faster matrix vector products.

Definition at line 197 of file IterativeSolverBase.h.

  {
    grab(A.derived());
    m_preconditioner.analyzePattern(matrix());
    m_isInitialized = true;
    m_analysisIsOk = true;
    m_info = m_preconditioner.info();
    return derived();
  }
template<typename Derived>
Index Eigen::IterativeSolverBase< Derived >::cols ( void  ) const [inline]

Definition at line 253 of file IterativeSolverBase.h.

{ return matrix().cols(); }
template<typename Derived>
template<typename MatrixDerived >
Derived& Eigen::IterativeSolverBase< Derived >::compute ( const EigenBase< MatrixDerived > &  A) [inline]

Initializes the iterative solver with the matrix A for further solving Ax=b problems.

Currently, this function mostly initializes/computes the preconditioner. In the future we might, for instance, implement column reordering for faster matrix vector products.

Warning:
this class stores a reference to the matrix A as well as some precomputed values that depend on it. Therefore, if A is changed this class becomes invalid. Call compute() to update it with the new matrix A, or modify a copy of A.

Definition at line 238 of file IterativeSolverBase.h.

  {
    grab(A.derived());
    m_preconditioner.compute(matrix());
    m_isInitialized = true;
    m_analysisIsOk = true;
    m_factorizationIsOk = true;
    m_info = m_preconditioner.info();
    return derived();
  }
template<typename Derived>
RealScalar Eigen::IterativeSolverBase< Derived >::error ( ) const [inline]
Returns:
the tolerance error reached during the last solve. It is a close approximation of the true relative residual error |Ax-b|/|b|.

Definition at line 305 of file IterativeSolverBase.h.

  {
    eigen_assert(m_isInitialized && "ConjugateGradient is not initialized.");
    return m_error;
  }
template<typename Derived>
template<typename MatrixDerived >
Derived& Eigen::IterativeSolverBase< Derived >::factorize ( const EigenBase< MatrixDerived > &  A) [inline]

Initializes the iterative solver with the numerical values of the matrix A for further solving Ax=b problems.

Currently, this function mostly calls factorize on the preconditioner.

Warning:
this class stores a reference to the matrix A as well as some precomputed values that depend on it. Therefore, if A is changed this class becomes invalid. Call compute() to update it with the new matrix A, or modify a copy of A.

Definition at line 217 of file IterativeSolverBase.h.

  {
    eigen_assert(m_analysisIsOk && "You must first call analyzePattern()"); 
    grab(A.derived());
    m_preconditioner.factorize(matrix());
    m_factorizationIsOk = true;
    m_info = m_preconditioner.info();
    return derived();
  }
template<typename Derived>
template<typename InputType >
void Eigen::IterativeSolverBase< Derived >::grab ( const InputType &  A) [inline, protected]

Definition at line 373 of file IterativeSolverBase.h.

  {
    m_matrixWrapper.grab(A);
  }
template<typename Derived>
ComputationInfo Eigen::IterativeSolverBase< Derived >::info ( ) const [inline]
Returns:
Success if the iterations converged, and NoConvergence otherwise.

Definition at line 326 of file IterativeSolverBase.h.

  {
    eigen_assert(m_isInitialized && "IterativeSolverBase is not initialized.");
    return m_info;
  }
template<typename Derived>
void Eigen::IterativeSolverBase< Derived >::init ( ) [inline, protected]

Definition at line 355 of file IterativeSolverBase.h.

  {
    m_isInitialized = false;
    m_analysisIsOk = false;
    m_factorizationIsOk = false;
    m_maxIterations = -1;
    m_tolerance = NumTraits<Scalar>::epsilon();
  }
template<typename Derived>
Index Eigen::IterativeSolverBase< Derived >::iterations ( ) const [inline]
Returns:
the number of iterations performed during the last solve

Definition at line 296 of file IterativeSolverBase.h.

  {
    eigen_assert(m_isInitialized && "ConjugateGradient is not initialized.");
    return m_iterations;
  }
template<typename Derived>
const ActualMatrixType& Eigen::IterativeSolverBase< Derived >::matrix ( ) const [inline, protected]

Definition at line 367 of file IterativeSolverBase.h.

  {
    return m_matrixWrapper.matrix();
  }
template<typename Derived>
Index Eigen::IterativeSolverBase< Derived >::maxIterations ( ) const [inline]
Returns:
the max number of iterations. It is either the value setted by setMaxIterations or, by default, twice the number of columns of the matrix.

Definition at line 281 of file IterativeSolverBase.h.

  {
    return (m_maxIterations<0) ? 2*matrix().cols() : m_maxIterations;
  }
template<typename Derived>
Preconditioner& Eigen::IterativeSolverBase< Derived >::preconditioner ( ) [inline]
Returns:
a read-write reference to the preconditioner for custom configuration.

Definition at line 272 of file IterativeSolverBase.h.

{ return m_preconditioner; }
template<typename Derived>
const Preconditioner& Eigen::IterativeSolverBase< Derived >::preconditioner ( ) const [inline]
Returns:
a read-only reference to the preconditioner.

Definition at line 275 of file IterativeSolverBase.h.

{ return m_preconditioner; }
template<typename Derived>
Index Eigen::IterativeSolverBase< Derived >::rows ( void  ) const [inline]

Definition at line 250 of file IterativeSolverBase.h.

{ return matrix().rows(); }
template<typename Derived>
Derived& Eigen::IterativeSolverBase< Derived >::setMaxIterations ( Index  maxIters) [inline]

Sets the max number of iterations. Default is twice the number of columns of the matrix.

Definition at line 289 of file IterativeSolverBase.h.

  {
    m_maxIterations = maxIters;
    return derived();
  }
template<typename Derived>
Derived& Eigen::IterativeSolverBase< Derived >::setTolerance ( const RealScalar tolerance) [inline]

Sets the tolerance threshold used by the stopping criteria.

This value is used as an upper bound to the relative residual error: |Ax-b|/|b|. The default value is the machine precision given by NumTraits<Scalar>::epsilon()

Definition at line 265 of file IterativeSolverBase.h.

  {
    m_tolerance = tolerance;
    return derived();
  }
template<typename Derived>
template<typename Rhs , typename Guess >
const SolveWithGuess<Derived, Rhs, Guess> Eigen::IterativeSolverBase< Derived >::solveWithGuess ( const MatrixBase< Rhs > &  b,
const Guess &  x0 
) const [inline]
Returns:
the solution x of $ A x = b $ using the current decomposition of A and x0 as an initial solution.
See also:
solve(), compute()

Definition at line 318 of file IterativeSolverBase.h.

  {
    eigen_assert(m_isInitialized && "Solver is not initialized.");
    eigen_assert(derived().rows()==b.rows() && "solve(): invalid number of rows of the right hand side matrix b");
    return SolveWithGuess<Derived, Rhs, Guess>(derived(), b.derived(), x0);
  }
template<typename Derived>
RealScalar Eigen::IterativeSolverBase< Derived >::tolerance ( ) const [inline]
Returns:
the tolerance threshold used by the stopping criteria.
See also:
setTolerance()

Definition at line 258 of file IterativeSolverBase.h.

{ return m_tolerance; }

Member Data Documentation

template<typename Derived>
bool Eigen::IterativeSolverBase< Derived >::m_analysisIsOk [mutable, protected]

Definition at line 387 of file IterativeSolverBase.h.

template<typename Derived>
RealScalar Eigen::IterativeSolverBase< Derived >::m_error [mutable, protected]

Definition at line 384 of file IterativeSolverBase.h.

template<typename Derived>
bool Eigen::IterativeSolverBase< Derived >::m_factorizationIsOk [mutable, protected]

Definition at line 387 of file IterativeSolverBase.h.

template<typename Derived>
ComputationInfo Eigen::IterativeSolverBase< Derived >::m_info [mutable, protected]

Definition at line 386 of file IterativeSolverBase.h.

template<typename Derived>
Index Eigen::IterativeSolverBase< Derived >::m_iterations [mutable, protected]

Definition at line 385 of file IterativeSolverBase.h.

template<typename Derived>
MatrixWrapper Eigen::IterativeSolverBase< Derived >::m_matrixWrapper [protected]

Definition at line 378 of file IterativeSolverBase.h.

template<typename Derived>
Index Eigen::IterativeSolverBase< Derived >::m_maxIterations [protected]

Definition at line 381 of file IterativeSolverBase.h.

template<typename Derived>
Preconditioner Eigen::IterativeSolverBase< Derived >::m_preconditioner [protected]

Definition at line 379 of file IterativeSolverBase.h.

template<typename Derived>
RealScalar Eigen::IterativeSolverBase< Derived >::m_tolerance [protected]

Definition at line 382 of file IterativeSolverBase.h.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines