10 #ifndef EIGEN_ITERATIVE_SOLVER_BASE_H 11 #define EIGEN_ITERATIVE_SOLVER_BASE_H 20 template<
typename Derived>
27 typedef typename MatrixType::Index Index;
28 typedef typename MatrixType::RealScalar RealScalar;
32 Derived& derived() {
return *
static_cast<Derived*
>(
this); }
33 const Derived& derived()
const {
return *
static_cast<const Derived*
>(
this); }
52 template<
typename InputDerived>
66 template<
typename InputDerived>
70 m_preconditioner.analyzePattern(*mp_matrix);
71 m_isInitialized =
true;
72 m_analysisIsOk =
true;
86 template<
typename InputDerived>
90 eigen_assert(m_analysisIsOk &&
"You must first call analyzePattern()");
91 m_preconditioner.factorize(*mp_matrix);
92 m_factorizationIsOk =
true;
107 template<
typename InputDerived>
111 m_preconditioner.compute(*mp_matrix);
112 m_isInitialized =
true;
113 m_analysisIsOk =
true;
114 m_factorizationIsOk =
true;
120 Index rows()
const {
return mp_matrix ? mp_matrix->rows() : 0; }
122 Index cols()
const {
return mp_matrix ? mp_matrix->cols() : 0; }
143 return (mp_matrix && m_maxIterations<0) ? mp_matrix->cols() : m_maxIterations;
149 m_maxIterations = maxIters;
156 eigen_assert(m_isInitialized &&
"ConjugateGradient is not initialized.");
163 eigen_assert(m_isInitialized &&
"ConjugateGradient is not initialized.");
174 eigen_assert(m_isInitialized &&
"IterativeSolverBase is not initialized.");
175 eigen_assert(rows()==b.rows()
176 &&
"IterativeSolverBase::solve(): invalid number of rows of the right hand side matrix b");
184 template<
typename Rhs>
188 eigen_assert(m_isInitialized &&
"IterativeSolverBase is not initialized.");
189 eigen_assert(rows()==b.
rows()
190 &&
"IterativeSolverBase::solve(): invalid number of rows of the right hand side matrix b");
197 eigen_assert(m_isInitialized &&
"IterativeSolverBase is not initialized.");
202 template<
typename Rhs,
typename DestScalar,
int DestOptions,
typename DestIndex>
205 eigen_assert(rows()==b.rows());
207 int rhsCols = b.cols();
211 for(
int k=0; k<rhsCols; ++k)
214 tx = derived().solve(tb);
215 dest.
col(k) = tx.sparseView(0);
221 template<
typename InputDerived>
225 grabInput_impl(A.const_cast_derived());
228 template<
typename InputDerived>
232 mp_matrix = &m_copyMatrix;
235 void grabInput_impl(MatrixType& A)
237 if(MatrixType::RowsAtCompileTime==
Dynamic && MatrixType::ColsAtCompileTime==
Dynamic)
238 m_copyMatrix.resize(0,0);
244 m_isInitialized =
false;
245 m_analysisIsOk =
false;
246 m_factorizationIsOk =
false;
247 m_maxIterations = -1;
250 MatrixType m_copyMatrix;
251 const MatrixType* mp_matrix;
252 Preconditioner m_preconditioner;
255 RealScalar m_tolerance;
257 mutable RealScalar m_error;
258 mutable int m_iterations;
260 mutable bool m_isInitialized, m_analysisIsOk, m_factorizationIsOk;
265 template<
typename Derived,
typename Rhs>
270 EIGEN_MAKE_SPARSE_SOLVE_HELPERS(Dec,Rhs)
272 template<
typename Dest>
void evalTo(Dest& dst)
const 274 dec().derived()._solve_sparse(rhs(),dst);
282 #endif // EIGEN_ITERATIVE_SOLVER_BASE_H Derived & factorize(const EigenBase< InputDerived > &A)
Initializes the iterative solver with the numerical values of the matrix A for further solving Ax=b p...
Definition: IterativeSolverBase.h:87
int maxIterations() const
Definition: IterativeSolverBase.h:141
Derived & setTolerance(const RealScalar &tolerance)
Sets the tolerance threshold used by the stopping criteria.
Definition: IterativeSolverBase.h:128
Derived & compute(const EigenBase< InputDerived > &A)
Initializes the iterative solver with the matrix A for further solving Ax=b problems.
Definition: IterativeSolverBase.h:108
A versatible sparse matrix representation.
Definition: SparseMatrix.h:85
int iterations() const
Definition: IterativeSolverBase.h:154
ComputationInfo info() const
Definition: IterativeSolverBase.h:195
iterative scaling algorithm to equilibrate rows and column norms in matrices
Definition: TestIMU_Common.h:87
Definition: SparseSolve.h:18
Holds information about the various numeric (i.e.
Definition: NumTraits.h:88
const Preconditioner & preconditioner() const
Definition: IterativeSolverBase.h:138
Derived & derived()
Definition: EigenBase.h:34
RealScalar tolerance() const
Definition: IterativeSolverBase.h:125
Common base class for all classes T such that MatrixBase has an operator=(T) and a constructor Matrix...
Definition: EigenBase.h:26
RealScalar error() const
Definition: IterativeSolverBase.h:161
detail::size< coerce_list< Ts... >> size
Get the size of a list (number of elements.)
Definition: Size.h:56
IterativeSolverBase(const EigenBase< InputDerived > &A)
Initialize the solver with matrix A for further Ax=b solving.
Definition: IterativeSolverBase.h:53
Index rows() const
Definition: SparseMatrixBase.h:159
const internal::sparse_solve_retval< IterativeSolverBase, Rhs > solve(const SparseMatrixBase< Rhs > &b) const
Definition: IterativeSolverBase.h:186
Base class of any sparse matrices or sparse expressions.
Definition: ForwardDeclarations.h:239
Derived & analyzePattern(const EigenBase< InputDerived > &A)
Initializes the iterative solver for the sparcity pattern of the matrix A for further solving Ax=b pr...
Definition: IterativeSolverBase.h:67
Computation was successful.
Definition: Constants.h:376
Derived & setMaxIterations(int maxIters)
Sets the max number of iterations.
Definition: IterativeSolverBase.h:147
const internal::solve_retval< Derived, Rhs > solve(const MatrixBase< Rhs > &b) const
Definition: IterativeSolverBase.h:172
Definition: BandTriangularSolver.h:13
Definition: SparseSolve.h:17
Definition: ForwardDeclarations.h:125
ColXpr col(Index i)
Definition: SparseMatrixBase.h:733
Preconditioner & preconditioner()
Definition: IterativeSolverBase.h:135
const int Dynamic
This value means that a positive quantity (e.g., a size) is not known at compile-time, and that instead the value is stored in some runtime variable.
Definition: Constants.h:21
The matrix class, also used for vectors and row-vectors.
Definition: Matrix.h:127
IterativeSolverBase()
Default constructor.
Definition: IterativeSolverBase.h:36
ComputationInfo
Enum for reporting the status of a computation.
Definition: Constants.h:374
Base class for linear iterative solvers.
Definition: IterativeSolverBase.h:21
Base class for all dense matrices, vectors, and expressions.
Definition: MatrixBase.h:48
Definition: ForwardDeclarations.h:17
double Scalar
Common scalar type.
Definition: FlexibleKalmanBase.h:48