Class prob_dens_mdim_gaussian (o2scl)¶
-
template<class vec_t = boost::numeric::ublas::vector<double>, class mat_t = boost::numeric::ublas::matrix<double>>
class o2scl::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
-
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 ofn_pts
in the first index andp_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 ofn_pts
in the first index andp_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 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 .