32 #ifndef SHARK_STATISTICS_MULTIVARIATENORMALDISTRIBUTION_H 33 #define SHARK_STATISTICS_MULTIVARIATENORMALDISTRIBUTION_H 49 typedef std::pair<RealVector,RealVector> result_type;
54 m_covarianceMatrix = Sigma;
63 template<
typename Archive>
64 void serialize( Archive & ar,
const std::size_t version ) {
65 ar & BOOST_SERIALIZATION_NVP( m_covarianceMatrix );
66 ar & BOOST_SERIALIZATION_NVP( m_eigenVectors );
67 ar & BOOST_SERIALIZATION_NVP( m_eigenValues );
80 return m_covarianceMatrix;
88 return m_covarianceMatrix;
99 return m_eigenVectors;
104 return m_eigenValues;
109 return m_eigenValues;
114 RealVector result( m_eigenValues.size(), 0. );
115 RealVector z( m_eigenValues.size() );
117 for( std::size_t i = 0; i < result.size(); i++ ) {
118 z( i ) = Rng::gauss( 0., 1. );
121 for( std::size_t i = 0; i < result.size(); i++ )
122 for( std::size_t j = 0; j < result.size(); j++ )
123 result( i ) += m_eigenVectors( i, j ) * std::sqrt( std::abs( m_eigenValues(j) ) ) * z( j );
125 return( std::make_pair( result, z ) );
130 eigensymm( m_covarianceMatrix, m_eigenVectors, m_eigenValues );
134 RealMatrix m_covarianceMatrix;
135 RealMatrix m_eigenVectors;
136 RealVector m_eigenValues;
147 typedef std::pair<RealVector,RealVector> result_type;
153 :m_triangular(false){
162 template<
typename Archive>
163 void serialize( Archive & ar,
const std::size_t version ) {
164 ar & BOOST_SERIALIZATION_NVP( m_lowerCholesky);
175 return m_lowerCholesky.size1();
185 return m_lowerCholesky;
190 return m_lowerCholesky;
198 template<
class Vector1,
class Vector2>
203 for( std::size_t i = 0; i !=
size(); i++ ) {
204 z( i ) = Rng::gauss( 0, 1 );
207 if(m_triangular &&
size() > 400){
209 blas::triangular_prod<blas::lower>(m_lowerCholesky,y);
221 RealVector& z = result.second;
222 RealVector& y = result.first;