WPILibC++ 2023.4.3
OrderingMethods module

This module is currently for internal use only. More...

Classes

class  Eigen::AMDOrdering< StorageIndex >
 Functor computing the approximate minimum degree ordering If the matrix is not structurally symmetric, an ordering of A^T+A is computed. More...
 
class  Eigen::NaturalOrdering< StorageIndex >
 Functor computing the natural ordering (identity) More...
 
class  Eigen::COLAMDOrdering< StorageIndex >
 

Detailed Description

This module is currently for internal use only.

It defines various built-in and external ordering methods for sparse matrices. They are typically used to reduce the number of elements during the sparse matrix decomposition (LLT, LU, QR). Precisely, in a preprocessing step, a permutation matrix P is computed using those ordering methods and applied to the columns of the matrix. Using for instance the sparse Cholesky decomposition, it is expected that the nonzeros elements in LLT(A*P) will be much smaller than that in LLT(A).

Usage :

A simple usage is as a template parameter in the sparse decomposition classes :

SparseLU<MatrixType, COLAMDOrdering<int> > solver;
SparseQR<MatrixType, COLAMDOrdering<int> > solver;

It is possible as well to call directly a particular ordering method for your own purpose,

AMDOrdering<int> ordering;
PermutationMatrix<Dynamic, Dynamic, int> perm;
SparseMatrix<double> A;
//Fill the matrix ...
ordering(A, perm); // Call AMD
Note
Some of these methods (like AMD or METIS), need the sparsity pattern of the input matrix to be symmetric. When the matrix is structurally unsymmetric, Eigen computes internally the pattern of \(A^T*A\) before calling the method. If your matrix is already symmetric (at leat in structure), you can avoid that by calling the method with a SelfAdjointView type.
// Call the ordering on the pattern of the lower triangular matrix A
ordering(A.selfadjointView<Lower>(), perm);
@ Lower
View matrix as a lower triangular matrix.
Definition: Constants.h:209