Class prob_dens_mdim_gaussian (o2scl)

O2scl : Class List

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

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

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 \) .

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

Idea for Future:

Create alternate versions based on other matrix decompositions?

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.

Note

Const functions are not thread-safe because mutable storage is used.

Public Functions

inline const mat_t &get_chol()

Get the Cholesky decomposition.

inline const mat_t &get_covar_inv()

Get the inverse of the covariance matrix.

inline const vec_t &get_peak()

Get the peak location.

inline const double &get_norm()

Get the normalization.

inline virtual size_t dim() const

The dimensionality.

inline prob_dens_mdim_gaussian()

Create an empty distribution.

inline prob_dens_mdim_gaussian(const prob_dens_mdim_gaussian &pdmg_loc)

Copy constructor.

inline prob_dens_mdim_gaussian &operator=(const prob_dens_mdim_gaussian &pdmg_loc)

Copy constructor with operator=.

template<class mat2_t, class vec2_t, class mat2_col_t = const_matrix_column_gen<mat2_t>>
inline int set(size_t p_mdim, size_t n_pts, const mat2_t &pts, const vec2_t &vals, vec_t &peak_arg, mat_t &covar_arg)

Create a distribution from a set of samples from a multidimensional Gaussian, returning the peak values and covariance matrix.

The matrix pts should have a size of n_pts in the first index and p_mdim in the second index

template<class mat2_t, class vec2_t, class mat2_col_t = const_matrix_column_gen<mat2_t>>
inline int set(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.

The matrix pts should have a size of n_pts in the first index and p_mdim in the second index

inline prob_dens_mdim_gaussian(size_t p_ndim, vec_t &p_peak, mat_t &covar)

Create a distribution from the covariance matrix.

inline void set(size_t p_ndim, vec_t &p_peak, mat_t &covar)

Set the peak and covariance matrix for the distribution.

Note

This function is called in constructors and thus should not be virtual.

inline 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>
inline 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.

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.

inline virtual double pdf(const vec_t &x) const

The normalized density.

inline virtual double log_pdf(const vec_t &x) const

The log of the normalized density.

inline virtual void operator()(vec_t &x) const

Sample the distribution.

Public Members

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.

mutable vec_t q

Temporary storage 1.

mutable vec_t vtmp

Temporary storage 2.