Class prob_dens_mdim_gaussian (o2scl)¶
-
template<class
vec_t
= boost::numeric::ublas::vector<double>, classmat_t
= boost::numeric::ublas::matrix<double>>
classo2scl
::
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 .- 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.
- Idea for Future:
Create alternate versions based on other matrix decompositions?
- Note
Const functions are not thread-safe because mutable storage is used.
Public Functions
-
const double &
get_norm
()¶ Get the normalization.
-
size_t
dim
() const¶ The dimensionality.
-
prob_dens_mdim_gaussian
()¶ Create an empty distribution.
-
prob_dens_mdim_gaussian
(const prob_dens_mdim_gaussian &pdmg_loc)¶ Copy constructor.
-
prob_dens_mdim_gaussian &
operator=
(const prob_dens_mdim_gaussian &pdmg_loc)¶ Copy constructor with operator=.
-
template<class
mat2_t
, classvec2_t
, classmat2_col_t
= const_matrix_column_gen<mat2_t>>
intset
(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 ofn_pts
in the first index andp_mdim
in the second index
-
template<class
mat2_t
, classvec2_t
, classmat2_col_t
= const_matrix_column_gen<mat2_t>>
intset
(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 ofn_pts
in the first index andp_mdim
in the second index
-
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.
- Note
This function is called in constructors and thus should not be virtual.
-
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
, classmat_col_t
, classfunc_t
>
voidset_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 typemat_t
, and not associated with the data typevec_vec_t
. Since the default matrix type isboost::numeric::ublas::matrix < double >
a good matrix column type for this function isboost::numeric::ublas::matrix_column < boost::numeric::ublas::matrix < double > >
. This matrix column type is needed for the LU decomposition and inversion.
Public Members
-
o2scl::prob_dens_gaussian
pdg
¶ Standard normal.