Changeset 96 for bdm/stat/libEF.h
- Timestamp:
- 05/09/08 17:25:10 (16 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
bdm/stat/libEF.h
r85 r96 37 37 38 38 class eEF : public epdf { 39 40 39 public: 41 40 // eEF() :epdf() {}; 42 41 //! default constructor 43 42 eEF ( const RV &rv ) :epdf ( rv ) {}; 43 //! logarithm of the normalizing constant, \f$\mathcal{I}\f$ 44 virtual double lognc()const =0; 44 45 //!TODO decide if it is really needed 45 46 virtual void tupdate ( double phi, mat &vbar, double nubar ) {}; … … 92 93 double eval ( const vec &val ) const ; 93 94 double evalpdflog ( const vec &val ) const; 95 double lognc () const; 94 96 vec mean() const {return mu;} 95 97 … … 106 108 //! access method 107 109 mat getR () {return R.to_mat();} 110 }; 111 112 /*! 113 * \brief Gauss-inverse-Wishart density stored in LD form 114 115 * More?... 116 */ 117 class egiw : public eEF { 118 protected: 119 //! Extended information matrix of sufficient statistics 120 ldmat V; 121 //! Number of data records (degrees of freedom) of sufficient statistics 122 double nu; 123 public: 124 //!Default constructor 125 egiw(RV rv, mat V0, double nu0): eEF(rv), V(V0), nu(nu0) { 126 it_assert_debug(rv.count()==V.rows(),"Incompatible V0."); 127 } 128 129 vec sample() const; 130 vec mean() const; 131 double evalpdflog ( const vec &val ) const; 132 double lognc () const; 133 134 //Access 135 //! returns a pointer to the internal statistics. Use with Care! 136 ldmat& _V() {return V;} 137 //! returns a pointer to the internal statistics. Use with Care! 138 double& _nu() {return nu;} 139 108 140 }; 109 141 … … 132 164 mat sample ( int N ) const; 133 165 double evalpdflog ( const vec &val ) const; 166 double lognc () const; 134 167 //! Returns poiter to alpha and beta. Potentially dengerous: use with care! 135 168 void _param ( vec* &a, vec* &b ) {a=αb=β}; … … 255 288 class mgamma_fix : public mgamma { 256 289 protected: 290 //! parameter l 257 291 double l; 292 //! reference vector 258 293 vec refl; 259 294 public: … … 367 402 double enorm<sq_T>::evalpdflog ( const vec &val ) const { 368 403 // 1.83787706640935 = log(2pi) 369 return -0.5* ( R.cols() * 1.83787706640935 +R.logdet() +R.invqform ( mu-val ) ); 370 }; 371 404 return -0.5* ( +R.invqform ( mu-val ) ) - lognc(); 405 }; 406 407 template<class sq_T> 408 inline double enorm<sq_T>::lognc () const { 409 // 1.83787706640935 = log(2pi) 410 return -0.5* ( R.cols() * 1.83787706640935 +R.logdet()); 411 }; 372 412 373 413 template<class sq_T>