11 #include <mrpt/config.h>      23 #if MRPT_HAS_SUITESPARSE    24 #define NCOMPLEX  // In MRPT we don't need complex numbers, so avoid the    30 #include <mrpt/3rdparty/CSparse/cs.h>   104     template <
class MATRIX>
   107         std::vector<int> row_list, col_list;  
   109         std::vector<double> content_list;
   110         const int nCol = C.cols();
   111         const int nRow = C.rows();
   112         for (
int c = 0; c < nCol; ++c)
   114             col_list.push_back(row_list.size());
   115             for (
int r = 0; r < nRow; ++r)
   118                     row_list.push_back(r);
   119                     content_list.push_back(C(r, c));
   122         col_list.push_back(row_list.size());
   127         sparse_matrix.i = (
int*)malloc(
sizeof(
int) * row_list.size());
   128         sparse_matrix.p = (
int*)malloc(
sizeof(
int) * col_list.size());
   129         sparse_matrix.x = (
double*)malloc(
sizeof(
double) * content_list.size());
   133             sizeof(row_list[0]) * row_list.size());
   136             sizeof(col_list[0]) * col_list.size());
   139             sizeof(content_list[0]) * content_list.size());
   156     void copy(
const cs* 
const sm);
   173     CSparseMatrix(
const size_t nRows = 0, 
const size_t nCols = 0);
   180     template <
typename T>
   185             "Input data must contain at least one non-zero element.");
   194         for (
auto it = 
data.begin(); it != 
data.end(); ++it)
   196                 it->first.first, it->first.second, it->second);
   207     template <
typename T, 
size_t N, 
size_t M>
   215     template <
typename T>
   238     void clear(
const size_t nRows = 1, 
const size_t nCols = 1);
   275         this->
add_AB(*
this, other);
   295     void insert_entry(
const size_t row, 
const size_t col, 
const double val);
   301         const size_t row, 
const size_t col, 
const double val)
   316     template <
class MATRIX>
   318         const size_t row, 
const size_t col, 
const MATRIX& M)
   322                 "insert_entry() is only available for sparse matrix in "   323                 "'triplet' format.");
   324         const size_t nR = M.rows();
   325         const size_t nC = M.cols();
   326         for (
size_t r = 0; r < nR; r++)
   327             for (
size_t c = 0; c < nC; c++)
   478         template <
class VECTOR>
   492         void backsub(
const double* b, 
double* result, 
const size_t N) 
const;
   502         !std::is_copy_constructible_v<CholeskyDecomp> &&
   503             !std::is_copy_assignable_v<CholeskyDecomp>,
 A compile-time fixed-size numeric matrix container. 
 
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. 
 
CSparseMatrix(const CMatrixDynamic< T > &MAT)
Constructor from a dense matrix of any kind existing in MRPT, creating a "column-compressed" sparse m...
 
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. 
 
CSparseMatrix operator*(const CSparseMatrix &other) const
 
This base provides a set of functions for maths stuff. 
 
CSparseMatrix(const CMatrixFixed< T, N, M > &MAT)
Constructor from a dense matrix of any kind existing in MRPT, creating a "column-compressed" sparse m...
 
void multiply_AB(const CSparseMatrix &A, const CSparseMatrix &B)
this = A*B 
 
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 
 
#define ASSERTMSG_(f, __ERROR_MSG)
Defines an assertion mechanism. 
 
void setRowCount(const size_t nRows)
Change the number of rows in the matrix (can't be lower than current size) 
 
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...
 
void matProductOf_Ab(const mrpt::math::CVectorDouble &b, mrpt::math::CVectorDouble &out_res) const
out_res = this * b 
 
bool isTriplet() const
Returns true if this sparse matrix is in "triplet" form. 
 
css * m_symbolic_structure
 
CholeskyDecomp & operator=(const CholeskyDecomp &)=delete
 
CSparseMatrix & operator=(const CSparseMatrix &other)
Copy operator from another existing object. 
 
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...
 
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...
 
csn * m_numeric_structure
 
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. 
 
This template class provides the basic functionality for a general 2D any-size, resizable container o...
 
void copy_fast(cs *const sm)
Fast copy the data from an existing "cs" CSparse data structure, copying the pointers and leaving NUL...
 
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". 
 
static struct FontData data