bdm::ldmat Class Reference

Matrix stored in LD form, (commonly known as UD). More...

#include <square_mat.h>

List of all members.

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 (const ldmat &V0, const ivec &perm)
 Construct by restructuring of V0 accordint to permutation vector perm.
 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 () const
 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$;.
double invqform (const vec &v) const
 Evaluates quadratic form $x= v'*inv(V)*v$;.
void clear ()
 Clearing matrix so that it corresponds to zeros.
vec sqrt_mult (const vec &v) const
 Multiplies square root of $V$ by vector $x$.
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.
const vec & _D () const
 Access functions.
const mat & _L () const
 Access functions.
ldmatoperator+= (const ldmat &ldA)
 add another ldmat matrix
ldmatoperator-= (const ldmat &ldA)
 subtract another ldmat matrix
ldmatoperator*= (double x)
 multiply by a scalar
int cols () const
 Reimplementing common functions of mat: cols().
int rows () const
 Reimplementing common functions of mat: rows().

Protected Attributes

vec D
 Positive vector $D$.
mat L
 Lower-triangular matrix $L$.
int dim
 dimension of the square matrix

Friends

std::ostream & operator<< (std::ostream &os, const ldmat &sq)
 print both L and D


Detailed Description

Matrix stored in LD form, (commonly known as UD).

Matrix is decomposed as follows:

\[M = L'DL\]

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.


Member Function Documentation

void bdm::ldmat::inv ( ldmat Inv  )  const

Matrix inversion preserving the chosen form.

Parameters:
Inv a space where the inverse is stored.

References clear(), D, L, and ldform().

Referenced by bdm::egiw::variance().

void bdm::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$

Parameters:
A general matrix
D0 general vector

References bdm_assert_debug, D, bdm::sqmat::dim, and L.

Referenced by inv(), ldmat(), mult_sym(), and mult_sym_t().

void bdm::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.

Parameters:
C matrix to multiply with
U a space where the inverse is stored.

References D, L, and ldform().

void bdm::ldmat::mult_sym ( const mat &  C  )  [virtual]

Inplace symmetric multiplication by a SQUARE matrix $C$, i.e. $V = C*V*C'$.

Parameters:
C multiplying matrix,

Reimplemented from bdm::sqmat.

References D, L, and ldform().

void bdm::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.

Parameters:
C matrix to multiply with
U a space where the inverse is stored.

References D, L, and ldform().

void bdm::ldmat::mult_sym_t ( const mat &  C  )  [virtual]

Inplace symmetric multiplication by a SQUARE transpose of matrix $C$, i.e. $V = C'*V*C$.

Parameters:
C multiplying matrix,

Reimplemented from bdm::sqmat.

References D, L, and ldform().

ldmat & bdm::ldmat::operator+= ( const ldmat ldA  )  [inline]

add another ldmat matrix

Operations: mapping of add operation to operators

References add().

ldmat & bdm::ldmat::operator-= ( const ldmat ldA  )  [inline]

subtract another ldmat matrix

mapping of negative add operation to operators

References add().

void bdm::ldmat::opupdt ( const vec &  v,
double  w 
) [virtual]

Perfroms a rank-1 update by outer product of vectors: $V = V + w v v'$.

Parameters:
v Vector forming the outer product to be added
w weight of updating; can be negative
BLAS-2b operation.

Reimplemented from bdm::sqmat.

References bdm_assert_debug, D, bdm::sqmat::dim, and L.

Referenced by add(), bdm::ARX::bayes(), and bdm::ARX::logpred().

vec bdm::ldmat::sqrt_mult ( const vec &  v  )  const [virtual]

Multiplies square root of $V$ by vector $x$.

Used e.g. in generating normal samples.

Reimplemented from bdm::sqmat.

References D, bdm::sqmat::dim, and L.


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

Generated on Wed Oct 7 17:34:47 2009 for mixpp by  doxygen 1.5.9