20 #if MRPT_HAS_SUITESPARSE    21 #define NCOMPLEX  // In MRPT we don't need complex numbers, so avoid the    27 #include <mrpt/otherlibs/CSparse/cs.h>   101     template <
class MATRIX>
   104         std::vector<int> row_list, col_list;  
   106         std::vector<double> content_list;
   107         const int nCol = C.cols();
   108         const int nRow = C.rows();
   109         for (
int c = 0; 
c < nCol; ++
c)
   111             col_list.push_back(row_list.size());
   112             for (
int r = 0; 
r < nRow; ++
r)
   113                 if (C.get_unsafe(
r, 
c) != 0)
   115                     row_list.push_back(
r);
   116                     content_list.push_back(C(
r, 
c));
   119         col_list.push_back(row_list.size());
   124         sparse_matrix.i = (
int*)malloc(
sizeof(
int) * row_list.size());
   125         sparse_matrix.p = (
int*)malloc(
sizeof(
int) * col_list.size());
   126         sparse_matrix.x = (
double*)malloc(
sizeof(
double) * content_list.size());
   130             sizeof(row_list[0]) * row_list.size());
   133             sizeof(col_list[0]) * col_list.size());
   136             sizeof(content_list[0]) * content_list.size());
   153     void copy(
const cs* 
const sm);
   170     CSparseMatrix(
const size_t nRows = 0, 
const size_t nCols = 0);
   177     template <
typename T>
   182             "Input data must contain at least one non-zero element.");
   193              it != 
data.end(); ++it)
   195                 it->first.first, it->first.second, it->second);
   206     template <
typename T, 
size_t N, 
size_t M>
   214     template <
typename T>
   237     void clear(
const size_t nRows = 1, 
const size_t nCols = 1);
   274         this->
add_AB(*
this, other);
   300         const size_t row, 
const size_t col, 
const double val)
   315     template <
class MATRIX>
   317         const size_t row, 
const size_t col, 
const MATRIX& M)
   321                 "insert_entry() is only available for sparse matrix in "   323         const size_t nR = M.rows();
   324         const size_t nC = M.cols();
   325         for (
size_t r = 0; 
r < nR; 
r++)
   326             for (
size_t c = 0; 
c < nC; 
c++)
   477         template <
class VECTOR>
   487         void backsub(
const Eigen::VectorXd& 
b, Eigen::VectorXd& result_x) 
const;
   491         void backsub(
const double* 
b, 
double* result, 
const size_t N) 
const;
 
void setColCount(const size_t nCols)
 
virtual ~CholeskyDecomp()
Destructor. 
 
#define THROW_EXCEPTION(msg)
 
const CSparseMatrix * m_originalSM
A const reference to the original matrix used to build this decomposition. 
 
Used in mrpt::math::CSparseMatrix. 
 
void insert_entry_fast(const size_t row, const size_t col, const double val)
This was an optimized version, but is now equivalent to insert_entry() due to the need to be compatib...
 
void construct_from_triplet(const cs &triplet)
Initialization from a triplet "cs", which is first compressed. 
 
Column vector, like Eigen::MatrixX*, but automatically initialized to zeros since construction...
 
Auxiliary class to hold the results of a Cholesky factorization of a sparse matrix. 
 
A sparse matrix structure, wrapping T. 
 
void compressFromTriplet()
ONLY for TRIPLET matrices: convert the matrix in a column-compressed form. 
 
void construct_from_mrpt_mat(const MATRIX &C)
Initialization from a dense matrix of any kind existing in MRPT. 
 
void swap(CSparseMatrix &other)
Fast swap contents with another sparse matrix. 
 
void insert_entry(const size_t row, const size_t col, const double val)
@ Access the matrix, get, set elements, etc. 
 
A sparse matrix container (with cells of any type), with iterators. 
 
CMatrixDouble get_L() const
Return the L matrix (L*L' = M), as a dense matrix. 
 
void get_dense(CMatrixDouble &outMat) const
Return a dense representation of the sparse matrix. 
 
#define ASSERT_(f)
Defines an assertion mechanism. 
 
A numeric matrix of compile-time fixed size. 
 
CSparseMatrix operator*(const CSparseMatrix &other) const
 
This base provides a set of functions for maths stuff. 
 
void multiply_AB(const CSparseMatrix &A, const CSparseMatrix &B)
this = A*B 
 
CSparseMatrix(const CMatrixTemplateNumeric< T > &MAT)
Constructor from a dense matrix of any kind existing in MRPT, creating a "column-compressed" sparse m...
 
void construct_from_existing_cs(const cs &sm)
To be called by constructors only, assume previous pointers are trash and overwrite them...
 
CSparseMatrix(const size_t nRows=0, const size_t nCols=0)
Create an initially empty sparse matrix, in the "triplet" form. 
 
void add_AB(const CSparseMatrix &A, const CSparseMatrix &B)
this = A+B 
 
void operator=(const CSparseMatrix &other)
Copy operator from another existing object. 
 
#define ASSERTMSG_(f, __ERROR_MSG)
Defines an assertion mechanism. 
 
void multiply_Ab(const mrpt::math::CVectorDouble &b, mrpt::math::CVectorDouble &out_res) const
out_res = this * b 
 
void setRowCount(const size_t nRows)
Change the number of rows in the matrix (can't be lower than current size) 
 
GLsizei const GLchar ** string
 
CSparseMatrix operator+(const CSparseMatrix &other) const
 
void clear(const size_t nRows=1, const size_t nCols=1)
Erase all previous contents and leave the matrix as a "triplet" ROWS x COLS matrix without any nonzer...
 
bool isTriplet() const
Returns true if this sparse matrix is in "triplet" form. 
 
css * m_symbolic_structure
 
CholeskyDecomp & operator=(const CholeskyDecomp &)=delete
 
CSparseMatrix(const CMatrixFixedNumeric< T, N, M > &MAT)
Constructor from a dense matrix of any kind existing in MRPT, creating a "column-compressed" sparse m...
 
GLdouble GLdouble GLdouble r
 
mrpt::math::CVectorDouble operator*(const mrpt::math::CVectorDouble &other) const
 
void operator*=(const CSparseMatrix &other)
 
CholeskyDecomp(const CSparseMatrix &A)
Constructor from a square definite-positive sparse matrix A, which can be use to solve Ax=b The actua...
 
bool saveToTextFile_dense(const std::string &filName)
save as a dense matrix to a text file 
 
void update(const CSparseMatrix &new_SM)
Update the Cholesky factorization from an updated vesion of the original input, square definite-posit...
 
GLenum GLenum GLvoid * row
 
void operator+=(const CSparseMatrix &other)
 
virtual ~CSparseMatrix()
Destructor. 
 
void insert_submatrix(const size_t row, const size_t col, const MATRIX &M)
ONLY for TRIPLET matrices: insert a given matrix (in any of the MRPT formats) at a given location of ...
 
CSparseMatrix transpose() const
 
bool saveToTextFile_sparse(const std::string &filName)
Save sparse structure to a text file loadable from MATLAB (can be called on triplet or CCS matrices)...
 
static void cs2dense(const cs &SM, CMatrixDouble &outMat)
Static method to convert a "cs" structure into a dense representation of the sparse matrix...
 
A matrix of dynamic size. 
 
csn * m_numeric_structure
 
GLsizei const GLfloat * value
 
VECTOR backsub(const VECTOR &b) const
Return the vector from a back-substitution step that solves: Ux=b. 
 
CSparseMatrix(const CSparseMatrixTemplate< T > &data)
A good way to initialize a sparse matrix from a list of non nullptr elements. 
 
CExceptionNotDefPos(const char *s)
 
bool isColumnCompressed() const
Returns true if this sparse matrix is in "column compressed" form. 
 
void copy(const cs *const sm)
Copy the data from an existing "cs" CSparse data structure. 
 
GLsizei GLsizei GLenum GLenum const GLvoid * data
 
void copy_fast(cs *const sm)
Fast copy the data from an existing "cs" CSparse data structure, copying the pointers and leaving NUL...
 
typename SparseMatrixMap::const_iterator const_iterator
Const iterator to move through the matrix. 
 
void internal_free_mem()
free buffers (deallocate the memory of the i,p,x buffers) 
 
void memcpy(void *dest, size_t destSize, const void *src, size_t copyCount) noexcept
An OS and compiler independent version of "memcpy".