#include <MatrixSparse.hpp>
Public Member Functions | |
MatrixSparse (int nrow=0, int ncol=0, int opt_eigen=-1) | |
MatrixSparse (const cs *A, int opt_eigen=-1) | |
MatrixSparse (const MatrixSparse &m) | |
MatrixSparse & | operator= (const MatrixSparse &m) |
virtual | ~MatrixSparse () |
bool | isSparse () const |
Cloneable interface. More... | |
virtual bool | isDense () const |
virtual void | setColumn (int icol, const VectorDouble &tab) override |
virtual void | setRow (int irow, const VectorDouble &tab) override |
virtual void | setDiagonal (const VectorDouble &tab) override |
virtual void | setDiagonalToConstant (double value=1.) override |
virtual MatrixSparse * | transpose () const override |
virtual void | addScalar (double v) override |
virtual void | addScalarDiag (double v) override |
virtual void | prodScalar (double v) override |
virtual void | fill (double value) override |
virtual void | multiplyRow (const VectorDouble &vec) override |
virtual void | multiplyColumn (const VectorDouble &vec) override |
virtual void | divideRow (const VectorDouble &vec) override |
virtual void | divideColumn (const VectorDouble &vec) override |
virtual VectorDouble | prodVecMat (const VectorDouble &x, bool transpose=false) const override |
virtual VectorDouble | prodMatVec (const VectorDouble &x, bool transpose=false) const override |
virtual void | prodMatMatInPlace (const AMatrix *x, const AMatrix *y, bool transposeX=false, bool transposeY=false) override |
virtual NF_Triplet | getMatrixToTriplet (int shiftRow=0, int shiftCol=0) const override |
virtual String | toString (const AStringFormat *strfmt=nullptr) const override |
Interface to AStringable. More... | |
void | init (int nrows, int ncols) |
virtual void | addMatInPlace (const MatrixSparse &y, double cx=1., double cy=1.) |
The next functions use specific definition of matrix (to avoid dynamic_cast) rather than manipulating AMatrix. They are no more generic of AMatrix. More... | |
virtual void | prodNormMatMatInPlace (const MatrixSparse &a, const MatrixSparse &m, bool transpose=false) |
virtual void | prodNormMatInPlace (const MatrixSparse &a, const VectorDouble &vec=VectorDouble(), bool transpose=false) |
const cs * | getCS () const |
void | setCS (cs *cs) |
void | freeCS () |
cs * | getCSUnprotected () const |
void | reset (int nrows, int ncols) |
void | reset (int nrows, int ncols, double value) |
void | reset (int nrows, int ncols, const double *tab, bool byCol=true) |
void | reset (int nrows, int ncols, const VectorDouble &tab, bool byCol=true) |
void | reset (const VectorVectorDouble &tab, bool byCol=true) |
void | resetFromTriplet (const NF_Triplet &NF_T) |
void | dumpElements (const String &title, int ifrom, int ito) const |
void | fillRandom (int seed=432432, double zeroPercent=0.1) |
int | computeCholesky () |
int | solveCholesky (const VectorDouble &b, VectorDouble &x) |
int | simulateCholesky (const VectorDouble &b, VectorDouble &x) |
double | computeCholeskyLogDeterminant () |
void | addValue (int row, int col, double value) |
double | getValue (int row, int col) const |
double | L1Norm () const |
void | getStats (int *nrows, int *ncols, int *count, double *percent) const |
int | scaleByDiag () |
int | addVecInPlace (const VectorDouble &x, VectorDouble &y) |
void | setConstant (double value) |
VectorDouble | extractDiag (int oper_choice=1) const |
void | prodNormDiagVecInPlace (const VectorDouble &vec, int oper=1) |
const Eigen::SparseMatrix< double > & | getEigenMatrix () const |
void | setEigenMatrix (const Eigen::SparseMatrix< double > &eigenMatrix) |
MatrixSparse * | extractSubmatrixByRanks (const VectorInt &rank_rows, const VectorInt &rank_cols) |
MatrixSparse * | extractSubmatrixByColor (const VectorInt &colors, int ref_color, bool row_ok, bool col_ok) |
VectorInt | colorCoding () |
int | getNonZeros () const |
Public Member Functions inherited from AMatrix | |
AMatrix (int nrow=0, int ncol=0, int opt_eigen=-1) | |
AMatrix (const AMatrix &m) | |
AMatrix & | operator= (const AMatrix &m) |
virtual | ~AMatrix () |
void | init (int nrows, int ncols, int opt_eigen=-1) |
void | reset (int nrows, int ncols, double value=0., int opt_eigen=-1) |
void | resetFromArray (int nrows, int ncols, const double *tab, bool byCol=true, int opt_eigen=-1) |
void | resetFromVD (int nrows, int ncols, const VectorDouble &tab, bool byCol=true, int opt_eigen=-1) |
void | resetFromVVD (const VectorVectorDouble &tab, bool byCol=true, int opt_eigen=-1) |
virtual bool | isSquare (bool printWhyNot=false) const |
virtual bool | isValid (int irow, int icol, bool printWhyNot=false) const |
virtual bool | isIdentity (bool printWhyNot=false) const |
virtual bool | isSymmetric (bool printWhyNot=false, double eps=EPSILON10) const |
virtual bool | isDiagonal (bool printWhyNot=false) const |
virtual bool | isDiagCst (bool printWhyNot=false) const |
virtual bool | mustBeSymmetric () const |
virtual bool | mustBeDiagonal () const |
virtual bool | mustBeDiagCst () const |
virtual void | transposeInPlace () |
virtual VectorDouble | getRow (int irow) const |
virtual VectorDouble | getColumn (int icol) const |
void | addMatInPlace (const AMatrix &y, double cx=1., double cy=1.) |
void | prodMatInPlace (const AMatrix *matY, bool transposeY=false) |
void | prodNormMatMatInPlace (const AMatrix &a, const AMatrix &m, bool transpose=false) |
void | prodNormMatInPlace (const AMatrix &a, const VectorDouble &vec=VectorDouble(), bool transpose=false) |
void | resize (int nrows, int ncols) |
double | getValue (int irow, int icol) const |
void | setValue (int irow, int icol, double value) |
void | updValue (int irow, int icol, const EOperator &oper, double value) |
void | setValue_ (int irow, int icol, double value) |
void | updValue_ (int irow, int icol, const EOperator &oper, double value) |
double | getValue_ (int irow, int icol) const |
void | addValue (int irow, int icol, double value) |
bool | isSame (const AMatrix &m, double eps=EPSILON4, bool printWhyNot=false) |
bool | isSameSize (const AMatrix &m) const |
bool | empty () const |
double | compare (const AMatrix &mat) const |
int | getNRows () const |
int | getNCols () const |
int | size () const |
VectorDouble | getValues (bool byCol=true) const |
VectorDouble | getDiagonal (int shift=0) const |
bool | isColumnDefined (int icol) const |
bool | isRowDefined (int irow) const |
int | getNumberColumnDefined () const |
int | getNumberRowDefined () const |
bool | isFlagEigen () const |
bool | isNonNegative (bool verbose=false) |
void | prodMatVecInPlace (const VectorDouble &x, VectorDouble &y, bool transpose=false) const |
void | prodMatVecInPlacePtr (const double *x, double *y, bool transpose=false) const |
void | prodVecMatInPlace (const VectorDouble &x, VectorDouble &y, bool transpose=false) const |
void | prodVecMatInPlacePtr (const double *x, double *y, bool transpose=false) const |
double | quadraticMatrix (const VectorDouble &x, const VectorDouble &y) |
int | invert () |
int | solve (const VectorDouble &b, VectorDouble &x) const |
void | dumpElements (const String &title, int ifrom, int ito) const |
void | setIdentity (double value=1.) |
void | fillRandom (int seed=432432, double zeroPercent=0.1) |
void | setValues (const VectorDouble &values, bool byCol=true) |
double | getMeanByColumn (int icol) const |
double | getMinimum () const |
double | getMaximum () const |
double | getNormInf () const |
void | copyReduce (const AMatrix *x, const VectorInt &activeRows, const VectorInt &activeCols) |
void | copyElements (const AMatrix &m, double factor=1.) |
void | setFlagCheckAddress (bool flagCheckAddress) |
void | makePositiveColumn () |
void | linearCombination (double val1, const AMatrix *mat1, double val2=1., const AMatrix *mat2=nullptr) |
double | operator() (int row, int col) const |
double & | operator() (int row, int col) |
Public Member Functions inherited from AStringable | |
AStringable () | |
AStringable (const AStringable &r) | |
AStringable & | operator= (const AStringable &r) |
virtual | ~AStringable () |
virtual void | display (const AStringFormat *strfmt=nullptr) const final |
virtual void | display (int level) const final |
Public Member Functions inherited from ICloneable | |
ICloneable () | |
virtual | ~ICloneable () |
virtual ICloneable * | clone () const =0 |
Static Public Member Functions | |
static MatrixSparse * | createFromTriplet (const NF_Triplet &NF_T, int nrow=0, int ncol=0, int opt_eigen=-1) |
static MatrixSparse * | addMatMat (const MatrixSparse *x, const MatrixSparse *y, double cx=1., double cy=1.) |
static MatrixSparse * | diagVec (const VectorDouble &vec, int opt_eigen=-1) |
static MatrixSparse * | diagConstant (int number, double value=1., int opt_eigen=-1) |
static MatrixSparse * | diagMat (MatrixSparse *A, int oper_choice, int opt_eigen=-1) |
static MatrixSparse * | glue (const MatrixSparse *A1, const MatrixSparse *A2, bool flagShiftRow, bool flagShiftCol) |
Public Attributes | |
DECLARE_TOTL | |
Has a specific implementation in the Target language. More... | |
Sparse Matrix
DISABLE_WARNING_PUSH DISABLE_WARNING_COND_EXPR_CONSTANT DISABLE_WARNING_UNUSED_BUT_SET_VARIABLE DISABLE_WARNING_POP MatrixSparse::MatrixSparse | ( | int | nrow = 0 , |
int | ncol = 0 , |
||
int | opt_eigen = -1 |
||
) |
MatrixSparse::MatrixSparse | ( | const cs * | A, |
int | opt_eigen = -1 |
||
) |
MatrixSparse::MatrixSparse | ( | const MatrixSparse & | m | ) |
|
virtual |
|
virtual |
The next functions use specific definition of matrix (to avoid dynamic_cast) rather than manipulating AMatrix. They are no more generic of AMatrix.
Add a matrix (multiplied by a constant)
Updates the current Matrix as a linear combination of matrices as follows: this <- cx * this + cy * y
cx | Coefficient applied to the current Matrix |
cy | Coefficient applied to the Matrix 'y' |
y | Second Matrix in the Linear combination |
|
static |
|
overridevirtual |
Add a value to each matrix component
v | Add a scalar value to all terms of the current matrix |
Reimplemented from AMatrix.
|
overridevirtual |
Add value to matrix diagonal
v | Add constant value to the diagonal of the current Matrix |
Reimplemented from AMatrix.
void MatrixSparse::addValue | ( | int | row, |
int | col, | ||
double | value | ||
) |
int MatrixSparse::addVecInPlace | ( | const VectorDouble & | x, |
VectorDouble & | y | ||
) |
VectorInt MatrixSparse::colorCoding | ( | ) |
int MatrixSparse::computeCholesky | ( | ) |
double MatrixSparse::computeCholeskyLogDeterminant | ( | ) |
|
static |
|
static |
|
static |
Construct a sparse matrix with the diagonal of 'A', where each element is transformed
A | Input sparse matrix |
oper_choice | Operation on the diagonal term (see Utilities::operate_XXX) |
opt_eigen | Option for choosing Eigen Library or not |
|
static |
|
overridevirtual |
|
overridevirtual |
void MatrixSparse::dumpElements | ( | const String & | title, |
int | ifrom, | ||
int | ito | ||
) | const |
Dump a specific range of samples from the internal storage
VectorDouble MatrixSparse::extractDiag | ( | int | oper_choice = 1 | ) | const |
MatrixSparse * MatrixSparse::extractSubmatrixByColor | ( | const VectorInt & | colors, |
int | ref_color, | ||
bool | row_ok, | ||
bool | col_ok | ||
) |
MatrixSparse * MatrixSparse::extractSubmatrixByRanks | ( | const VectorInt & | rank_rows, |
const VectorInt & | rank_cols | ||
) |
|
overridevirtual |
Set all the values of the matrix at once
Change any nonzero term to 'value'
value | Constant value used for filling 'this' |
Reimplemented from AMatrix.
void MatrixSparse::fillRandom | ( | int | seed = 432432 , |
double | zeroPercent = 0.1 |
||
) |
Set all the values of the Matrix with random values
void MatrixSparse::freeCS | ( | ) |
const cs * MatrixSparse::getCS | ( | ) | const |
Returns a pointer to the Sparse storage
cs * MatrixSparse::getCSUnprotected | ( | ) | const |
Temporary function to get the CS contents of Sparse Matrix
|
inline |
|
overridevirtual |
Extract the contents of the matrix
From a matrix of any type, creates the triplet (specific format for creating efficiently a Sparse matrix) It only takes the only non-zero elements of the matrix
Reimplemented from AMatrix.
|
inline |
void MatrixSparse::getStats | ( | int * | nrows, |
int * | ncols, | ||
int * | count, | ||
double * | percent | ||
) | const |
double MatrixSparse::getValue | ( | int | row, |
int | col | ||
) | const |
|
static |
void MatrixSparse::init | ( | int | nrows, |
int | ncols | ||
) |
|
inlinevirtual |
Returns if the matrix belongs to the MatrixSparse class (avoids dynamic_cast)
Implements AMatrix.
|
inlinevirtual |
double MatrixSparse::L1Norm | ( | ) | const |
|
overridevirtual |
|
overridevirtual |
MatrixSparse & MatrixSparse::operator= | ( | const MatrixSparse & | m | ) |
|
overridevirtual |
Multiply a matrix by another and stored in 'this'
Store the product of 'x' by 'y' in this
x | First Matrix |
y | Second matrix |
transposeX | True if First matrix is transposed |
transposeY | True if Second matrix is transposed |
Reimplemented from AMatrix.
|
overridevirtual |
Perform y = 'this' %*% x
Reimplemented from AMatrix.
void MatrixSparse::prodNormDiagVecInPlace | ( | const VectorDouble & | vec, |
int | oper_choice = 1 |
||
) |
Perform: 'this' = diag('vec') %*% 'A' %*% diag('vec')
vec | Input Vector |
oper_choice | Type of transformation |
|
virtual |
Product 't(A)' %*% ['vec'] %*% 'A' or 'A' %*% ['vec'] %*% 't(A)' stored in 'this'
|
virtual |
Product 't(A)' %*% 'M' %*% 'A' or 'A' %*% 'M' %*% 't(A)' stored in 'this'
|
overridevirtual |
Multiply each matrix component by a value
v | Multiply all the terms of the matrix by the scalar 'v' |
Reimplemented from AMatrix.
|
overridevirtual |
Perform y = x %*% 'this'
Reimplemented from AMatrix.
void MatrixSparse::reset | ( | int | nrows, |
int | ncols | ||
) |
void MatrixSparse::reset | ( | int | nrows, |
int | ncols, | ||
double | value | ||
) |
void MatrixSparse::reset | ( | int | nrows, |
int | ncols, | ||
const double * | tab, | ||
bool | byCol = true |
||
) |
void MatrixSparse::reset | ( | int | nrows, |
int | ncols, | ||
const VectorDouble & | tab, | ||
bool | byCol = true |
||
) |
void MatrixSparse::reset | ( | const VectorVectorDouble & | tab, |
bool | byCol = true |
||
) |
void MatrixSparse::resetFromTriplet | ( | const NF_Triplet & | NF_T | ) |
int MatrixSparse::scaleByDiag | ( | ) |
|
overridevirtual |
Set the contents of a Column
Fill a column of an already existing Sparse matrix, using 'tab' as entry The input 'tab' corresponds to the whole column contents
icol | Column rank |
tab | Vector containing the information (Dimension: nrows) |
Reimplemented from AMatrix.
void MatrixSparse::setConstant | ( | double | value | ) |
void MatrixSparse::setCS | ( | cs * | cs | ) |
|
overridevirtual |
Set the contents of the (main) Diagonal
Reimplemented from AMatrix.
|
overridevirtual |
Set the contents of the (main) Diagonal to a constant value
Reimplemented from AMatrix.
|
inline |
|
overridevirtual |
Set the contents of a Row
Fill a row of an already existing Sparse matrix, using 'tab' as entry The input 'tab' corresponds to the whole row contents
irow | Row rank |
tab | Vector containing the information (Dimension: ncols) |
Reimplemented from AMatrix.
int MatrixSparse::simulateCholesky | ( | const VectorDouble & | b, |
VectorDouble & | x | ||
) |
int MatrixSparse::solveCholesky | ( | const VectorDouble & | b, |
VectorDouble & | x | ||
) |
|
overridevirtual |
|
overridevirtual |
Transpose the matrix and return it as a copy
Reimplemented from AMatrix.
MatrixSparse::DECLARE_TOTL |
Has a specific implementation in the Target language.