Class prob_dens_mdim_gaussian (o2scl)¶
-
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 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 .