Public Member Functions | Public Attributes | Protected Attributes | List of all members
o2scl::prob_dens_mdim_gaussian< vec_t, mat_t > Class Template Reference

A multi-dimensional Gaussian probability density function using a Cholesky decomposition. More...

#include <prob_dens_func.h>

Inheritance diagram for o2scl::prob_dens_mdim_gaussian< vec_t, mat_t >:
o2scl::prob_dens_mdim< vec_t > o2scl::prob_dens_mdim_bound_gaussian< vec_t, mat_t >

Detailed Description

template<class vec_t = boost::numeric::ublas::vector<double>, class mat_t = boost::numeric::ublas::matrix<double>>
class o2scl::prob_dens_mdim_gaussian< vec_t, mat_t >

Given a (square) covariance matrix, $ \Sigma $, and a mean vector $ \mu $ the PDF is

\[ P(x) = \det \left( 2 \pi \Sigma \right)^{-1/2} \exp \left[ -\frac{1}{2} (x-\mu)^T \Sigma^{-1} (x-\mu) \right] \]

Given the Cholesky decomposition $ A A^{T} = \Sigma $, and a vector, $ z $ of samples from the standard Gaussian with 0 mean and unit variance, one can create a sample $ x $ from $ x = \mu + A z $ .

Note
This class inverts the matrix, necessary for computing the pdf, but not for sampling the distribution, so for large matrices the inversion can be a waste of computation if the pdf is not needed.

A separate class for the two-dimensional case is prob_dens_mdim_biv_gaussian .

Note
Const functions are not thread-safe because mutable storage is used.
Idea for Future:
Create alternate versions based on other matrix decompositions?

Definition at line 987 of file prob_dens_func.h.

Public Member Functions

const mat_t & get_chol ()
 Get the Cholesky decomposition.
 
const mat_t & get_covar_inv ()
 Get the inverse of the covariance matrix.
 
const vec_t & get_peak ()
 Get the peak location.
 
const double & get_norm ()
 Get the normalization.
 
virtual size_t dim () const
 The dimensionality.
 
 prob_dens_mdim_gaussian ()
 Create an empty distribution.
 
 prob_dens_mdim_gaussian (const prob_dens_mdim_gaussian &pdmg)
 Copy constructor.
 
prob_dens_mdim_gaussianoperator= (const prob_dens_mdim_gaussian &pdmg)
 Copy constructor with operator=.
 
template<class mat2_t , class vec2_t , class mat2_col_t = const_matrix_column_gen<mat2_t>>
 prob_dens_mdim_gaussian (size_t p_mdim, size_t n_pts, const mat2_t &pts, const vec2_t &vals)
 Create a distribution from a set of samples from a multidimensional Gaussian.
 
 prob_dens_mdim_gaussian (size_t p_ndim, vec_t &p_peak, mat_t &covar)
 Create a distribution from the covariance matrix.
 
void set (size_t p_ndim, vec_t &p_peak, mat_t &covar)
 Set the peak and covariance matrix for the distribution. More...
 
void set_alt (size_t p_ndim, vec_t &p_peak, mat_t &p_chol, mat_t &p_covar_inv, double p_norm)
 Alternate set function for use when covariance matrix has already been decomposed and inverted.
 
template<class vec_vec_t , class mat_col_t , class func_t >
void set_gproc (size_t n_dim, size_t n_init, vec_vec_t &x, vec_t &y, func_t &fcovar)
 Given a data set and a covariance function, construct probability distribution based on a Gaussian process which includes noise. More...
 
virtual double pdf (const vec_t &x) const
 The normalized density.
 
virtual double log_pdf (const vec_t &x) const
 The log of the normalized density.
 
virtual void operator() (vec_t &x) const
 Sample the distribution.
 

Public Attributes

o2scl::prob_dens_gaussian pdg
 Standard normal.
 

Protected Attributes

mat_t chol
 Cholesky decomposition.
 
mat_t covar_inv
 Inverse of the covariance matrix.
 
vec_t peak
 Location of the peak.
 
double norm
 Normalization factor, $ \det ( 2 \pi \Sigma)^{-1/2} $.
 
size_t ndim
 Number of dimensions.
 
vec_t q
 Temporary storage 1.
 
vec_t vtmp
 Temporary storage 2.
 

Member Function Documentation

◆ set()

template<class vec_t = boost::numeric::ublas::vector<double>, class mat_t = boost::numeric::ublas::matrix<double>>
void o2scl::prob_dens_mdim_gaussian< vec_t, mat_t >::set ( size_t  p_ndim,
vec_t &  p_peak,
mat_t &  covar 
)
inline
Note
This function is called in constructors and thus should not be virtual.

Definition at line 1124 of file prob_dens_func.h.

◆ set_gproc()

template<class vec_t = boost::numeric::ublas::vector<double>, class mat_t = boost::numeric::ublas::matrix<double>>
template<class vec_vec_t , class mat_col_t , class func_t >
void o2scl::prob_dens_mdim_gaussian< vec_t, mat_t >::set_gproc ( size_t  n_dim,
size_t  n_init,
vec_vec_t &  x,
vec_t &  y,
func_t &  fcovar 
)
inline
Note
The type mat_col_t is a matrix column type for the internal object matrix type mat_t, and not associated with the data type vec_vec_t. Since the default matrix type is boost::numeric::ublas::matrix < double > a good matrix column type for this function is boost::numeric::ublas::matrix_column < boost::numeric::ublas::matrix < double > > . This matrix column type is needed for the LU decomposition and inversion.

Definition at line 1197 of file prob_dens_func.h.


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

Documentation generated with Doxygen. Provided under the GNU Free Documentation License (see License Information).