#include <libDC.h>


| Public Member Functions | |
| ldmat (const mat &L, const vec &D) | |
| Construct by copy of L and D. | |
| ldmat (const mat &V) | |
| Construct by decomposition of full matrix V. | |
| ldmat (vec D0) | |
| Construct diagonal matrix with diagonal D0. | |
| ldmat () | |
| Default constructor. | |
| ldmat (const int dim0) | |
| Default initialization with proper size. | |
| virtual | ~ldmat () | 
| Destructor for future use;. | |
| void | opupdt (const vec &v, double w) | 
| mat | to_mat () | 
| Conversion to full matrix. | |
| void | mult_sym (const mat &C) | 
| Inplace symmetric multiplication by a SQUARE matrix $C$, i.e. $V = C*V*C'$. | |
| void | mult_sym_t (const mat &C) | 
| Inplace symmetric multiplication by a SQUARE transpose of matrix $C$, i.e. $V = C'*V*C$. | |
| void | add (const ldmat &ld2, double w=1.0) | 
| Add another matrix in LD form with weight w. | |
| double | logdet () const | 
| Logarithm of a determinant. | |
| double | qform (const vec &v) const | 
| Evaluates quadratic form $x= v'*V*v$;. | |
| void | clear () | 
| Clearing matrix so that it corresponds to zeros. | |
| int | cols () const | 
| access function | |
| int | rows () const | 
| access function | |
| vec | sqrt_mult (const vec &v) const | 
| Multiplies square root of $V$ by vector $x$. | |
| virtual void | inv (ldmat &Inv) const | 
| Matrix inversion preserving the chosen form. | |
| void | mult_sym (const mat &C, ldmat &U) const | 
| Symmetric multiplication of $U$ by a general matrix $C$, result of which is stored in the current class. | |
| void | mult_sym_t (const mat &C, ldmat &U) const | 
| Symmetric multiplication of $U$ by a transpose of a general matrix $C$, result of which is stored in the current class. | |
| void | ldform (const mat &A, const vec &D0) | 
| Transforms general $A'D0 A$ into pure $L'DL$. | |
| void | setD (const vec &nD) | 
| Access functions. | |
| void | setD (const vec &nD, int i) | 
| Access functions. | |
| void | setL (const vec &nL) | 
| Access functions. | |
| ldmat & | operator+= (const ldmat &ldA) | 
| add another ldmat matrix | |
| ldmat & | operator-= (const ldmat &ldA) | 
| subtract another ldmat matrix | |
| ldmat & | operator *= (double x) | 
| multiply by a scalar | |
| Protected Attributes | |
| vec | D | 
| Positive vector $D$. | |
| mat | L | 
| Lower-triangular matrix $L$. | |
| Friends | |
| std::ostream & | operator<< (std::ostream &os, const ldmat &sq) | 
| print both LandD | |
Matrix is decomposed as follows:
![\[M = L'DL\]](form_5.png) 
where only $L$ and $D$ matrices are stored. All inplace operations modifies only these and the need to compose and decompose the matrix is avoided.
| void ldmat::opupdt | ( | const vec & | v, | |
| double | w | |||
| ) |  [virtual] | 
Perfroms a rank-1 update by outer product of vectors: $V = V + w v v'$.
| v | Vector forming the outer product to be added | |
| w | weight of updating; can be negative | 
Implements sqmat.
| void ldmat::mult_sym | ( | const mat & | C | ) |  [virtual] | 
Inplace symmetric multiplication by a SQUARE matrix $C$, i.e. $V = C*V*C'$.
| C | multiplying matrix, | 
Implements sqmat.
| void ldmat::mult_sym_t | ( | const mat & | C | ) |  [virtual] | 
Inplace symmetric multiplication by a SQUARE transpose of matrix $C$, i.e. $V = C'*V*C$.
| C | multiplying matrix, | 
Implements sqmat.
| vec ldmat::sqrt_mult | ( | const vec & | v | ) | const  [virtual] | 
Multiplies square root of $V$ by vector $x$.
Used e.g. in generating normal samples.
Implements sqmat.
| void ldmat::inv | ( | ldmat & | Inv | ) | const  [virtual] | 
Matrix inversion preserving the chosen form.
| Inv | a space where the inverse is stored. | 
| void ldmat::mult_sym | ( | const mat & | C, | |
| ldmat & | U | |||
| ) | const | 
Symmetric multiplication of $U$ by a general matrix $C$, result of which is stored in the current class.
| C | matrix to multiply with | |
| U | a space where the inverse is stored. | 
| void ldmat::mult_sym_t | ( | const mat & | C, | |
| ldmat & | U | |||
| ) | const | 
Symmetric multiplication of $U$ by a transpose of a general matrix $C$, result of which is stored in the current class.
| C | matrix to multiply with | |
| U | a space where the inverse is stored. | 
| void ldmat::ldform | ( | const mat & | A, | |
| const vec & | D0 | |||
| ) | 
Transforms general $A'D0 A$ into pure $L'DL$.
The new decomposition fullfills: $A'*diag(D)*A = self.L'*diag(self.D)*self.L$
| A | general matrix | |
| D0 | general vector | 
add another ldmat matrix
Operations: mapping of add operation to operators
subtract another ldmat matrix
mapping of negative add operation to operators
 1.5.3
 1.5.3