1.8.0
CCC
 
Loading...
Searching...
No Matches
gstlrn::MatrixSymmetric Class Reference

#include <MatrixSymmetric.hpp>

Inheritance diagram for gstlrn::MatrixSymmetric:
gstlrn::MatrixSquare gstlrn::MatrixDense gstlrn::AMatrix gstlrn::AStringable gstlrn::ICloneable

Detailed Description

Square Symmetric matrices

Public Member Functions

 MatrixSymmetric (Id nrow=0)
 
 MatrixSymmetric (const MatrixSymmetric &m)
 
 MatrixSymmetric (const AMatrix &m)
 
MatrixSymmetricoperator= (const MatrixSymmetric &m)
 
virtual ~MatrixSymmetric ()
 
bool mustBeSymmetric () const final
 ICloneable interface.
 
bool isSymmetric (double eps=EPSILON10, bool printWhyNot=false) const final
 
void resetFromVVD (const 1 &tab, bool byCol=true) override
 Reset the matrix from an array of double values.
 
void normMatrix (const AMatrix &y, const MatrixSquare &x=MatrixSquare(), bool transpose=false)
 
Id computeEigen (bool optionPositive=true)
 
Id computeGeneralizedEigen (const MatrixSymmetric &b, bool optionPositive=true)
 
Id computeGeneralizedInverse (MatrixSymmetric &tabout, double maxicond=1.e20, double eps=EPSILON20)
 
bool isDefinitePositive ()
 
Id minimizeWithConstraintsInPlace (const 1 &gmat, const MatrixDense &aemat, const 1 &bemat, const MatrixDense &aimat, const 1 &bimat, 1 &xmat)
 
bool _isPhysicallyPresent (Id irow, Id icol) const override
 
void _setValues (const double *values, bool byCol=true) override
 
Id _invert () override
 
Id _matrix_qo (const 1 &gmat, 1 &xmat)
 
Id _matrix_qoc (bool flag_invert, const 1 &gmat, Id na, const MatrixDense &amat, const 1 &bmat, 1 &xmat, 1 &lambda)
 
Id _constraintsError (const 1 &active, const MatrixDense &aimat, const 1 &bimat, const 1 &xmat, 1 &vmat, 1 &flag)
 
Id _terminateEigen (const 1 &eigenValues, const 1 &eigenVectors, bool optionPositive=true, bool changeOrder=false)
 
MatrixSymmetric compress0MatLC (const MatrixDense &matLC)
 
- Public Member Functions inherited from gstlrn::MatrixSquare
 MatrixSquare (Id nrow=0)
 
 MatrixSquare (const MatrixSquare &r)
 
 MatrixSquare (const AMatrix &m)
 
MatrixSquareoperator= (const MatrixSquare &r)
 
virtual ~MatrixSquare ()
 
virtual double determinant (void) const
 ICloneable interface.
 
bool isSquare (bool printWhyNot=false) const override
 
Id getNSize () const
 
double trace () const
 
void innerMatrix (const MatrixSquare &x, const AMatrix &r1, const AMatrix &r2)
 
void prodDiagByVector (const 1 &diag)
 
void divideDiagByVector (const 1 &diag)
 
void prodByDiagInPlace (Id mode, const 1 &c)
 
double normVec (const 1 &vec)
 
Id decomposeLU (MatrixSquare &tls, MatrixSquare &tus, double eps=EPSILON20)
 
Id computeEigen (bool optionPositive=true)
 
- Public Member Functions inherited from gstlrn::MatrixDense
 MatrixDense (Id nrow=0, Id ncol=0)
 
 MatrixDense (const MatrixDense &r)
 
 MatrixDense (const AMatrix &r)
 
MatrixDenseoperator= (const MatrixDense &r)
 
virtual ~MatrixDense ()
 
bool isDense () const override
 Cloneable interface.
 
bool isSparse () const override
 
double getValue (Id irow, Id icol) const override
 
void setValue (Id irow, Id icol, double value) override
 
void updValue (Id irow, Id icol, const EOperator &oper, double value) override
 
void setColumn (Id icol, const 1 &tab) override
 
void setColumnToConstant (Id icol, double value) override
 
void setRow (Id irow, const 1 &tab) override
 
void setRowToConstant (Id irow, double value) override
 
void setDiagonal (const 1 &tab) override
 
void setDiagonalToConstant (double value=1.) override
 
void addScalar (double v) override
 
void addScalarDiag (double v) override
 
void prodScalar (double v) override
 
void fill (double value) override
 
void multiplyRow (const 1 &vec) override
 
void multiplyColumn (const 1 &vec) override
 
void divideRow (const 1 &vec) override
 
void divideColumn (const 1 &vec) override
 
 getRow (Id irow) const override
 
 getColumn (Id icol) const override
 
void prodMatMatInPlace (const AMatrix *x, const AMatrix *y, bool transposeX=false, bool transposeY=false) override
 
void prodNormMatMatInPlace (const AMatrix *a, const AMatrix *m, bool transpose=false) override
 
void prodNormMatVecInPlace (const AMatrix *a, const 1 &vec, bool transpose=false) override
 
void prodNormMatInPlace (const AMatrix *a, bool transpose=false) override
 
void linearCombination (double val1, const AMatrix *mat1, double val2=1., const AMatrix *mat2=nullptr, double val3=1., const AMatrix *mat3=nullptr) override
 
void addMat (const AMatrix &y, double cx=1., double cy=1.) override
 
const & getEigenValues () const
 
const MatrixSquaregetEigenVectors () const
 
Id invert2 (MatrixDense &res) const
 
void unsample (const AMatrix *A, const 1 &rowFetch, const 1 &colFetch, bool flagInvertRow=false, bool flagInvertCol=false)
 Set the values contained in 'A' into the current matrix.
 
MatrixDense compressMatLC (const MatrixDense &matLC, bool transpose=false)
 Perform the compressing product, according to 'transpose'.
 
void addRow (Id nrow_added=1)
 
void addColumn (Id ncolumn_added=1)
 
constvect getColumnPtr (Id icol) const
 
constvect getViewOnColumn (Id icol) const
 
vect getViewOnColumnModify (Id icol)
 
Eigen::Map< const Eigen::MatrixXd > eigenMat () const
 
Eigen::Map< Eigen::MatrixXd > eigenMat ()
 
- Public Member Functions inherited from gstlrn::AMatrix
 AMatrix (Id nrow=0, Id ncol=0)
 
 AMatrix (const AMatrix &m)
 
AMatrixoperator= (const AMatrix &m)
 
virtual ~AMatrix ()
 
String toString (const AStringFormat *strfmt=nullptr) const override
 Interface to AStringable.
 
virtual void reset (Id nrows, Id ncols)
 
virtual void resetFromValue (Id nrows, Id ncols, double value)
 Reset the matrix to new dimensions and fill with a new value.
 
virtual void resetFromArray (Id nrows, Id ncols, const double *tab, bool byCol=true)
 Reset the matrix from an array of double values.
 
virtual void resetFromVD (Id nrows, Id ncols, const 1 &tab, bool byCol=true)
 Reset the matrix from a vector of double values.
 
virtual void transposeInPlace ()
 
virtual AMatrixtranspose () const
 
virtual NF_Triplet getMatrixToTriplet (Id shiftRow=0, Id shiftCol=0) const
 
void clear ()
 
void resize (Id nrows, Id ncols)
 Resize the matrix to new dimensions (this method doesn't change the storage type)
 
bool isValid (Id irow, Id icol, bool printWhyNot=false) const
 
bool isIdentity (bool printWhyNot=false) const
 
void addValue (Id irow, Id 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
 
Id getNRows () const
 
Id getNCols () const
 
Id size () const
 
 getValues (bool byCol=true) const
 
const & getDiagonal (Id shift=0) const
 
bool isColumnDefined (Id icol) const
 
bool isRowDefined (Id irow) const
 
Id getNColDefined () const
 
Id getNRowDefined () const
 
 getColumnByRowRange (Id icol, Id rowFrom, Id rowTo) const
 
bool isNonNegative (bool verbose=false) const
 
 prodMatVec (const 1 &x, bool transpose=false) const
 
void prodMatVecInPlace (const 1 &x, 1 &y, bool transpose=false) const
 
void prodMatVecInPlaceC (const constvect x, vect y, bool transpose=false) const
 
void addProdMatVecInPlaceC (const constvect x, vect y, bool transpose=false) const
 
 prodVecMat (const 1 &x, bool transpose=false) const
 
void prodVecMatInPlace (const 1 &x, 1 &y, bool transpose=false) const
 
void prodVecMatInPlaceC (const constvect x, vect y, bool transpose=false) const
 
void addProdVecMatInPlaceC (const constvect x, vect y, bool transpose=false) const
 
double prodVecMatVec (const 1 &x, const 1 &y) const
 
void prodMat (const AMatrix *matY, bool transposeY=false)
 
Id invert ()
 
Id solve (const 1 &b, 1 &x) const
 
void dumpElements (const String &title, Id ifrom, Id ito) const
 
void dumpStatistics (const String &title) const
 
void setIdentity (double value=1.)
 
void fillRandom (Id seed=432432, double zeroPercent=0)
 
void setValues (const 1 &values, bool byCol=true)
 
double getMeanByColumn (Id icol) const
 
double getMinimum () const
 
double getMaximum () const
 
double getNormInf () const
 
void copyReduce (const AMatrix *x, const 1 &validRows, const 1 &validCols)
 
void copyElements (const AMatrix &m, double factor=1.)
 
void makePositiveColumn ()
 
void dumpRange (const char *title)
 
double operator() (Id row, Id col) const
 
double & operator() (Id row, Id col)
 
- Public Member Functions inherited from gstlrn::AStringable
 AStringable ()
 
 AStringable (const AStringable &r)
 
AStringableoperator= (const AStringable &r)
 
virtual ~AStringable ()
 
virtual void display (const AStringFormat *strfmt=nullptr) const final
 
virtual void display (Id level) const final
 
- Public Member Functions inherited from gstlrn::ICloneable
 ICloneable ()
 
virtual ~ICloneable ()
 
virtual ICloneableclone () const =0
 
std::shared_ptr< ICloneablecloneShared () const
 
std::unique_ptr< ICloneablecloneUnique () const
 

Static Public Member Functions

static MatrixSymmetriccreateFromVVD (const 1 &X)
 
static MatrixSymmetriccreateFromVD (const 1 &X)
 
static MatrixSymmetriccreateFromTLTU (Id neq, const 1 &tl)
 
static MatrixSymmetriccreateFromTriangle (Id mode, Id neq, const 1 &tl)
 
static MatrixSymmetriccreateRandomDefinitePositive (Id neq, Id seed=13242)
 
static bool sample (MatrixSymmetric &res, const MatrixSymmetric &A, const 1 &rowKeep, bool flagInvert=false)
 Create an output Square Symmetric Matrix by selecting some rows (and columns) of the Input matrix 'A'.
 
static Id _constraintsConcatenateMat (Id nae, Id nai, Id neq, const 1 &active, const MatrixDense &tabemat, const MatrixDense &tabimat, MatrixDense &tabout)
 
static Id _constraintsConcatenateVD (Id nae, Id nai, const 1 &active, const 1 &tabemat, const 1 &tabimat, 1 &tabout)
 
static Id _constraintsCount (Id nai, 1 &active)
 
- Static Public Member Functions inherited from gstlrn::MatrixSquare
static MatrixSquarecreateFromVVD (const 1 &X)
 
static MatrixSquarecreateFromVD (const 1 &X, Id nrow, bool byCol=false, bool invertColumnOrder=false)
 
static MatrixSquarecreateFromTridiagonal (const 1 &vecdiag, const 1 &vecinf, const 1 &vecsup)
 Create a square matrix from three diagonals.
 
- Static Public Member Functions inherited from gstlrn::MatrixDense
static MatrixDensecreate (const MatrixDense *mat)
 
static MatrixDensecreate (Id nrow, Id ncol)
 
static double traceProd (const MatrixDense &a, MatrixDense &b)
 
static MatrixDensecreateFromVVD (const 1 &X)
 
static MatrixDensecreateFromVD (const 1 &X, Id nrow, Id ncol, bool byCol=false, bool invertColumnOrder=false)
 
static MatrixDenseglue (const AMatrix *A1, const AMatrix *A2, bool flagShiftRow, bool flagShiftCol)
 
static bool sample (MatrixDense &res, const AMatrix &A, const 1 &rowKeep=1(), const 1 &colKeep=1(), bool flagInvertRow=false, bool flagInvertCol=false)
 Create an output Rectangular Matrix by selecting some rows and columns of the Input matrix 'A'.
 
static void sum (const MatrixDense *mat1, const MatrixDense *mat2, MatrixDense *mat3)
 

Public Attributes

 DECLARE_TOTL
 Has a specific implementation in the Target language.
 
- Public Attributes inherited from gstlrn::MatrixSquare
 DECLARE_TOTL
 Has a specific implementation in the Target language.
 
- Public Attributes inherited from gstlrn::MatrixDense
 DECLARE_TOTL
 Has a specific implementation in the Target language.
 

Constructor & Destructor Documentation

◆ MatrixSymmetric() [1/3]

gstlrn::MatrixSymmetric::MatrixSymmetric ( Id  nrow = 0)

◆ MatrixSymmetric() [2/3]

gstlrn::MatrixSymmetric::MatrixSymmetric ( const MatrixSymmetric m)

◆ MatrixSymmetric() [3/3]

gstlrn::MatrixSymmetric::MatrixSymmetric ( const AMatrix m)

◆ ~MatrixSymmetric()

gstlrn::MatrixSymmetric::~MatrixSymmetric ( )
virtual

Member Function Documentation

◆ _constraintsConcatenateMat()

Id gstlrn::MatrixSymmetric::_constraintsConcatenateMat ( Id  nae,
Id  nai,
Id  neq,
const 1 &  active,
const MatrixDense tabemat,
const MatrixDense tabimat,
MatrixDense tabout 
)
static

Concatenate the equality and the active inequality material

Returns
The total number of constraints
Parameters
[in]naeNumber of equalities
[in]naiNumber of inequalities
[in]neqFirst dimension of the array
[in]activeArray of active/non active inequalities
[in]tabematEquality material (Dimension: neq * nai)
[in]tabimatInequality material
[out]taboutOutput array

◆ _constraintsConcatenateVD()

Id gstlrn::MatrixSymmetric::_constraintsConcatenateVD ( Id  nae,
Id  nai,
const 1 &  active,
const 1 &  tabemat,
const 1 &  tabimat,
1 &  tabout 
)
static

Concatenate the equality and the active inequality material

Returns
The total number of constraints
Parameters
[in]naeNumber of equalities
[in]naiNumber of inequalities
[in]activeArray of active/non active inequalities
[in]tabematEquality material (Dimension: neq * nai)
[in]tabimatInequality material
[out]taboutOutput array

◆ _constraintsCount()

Id gstlrn::MatrixSymmetric::_constraintsCount ( Id  nai,
1 &  active 
)
static

Count the number of active constraints

Returns
Number of active constraints
Parameters
[in]naiNumber of constraints
[in]activeArray of constraint status

◆ _constraintsError()

Id gstlrn::MatrixSymmetric::_constraintsError ( const 1 &  active,
const MatrixDense aimat,
const 1 &  bimat,
const 1 &  xmat,
1 &  vmat,
1 &  flag 
)

Calculate how constraints are fulfilled

Returns
Count of the constraints not fulfilled
Parameters
[in]activeArray of active/non active inequalities (optional)
[in]aimatInequality material (Dimension: neq * nai)
[in]bimatright-hand side for inequalities (Dimension: nai)
[out]xmatsolution of the linear system with no constraint (neq)
[out]vmatmatrix of errors (if not NULL)
[out]flagarray specifying if constraint is active (if not NULL)

◆ _invert()

Id gstlrn::MatrixSymmetric::_invert ( )
overridevirtual

Reimplemented from gstlrn::MatrixDense.

◆ _isPhysicallyPresent()

bool gstlrn::MatrixSymmetric::_isPhysicallyPresent ( Id  irow,
Id  icol 
) const
overridevirtual

Reimplemented from gstlrn::AMatrix.

◆ _matrix_qo()

Id gstlrn::MatrixSymmetric::_matrix_qo ( const 1 &  gmat,
1 &  xmat 
)

Solve a linear system: H %*% g = x

Returns
Error return code
Parameters
[in]gmatright-hand side vector (Dimension: neq)
[out]xmatsolution vector (Dimension: neq)
Remarks
In output, 'this' contains the inverse matrix

◆ _matrix_qoc()

Id gstlrn::MatrixSymmetric::_matrix_qoc ( bool  flag_invert,
const 1 &  gmat,
Id  na,
const MatrixDense amat,
const 1 &  bmat,
1 &  xmat,
1 &  lambda 
)

Minimize 1/2 t(x) %*% H %*% x + t(g) %*% x under the constraints t(A) %*% x = b

Returns
Error return code
Parameters
[in]flag_invertTells if the inverse has already been calculated
[in]gmatright-hand side vector (Dimension: neq)
[in]naNumber of equalities
[in]amatmatrix for inequalities (Dimension: neq * na)
[in]bmatinequality vector (Dimension: na)
[in]xmatsolution of the linear system with no constraint. On return, solution with constraints (Dimension: neq)
[out]lambdaworking vector (Dimension: na)
Remarks
In input:
If flag_invert== 1, H is provided as the generalized inverse
and x contains the solution of the linear system with no constraint
If flag_invert==0, H is the primal matrix
In output, H contains the inverse matrix

◆ _setValues()

void gstlrn::MatrixSymmetric::_setValues ( const double *  values,
bool  byCol = true 
)
overridevirtual
Warning
: values is provided as a square complete matrix

Reimplemented from gstlrn::AMatrix.

◆ _terminateEigen()

Id gstlrn::MatrixSymmetric::_terminateEigen ( const 1 &  eigenValues,
const 1 &  eigenVectors,
bool  optionPositive = true,
bool  changeOrder = false 
)

◆ compress0MatLC()

MatrixSymmetric gstlrn::MatrixSymmetric::compress0MatLC ( const MatrixDense matLC)

◆ computeEigen()

Id gstlrn::MatrixSymmetric::computeEigen ( bool  optionPositive = true)

◆ computeGeneralizedEigen()

Id gstlrn::MatrixSymmetric::computeGeneralizedEigen ( const MatrixSymmetric b,
bool  optionPositive = true 
)

◆ computeGeneralizedInverse()

Id gstlrn::MatrixSymmetric::computeGeneralizedInverse ( MatrixSymmetric 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

◆ createFromTLTU()

MatrixSymmetric * gstlrn::MatrixSymmetric::createFromTLTU ( Id  neq,
const 1 &  tl 
)
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)

◆ createFromTriangle()

MatrixSymmetric * gstlrn::MatrixSymmetric::createFromTriangle ( Id  mode,
Id  neq,
const 1 &  tl 
)
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 (any part)

◆ createFromVD()

MatrixSymmetric * gstlrn::MatrixSymmetric::createFromVD ( const 1 &  X)
static

◆ createFromVVD()

MatrixSymmetric * gstlrn::MatrixSymmetric::createFromVVD ( const 1 &  X)
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
Returns
The returned square symmetric matrix
Remarks
: the matrix is transposed implicitly while reading

◆ createRandomDefinitePositive()

MatrixSymmetric * gstlrn::MatrixSymmetric::createRandomDefinitePositive ( Id  neq,
Id  seed = 13242 
)
static

◆ isDefinitePositive()

bool gstlrn::MatrixSymmetric::isDefinitePositive ( )

Check if a matrix is definite positive

Returns
True if the matrix is definite positive; False otherwise

◆ isSymmetric()

bool gstlrn::MatrixSymmetric::isSymmetric ( double  eps = EPSILON10,
bool  printWhyNot = false 
) const
inlinefinalvirtual

Check if the input matrix is (non empty and square) symmetric

Indicate if the current matrix is symmetric

Parameters
epsEpsilon for double equality comparison
printWhyNotPrint the message is the answer is false
Returns
true if the current matrix is symmetric

Reimplemented from gstlrn::AMatrix.

◆ minimizeWithConstraintsInPlace()

Id gstlrn::MatrixSymmetric::minimizeWithConstraintsInPlace ( const 1 &  gmat,
const MatrixDense aemat,
const 1 &  bemat,
const MatrixDense aimat,
const 1 &  bimat,
1 &  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.

◆ mustBeSymmetric()

bool gstlrn::MatrixSymmetric::mustBeSymmetric ( ) const
inlinefinalvirtual

ICloneable interface.

Interface to AMatrix

Reimplemented from gstlrn::MatrixSquare.

◆ normMatrix()

void gstlrn::MatrixSymmetric::normMatrix ( const AMatrix y,
const MatrixSquare x = MatrixSquare(),
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

◆ operator=()

MatrixSymmetric & gstlrn::MatrixSymmetric::operator= ( const MatrixSymmetric m)

◆ resetFromVVD()

void gstlrn::MatrixSymmetric::resetFromVVD ( const 1 &  tab,
bool  byCol = true 
)
overridevirtual

Reset the matrix from an array of double values.

Parameters
tabThe array of values
byColTrue if values are column-major in the array

Reimplemented from gstlrn::MatrixSquare.

◆ sample()

bool gstlrn::MatrixSymmetric::sample ( MatrixSymmetric res,
const MatrixSymmetric A,
const 1 &  rowKeep,
bool  flagInvert = false 
)
static

Create an output Square Symmetric Matrix by selecting some rows (and columns) of the Input matrix 'A'.

Parameters
resOutput Square Symmetric Matrix
AInput Square Symmetric Matrix
rowKeepSet of Rows (same for columns) to be kept
flagInvertwhen True, transform 'rowKeep' into 'rowDrop'

Member Data Documentation

◆ DECLARE_TOTL

gstlrn::MatrixSymmetric::DECLARE_TOTL

Has a specific implementation in the Target language.


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