1.2.3
CCC
 
MatrixSquareSymmetric Class Reference

#include <MatrixSquareSymmetric.hpp>

Inheritance diagram for MatrixSquareSymmetric:
AMatrixSquare MatrixRectangular AMatrixDense AMatrix AStringable ICloneable

Public Member Functions

 MatrixSquareSymmetric (int nrow=0, int opt_eigen=-1)
 
 MatrixSquareSymmetric (const MatrixSquareSymmetric &m)
 
 MatrixSquareSymmetric (const AMatrix &m)
 
MatrixSquareSymmetricoperator= (const MatrixSquareSymmetric &r)
 
virtual ~MatrixSquareSymmetric ()
 
bool mustBeSymmetric () const final
 ICloneable interface. More...
 
virtual bool mustBeDiagonal () const override
 
virtual bool mustBeDiagCst () const override
 
bool isSymmetric (bool printWhyNot=false, double eps=EPSILON10) const final
 Is the matrix symmetrical ? More...
 
void normMatrix (const AMatrix &y, const AMatrixSquare &x=AMatrixSquare(), bool transpose=false)
 
int computeEigen (bool optionPositive=true)
 
int computeGeneralizedEigen (const MatrixSquareSymmetric &b, bool optionPositive=true)
 
int computeGeneralizedInverse (MatrixSquareSymmetric &tabout, double maxicond=1.e20, double eps=EPSILON20)
 
bool isDefinitePositive ()
 
int minimizeWithConstraintsInPlace (const VectorDouble &gmat, const MatrixRectangular &aemat, const VectorDouble &bemat, const MatrixRectangular &aimat, const VectorDouble &bimat, VectorDouble &xmat)
 
int getTriangleSize () const
 
int computeCholesky ()
 
int invertCholesky ()
 
int solveCholeskyMat (const MatrixRectangular &b, MatrixRectangular &x)
 
int solveCholesky (const VectorDouble &b, VectorDouble &x)
 
VectorDouble getCholeskyTL () const
 
VectorDouble getCholeskyXL () const
 
MatrixRectangular productCholeskyInPlace (int mode, int neq, int nrhs, const VectorDouble &tl, const MatrixRectangular &a)
 
MatrixSquareSymmetric normCholeskyInPlace (int mode, int neq, const VectorDouble &tl, const MatrixSquareSymmetric &a)
 
double computeCholeskyLogDeterminant () const
 
- Public Member Functions inherited from AMatrixSquare
 AMatrixSquare (int nrow=0, int opt_eigen=-1)
 
 AMatrixSquare (const AMatrixSquare &m)
 
 AMatrixSquare (const AMatrix &m)
 
AMatrixSquareoperator= (const AMatrixSquare &r)
 
virtual ~AMatrixSquare ()
 
virtual double determinant (void) const
 Interface for AMatrix. More...
 
bool isSquare (bool printWhyNot=false) const override
 
int getNSize () const
 
double trace () const
 
void innerMatrix (const AMatrixSquare &x, const AMatrix &r1, const AMatrix &r2)
 
void prodDiagByVector (const VectorDouble &diag)
 
void divideDiagByVector (const VectorDouble &diag)
 
void prodByDiagInPlace (int mode, const VectorDouble &c)
 
double normVec (const VectorDouble &vec)
 
- Public Member Functions inherited from MatrixRectangular
 MatrixRectangular (int nrow=0, int ncol=0, int opt_eigen=-1)
 
 MatrixRectangular (const MatrixRectangular &m)
 
 MatrixRectangular (const AMatrix &m)
 
MatrixRectangularoperator= (const MatrixRectangular &r)
 
virtual ~MatrixRectangular ()
 
void addRow (int nrow_added=1)
 
void addColumn (int ncolumn_added=1)
 
- Public Member Functions inherited from AMatrixDense
 AMatrixDense (int nrow=0, int ncol=0, int opt_eigen=-1)
 
 AMatrixDense (const AMatrixDense &m)
 
 AMatrixDense (const AMatrix &m)
 
AMatrixDenseoperator= (const AMatrixDense &r)
 
virtual ~AMatrixDense ()
 
virtual bool isDense () const
 Interface for AMatrix. More...
 
virtual bool isSparse () 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 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 VectorDouble getRow (int irow) const override
 
virtual VectorDouble getColumn (int icol) const override
 
virtual void prodMatMatInPlace (const AMatrix *x, const AMatrix *y, bool transposeX=false, bool transposeY=false) override
 
void addMatInPlace (const AMatrixDense &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 not generic of AMatrix anymore. WARNING: output matrix should not match any of input matrices (speed up). More...
 
virtual void prodNormMatMatInPlace (const AMatrixDense &a, const AMatrixDense &m, bool transpose=false)
 
virtual void prodNormMatInPlace (const AMatrixDense &a, const VectorDouble &vec=VectorDouble(), bool transpose=false)
 
VectorDouble getEigenValues () const
 
const MatrixSquareGeneralgetEigenVectors () const
 
- Public Member Functions inherited from AMatrix
 AMatrix (int nrow=0, int ncol=0, int opt_eigen=-1)
 
 AMatrix (const AMatrix &m)
 
AMatrixoperator= (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 String toString (const AStringFormat *strfmt=nullptr) const override
 Interface to AStringable. More...
 
virtual bool isValid (int irow, int icol, bool printWhyNot=false) const
 
virtual bool isIdentity (bool printWhyNot=false) const
 
virtual bool isDiagonal (bool printWhyNot=false) const
 
virtual bool isDiagCst (bool printWhyNot=false) const
 
virtual void transposeInPlace ()
 
virtual AMatrixtranspose () const
 
virtual NF_Triplet getMatrixToTriplet (int shiftRow=0, int shiftCol=0) 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)
 
AStringableoperator= (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 ICloneableclone () const =0
 

Static Public Member Functions

static MatrixSquareSymmetriccreateFromVVD (const VectorVectorDouble &X, int opt_eigen=-1)
 
static MatrixSquareSymmetriccreateFromVD (const VectorDouble &X, int nrow, int opt_eigen=-1)
 
static MatrixSquareSymmetriccreateFromTLTU (int neq, const VectorDouble &tl, int opt_eigen=-1)
 
static MatrixSquareSymmetriccreateFromTriangle (int mode, int neq, const VectorDouble &tl, int opt_eigen=-1)
 
- Static Public Member Functions inherited from MatrixRectangular
static MatrixRectangularcreateFromVVD (const VectorVectorDouble &X, int opt_eigen=-1)
 
static MatrixRectangularcreateFromVD (const VectorDouble &X, int nrow, int ncol, bool byCol=false, int opt_eigen=-1, bool invertColumnOrder=false)
 
static MatrixRectangularglue (const AMatrix *A1, const AMatrix *A2, bool flagShiftRow, bool flagShiftCol)
 

Public Attributes

 DECLARE_TOTL
 Has a specific implementation in the Target language. More...
 
- Public Attributes inherited from MatrixRectangular
 DECLARE_TOTL
 Has a specific implementation in the Target language. More...
 

Detailed Description

Square Symmetric matrices are stored as Lower Triangular matrices stored by column

Constructor & Destructor Documentation

MatrixSquareSymmetric::MatrixSquareSymmetric ( int  nrow = 0,
int  opt_eigen = -1 
)
MatrixSquareSymmetric::MatrixSquareSymmetric ( const MatrixSquareSymmetric m)
MatrixSquareSymmetric::MatrixSquareSymmetric ( const AMatrix m)
MatrixSquareSymmetric::~MatrixSquareSymmetric ( )
virtual

Member Function Documentation

int MatrixSquareSymmetric::computeCholesky ( )

Performs the Cholesky triangular decomposition of a definite positive symmetric matrix A = t(TL) * TL

Returns
Error return code
double MatrixSquareSymmetric::computeCholeskyLogDeterminant ( ) const
int MatrixSquareSymmetric::computeEigen ( bool  optionPositive = true)
int MatrixSquareSymmetric::computeGeneralizedEigen ( const MatrixSquareSymmetric b,
bool  optionPositive = true 
)
int MatrixSquareSymmetric::computeGeneralizedInverse ( MatrixSquareSymmetric tabout,
double  maxicond = 1.e20,
double  eps = EPSILON20 
)

Calculate the generalized inverse of the input square symmetric matrix

Returns
Error returned code
Parameters
[out]taboutInverted matrix (suqrae symmetric)
[out]maxicondMaximum value for the Condition Index (MAX(ABS(eigval)))
[in]epsTolerance
Remarks
The input and output matrices can match
MatrixSquareSymmetric * MatrixSquareSymmetric::createFromTLTU ( int  neq,
const VectorDouble tl,
int  opt_eigen = -1 
)
static

Create the Symmetric matrix as the product of 'tl' (lower triangle) by its transpose

Parameters
[in]neqNumber of rows or columns in the system
[in]tlLower triangular matrix defined by column (Dimension; neq*(neq+1)/2)
[in]opt_eigenOption for use of Eigen Library
MatrixSquareSymmetric * MatrixSquareSymmetric::createFromTriangle ( int  mode,
int  neq,
const VectorDouble tl,
int  opt_eigen = -1 
)
static

Fill a square matrix with a triangular matrix

Parameters
[in]mode0: TL (upper); 1: TL (lower)
[in]neqnumber of equations in the system
[in]tlTriangular matrix (lower part)
[in]opt_eigenOption for use of Eigen Library
MatrixSquareSymmetric * MatrixSquareSymmetric::createFromVD ( const VectorDouble X,
int  nrow,
int  opt_eigen = -1 
)
static
MatrixSquareSymmetric * MatrixSquareSymmetric::createFromVVD ( const VectorVectorDouble X,
int  opt_eigen = -1 
)
static

Converts a VectorVectorDouble into a Square Symmetric Matrix Note: the input argument is stored by row (if coming from [] specification)

Parameters
XInput VectorVectorDouble argument
opt_eigenOption for use of Eigen Library
Returns
The returned square symmetric matrix
Remarks
: the matrix is transposed implicitly while reading
VectorDouble MatrixSquareSymmetric::getCholeskyTL ( ) const
VectorDouble MatrixSquareSymmetric::getCholeskyXL ( ) const
int MatrixSquareSymmetric::getTriangleSize ( ) const
int MatrixSquareSymmetric::invertCholesky ( )

Invert the Cholesky matrix

bool MatrixSquareSymmetric::isDefinitePositive ( )

Check if a matrix is definite positive

Returns
True if the matrix is definite positive; False otherwise
bool MatrixSquareSymmetric::isSymmetric ( bool  printWhyNot = false,
double  eps = EPSILON10 
) const
inlinefinalvirtual

Is the matrix symmetrical ?

Reimplemented from AMatrix.

int MatrixSquareSymmetric::minimizeWithConstraintsInPlace ( const VectorDouble gmat,
const MatrixRectangular aemat,
const VectorDouble bemat,
const MatrixRectangular aimat,
const VectorDouble bimat,
VectorDouble xmat 
)

Minimize 1/2 t(x) %*% H %*% x + t(g) %*% x under the constraints t(Ae) %*% x = be and t(Ai) %*% x = bi

Returns
Error return code
Parameters
[in]gmatright-hand side vector (Dimension: neq)
[in]aematMatrix rectangular for equalities (Dimension: neq * nae)
[in]bematright-hand side for equalities (Dimension: nae)
[in]aimatMatrix rectangular for inequalities (Dimension: neq * nai)
[in]bimatright-hand side for inequalities (Dimension: nai)
[in,out]xmatsolution of the linear system with constraints (neq)

REMARKS: The initial xmat has to be satisfied by all the constraints.

virtual bool MatrixSquareSymmetric::mustBeDiagCst ( ) const
inlineoverridevirtual

Say if the matrix must be diagonal constant

Reimplemented from MatrixRectangular.

virtual bool MatrixSquareSymmetric::mustBeDiagonal ( ) const
inlineoverridevirtual

Say if the matrix must be diagonal

Reimplemented from MatrixRectangular.

bool MatrixSquareSymmetric::mustBeSymmetric ( ) const
inlinefinalvirtual

ICloneable interface.

Interface to AMatrix

Say if the matrix must be symmetric

Reimplemented from MatrixRectangular.

MatrixSquareSymmetric MatrixSquareSymmetric::normCholeskyInPlace ( int  mode,
int  neq,
const VectorDouble tl,
const MatrixSquareSymmetric a 
)

Performs the product B = TL * A * TU or TU * A * TL where TL,TU is a triangular matrix and A a square symmetric matrix

Parameters
[in]mode0: TL * A * TU; 1: TU * A * TL
[in]neqnumber of equations in the system
[in]tlTriangular matrix defined by column
[in]aSquare symmetric matrix (optional)
void MatrixSquareSymmetric::normMatrix ( const AMatrix y,
const AMatrixSquare x = AMatrixSquare(),
bool  transpose = false 
)

Perform the product: this = t(Y) %*% X %*% Y (T=false) or Y % X %*% t(Y) (T=true)

Parameters
yMatrix (possibly rectangular)
xSquare matrix (optional)
transposetransposition flag (T in the description)
Remarks
The number of rows of Y must be equal to the dimension of X
The output matrix is square with dimension equal to the number of columns of Y
MatrixSquareSymmetric & MatrixSquareSymmetric::operator= ( const MatrixSquareSymmetric r)
MatrixRectangular MatrixSquareSymmetric::productCholeskyInPlace ( int  mode,
int  neq,
int  nrhs,
const VectorDouble tl,
const MatrixRectangular a 
)

Performs the product between a triangular and a square matrix TL is the lower triangular matrix and X is a square matrix

Parameters
[in]modeType of calculations: 0 : X=TU%*A 1 : X=TL%*A 2 : X=A%*TU 3 : X=A%*TL 4 : X=t(A)%*TU 5 : X=t(A)%*TL
[in]neqnumber of equations in the system
[in]nrhsnumber of columns in x
[in]tlTriangular matrix defined by column
[in]amatrix (dimension neq * nrhs)
int MatrixSquareSymmetric::solveCholesky ( const VectorDouble b,
VectorDouble x 
)
int MatrixSquareSymmetric::solveCholeskyMat ( const MatrixRectangular b,
MatrixRectangular x 
)

Member Data Documentation

MatrixSquareSymmetric::DECLARE_TOTL

Has a specific implementation in the Target language.


The documentation for this class was generated from the following files: