Sparse left-looking QR factorization with numerical column pivoting. More...
#include <SparseQR.h>
Public Types | |
enum | { ColsAtCompileTime = MatrixType::ColsAtCompileTime, MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime } |
typedef Matrix< StorageIndex, Dynamic, 1 > | IndexVector |
typedef _MatrixType | MatrixType |
typedef _OrderingType | OrderingType |
typedef PermutationMatrix< Dynamic, Dynamic, StorageIndex > | PermutationType |
typedef SparseMatrix< Scalar, ColMajor, StorageIndex > | QRMatrixType |
typedef MatrixType::RealScalar | RealScalar |
typedef MatrixType::Scalar | Scalar |
typedef Matrix< Scalar, Dynamic, 1 > | ScalarVector |
typedef MatrixType::StorageIndex | StorageIndex |
Public Member Functions | |
template<typename Rhs , typename Dest > | |
bool | _solve_impl (const MatrixBase< Rhs > &B, MatrixBase< Dest > &dest) const |
template<typename Rhs , typename Dest > | |
void | _solve_impl (const SparseMatrixBase< Rhs > &b, SparseMatrixBase< Dest > &dest) const |
void | _sort_matrix_Q () |
void | analyzePattern (const MatrixType &mat) |
Preprocessing step of a QR factorization. More... | |
Index | cols () const |
const PermutationType & | colsPermutation () const |
void | compute (const MatrixType &mat) |
void | factorize (const MatrixType &mat) |
Performs the numerical QR factorization of the input matrix. More... | |
ComputationInfo | info () const |
Reports whether previous computation was successful. More... | |
std::string | lastErrorMessage () const |
SparseQRMatrixQReturnType< SparseQR > | matrixQ () const |
const QRMatrixType & | matrixR () const |
Index | rank () const |
Index | rows () const |
void | setPivotThreshold (const RealScalar &threshold) |
template<typename Rhs > | |
const Solve< SparseQR, Rhs > | solve (const MatrixBase< Rhs > &B) const |
template<typename Rhs > | |
const Solve< SparseQR, Rhs > | solve (const SparseMatrixBase< Rhs > &B) const |
SparseQR () | |
SparseQR (const MatrixType &mat) | |
Protected Types | |
typedef SparseSolverBase< SparseQR< _MatrixType, _OrderingType > > | Base |
Protected Attributes | |
bool | m_analysisIsok |
IndexVector | m_etree |
bool | m_factorizationIsok |
IndexVector | m_firstRowElt |
ScalarVector | m_hcoeffs |
ComputationInfo | m_info |
bool | m_isEtreeOk |
bool | m_isInitialized |
bool | m_isQSorted |
std::string | m_lastError |
Index | m_nonzeropivots |
PermutationType | m_outputPerm_c |
PermutationType | m_perm_c |
PermutationType | m_pivotperm |
QRMatrixType | m_pmat |
QRMatrixType | m_Q |
QRMatrixType | m_R |
RealScalar | m_threshold |
bool | m_useDefaultThreshold |
Friends | |
template<typename , typename > | |
struct | SparseQR_QProduct |
Sparse left-looking QR factorization with numerical column pivoting.
This class implements a left-looking QR decomposition of sparse matrices with numerical column pivoting. When a column has a norm less than a given tolerance it is implicitly permuted to the end. The QR factorization thus obtained is given by A*P = Q*R where R is upper triangular or trapezoidal.
P is the column permutation which is the product of the fill-reducing and the numerical permutations. Use colsPermutation() to get it.
Q is the orthogonal matrix represented as products of Householder reflectors. Use matrixQ() to get an expression and matrixQ().adjoint() to get the adjoint. You can then apply it to a vector.
R is the sparse triangular or trapezoidal matrix. The later occurs when A is rank-deficient. matrixR().topLeftCorner(rank(), rank()) always returns a triangular factor of full rank.
_MatrixType | The type of the sparse matrix A, must be a column-major SparseMatrix<> |
_OrderingType | The fill-reducing ordering method. See the OrderingMethods module for the list of built-in and external ordering methods. |
\implsparsesolverconcept
The numerical pivoting strategy and default threshold are the same as in SuiteSparse QR, and detailed in the following paper: Tim Davis, "Algorithm 915, SuiteSparseQR: Multifrontal Multithreaded Rank-Revealing Sparse QR Factorization, ACM Trans. on Math. Soft. 38(1), 2011. Even though it is qualified as "rank-revealing", this strategy might fail for some rank deficient problems. When this class is used to solve linear or least-square problems it is thus strongly recommended to check the accuracy of the computed solution. If it failed, it usually helps to increase the threshold with setPivotThreshold.
Definition at line 16 of file SparseQR.h.
|
protected |
Definition at line 87 of file SparseQR.h.
typedef Matrix<StorageIndex, Dynamic, 1> Eigen::SparseQR::IndexVector |
Definition at line 97 of file SparseQR.h.
typedef _MatrixType Eigen::SparseQR::MatrixType |
Definition at line 91 of file SparseQR.h.
typedef _OrderingType Eigen::SparseQR::OrderingType |
Definition at line 92 of file SparseQR.h.
Definition at line 99 of file SparseQR.h.
Definition at line 96 of file SparseQR.h.
typedef MatrixType::RealScalar Eigen::SparseQR::RealScalar |
Definition at line 94 of file SparseQR.h.
typedef MatrixType::Scalar Eigen::SparseQR::Scalar |
Definition at line 93 of file SparseQR.h.
typedef Matrix<Scalar, Dynamic, 1> Eigen::SparseQR::ScalarVector |
Definition at line 98 of file SparseQR.h.
typedef MatrixType::StorageIndex Eigen::SparseQR::StorageIndex |
Definition at line 95 of file SparseQR.h.
anonymous enum |
Enumerator | |
---|---|
ColsAtCompileTime | |
MaxColsAtCompileTime |
Definition at line 101 of file SparseQR.h.
|
inline |
Definition at line 107 of file SparseQR.h.
|
inlineexplicit |
Construct a QR factorization of the matrix mat.
Definition at line 116 of file SparseQR.h.
|
inline |
Definition at line 205 of file SparseQR.h.
|
inline |
Definition at line 111 of file SparseSolverBase.h.
|
inline |
Definition at line 276 of file SparseQR.h.
void Eigen::SparseQR::analyzePattern | ( | const MatrixType & | mat | ) |
Preprocessing step of a QR factorization.
In this step, the fill-reducing permutation is computed and applied to the columns of A and the column elimination tree is computed as well. Only the sparsity pattern of mat is exploited.
Definition at line 320 of file SparseQR.h.
|
inline |
Definition at line 141 of file SparseQR.h.
|
inline |
Definition at line 192 of file SparseQR.h.
|
inline |
Computes the QR factorization of the sparse matrix mat.
Definition at line 127 of file SparseQR.h.
void Eigen::SparseQR::factorize | ( | const MatrixType & | mat | ) |
Performs the numerical QR factorization of the input matrix.
The function SparseQR::analyzePattern(const MatrixType&) must have been called beforehand with a matrix having the same sparsity pattern than mat.
mat | The sparse column-major matrix |
Definition at line 361 of file SparseQR.h.
|
inline |
Reports whether previous computation was successful.
Success
if computation was successful, NumericalIssue
if the QR factorization reports a numerical problem InvalidInput
if the input matrix is invalidDefinition at line 268 of file SparseQR.h.
|
inline |
Definition at line 201 of file SparseQR.h.
|
inline |
To get a plain SparseMatrix representation of Q:
Internally, this call simply performs a sparse product between the matrix Q and a sparse identity matrix. However, due to the fact that the sparse reflectors are stored unsorted, two transpositions are needed to sort them before performing the product.
Definition at line 186 of file SparseQR.h.
|
inline |
To sort the entries, you can assign it to a row-major matrix, and if a column-major matrix is required, you can copy it again:
Definition at line 156 of file SparseQR.h.
|
inline |
Definition at line 162 of file SparseQR.h.
|
inline |
Definition at line 137 of file SparseQR.h.
|
inline |
Sets the threshold that is used to determine linearly dependent columns during the factorization.
In practice, if during the factorization the norm of the column that has to be eliminated is below this threshold, then the entire column is treated as zero, and it is moved at the end.
Definition at line 235 of file SparseQR.h.
|
inline |
Definition at line 246 of file SparseQR.h.
|
inline |
Definition at line 253 of file SparseQR.h.
|
friend |
Definition at line 306 of file SparseQR.h.
|
protected |
Definition at line 287 of file SparseQR.h.
|
protected |
Definition at line 301 of file SparseQR.h.
|
protected |
Definition at line 288 of file SparseQR.h.
|
protected |
Definition at line 302 of file SparseQR.h.
|
protected |
Definition at line 294 of file SparseQR.h.
|
mutableprotected |
Definition at line 289 of file SparseQR.h.
|
protected |
Definition at line 304 of file SparseQR.h.
|
mutableprotected |
Definition at line 119 of file SparseSolverBase.h.
|
protected |
Definition at line 303 of file SparseQR.h.
|
protected |
Definition at line 290 of file SparseQR.h.
|
protected |
Definition at line 300 of file SparseQR.h.
|
protected |
Definition at line 297 of file SparseQR.h.
|
protected |
Definition at line 295 of file SparseQR.h.
|
protected |
Definition at line 296 of file SparseQR.h.
|
protected |
Definition at line 291 of file SparseQR.h.
|
protected |
Definition at line 293 of file SparseQR.h.
|
protected |
Definition at line 292 of file SparseQR.h.
|
protected |
Definition at line 298 of file SparseQR.h.
|
protected |
Definition at line 299 of file SparseQR.h.