Example: math_csparse_example
C++ example source code:
/* +------------------------------------------------------------------------+ | Mobile Robot Programming Toolkit (MRPT) | | https://www.mrpt.org/ | | | | Copyright (c) 2005-2024, Individual contributors, see AUTHORS file | | See: https://www.mrpt.org/Authors - All rights reserved. | | Released under BSD License. See: https://www.mrpt.org/License | +------------------------------------------------------------------------+ */ #include <mrpt/math/CSparseMatrix.h> #include <mrpt/random/RandomGenerators.h> #include <iostream> using namespace mrpt; using namespace mrpt::math; using namespace std; void ExampleCSparse() { // Initialize a 10x10 sparse matrix: CSparseMatrix SM(10, 10); // With 2 dense blocks of 6x6 and 4x4: const auto COV1 = mrpt::random::getRandomGenerator() .drawDefinitePositiveMatrix<CMatrixDouble>(6, 0.2); const auto COV2 = mrpt::random::getRandomGenerator() .drawDefinitePositiveMatrix<CMatrixDouble>(4, 0.2); SM.insert_submatrix(0, 0, COV1); SM.insert_submatrix(6, 6, COV2); // Get as a dense matrix just for displaying to console: CMatrixDouble M; SM.get_dense(M); cout << "M (as dense):\n" << M; cout << "Saving to sparse_demo1.txt...\n"; SM.saveToTextFile_sparse("sparse_demo1.txt"); // Compress from the triplet to the column-compressed form: cout << "Compressing as CCS...\n"; SM.compressFromTriplet(); cout << "Saving to sparse_demo2.txt...\n"; SM.saveToTextFile_sparse("sparse_demo2.txt"); // Compute the Cholesky decomposition: CSparseMatrix::CholeskyDecomp Chol(SM); // And display the L factor: const CMatrixDouble L = Chol.get_L(); cout << "L:\n" << L << endl; } int main(int argc, char** argv) { try { ExampleCSparse(); return 0; } catch (exception& e) { cout << "MRPT exception caught: " << e.what() << endl; return -1; } catch (...) { printf("Another exception!!"); return -1; } }