Legend:
- Unmodified
- Added
- Removed
-
libEF.h
r8 r12 15 15 16 16 #include <itpp/itbase.h> 17 #include "libDC.h" 18 #include "libBM.h" 17 19 //#include <std> 18 20 … … 24 26 * More?... 25 27 */ 26 class eEF : public epdf {28 class eEF : public epdf { 27 29 28 30 public: 29 virtual void tupdate( double phi, mat &vbar, double nubar ) {};30 virtual void dupdate( mat &v,double nu=1.0 ) {};31 virtual void tupdate( double phi, mat &vbar, double nubar ) {}; 32 virtual void dupdate( mat &v,double nu=1.0 ) {}; 31 33 }; 32 34 33 class mEF : public mpdf {35 class mEF : public mpdf { 34 36 35 37 public: … … 44 46 template<class sq_T> 45 47 class enorm : public eEF { 48 int dim; 46 49 vec mu; 47 50 sq_T R; … … 52 55 void dupdate( mat &v,double nu=1.0 ); 53 56 vec sample(); 57 mat sample(int N); 54 58 double eval( const vec &val ); 55 59 Normal_RNG RNG; 56 60 }; 57 61 … … 76 80 template<class sq_T> 77 81 enorm<sq_T>::enorm( RV &rv, vec &mu0, sq_T &R0 ) { 82 dim = rv.count(); 78 83 mu = mu0; 79 84 R = R0; … … 92 97 template<class sq_T> 93 98 vec enorm<sq_T>::sample() { 94 // 99 vec x( dim ); 100 RNG.sample_vector( dim,x ); 101 vec smp = R.sqrt_mult( x ); 102 103 smp += mu; 104 return smp; 105 }; 106 107 template<class sq_T> 108 mat enorm<sq_T>::sample( int N ) { 109 mat X( dim,N ); 110 vec x( dim ); 111 vec pom; 112 int i; 113 for ( i=0;i<N;i++ ) { 114 RNG.sample_vector( dim,x ); 115 pom = R.sqrt_mult( x ); 116 pom +=mu; 117 X.set_col( i, pom); 118 } 119 return X; 95 120 }; 96 121 … … 106 131 template<class sq_T> 107 132 mlnorm<sq_T>::mlnorm( RV &rv,RV &rvc, mat &A, sq_T &R ) { 108 int dim = rv. length();133 int dim = rv.count(); 109 134 vec mu( dim ); 110 135 … … 116 141 this->condition( cond ); 117 142 vec smp = epdf.sample(); 118 lik = epdf.eval( smp);143 lik = epdf.eval( smp ); 119 144 return smp; 120 145 } … … 123 148 mat mlnorm<sq_T>::samplecond( vec &cond, vec &lik, int n ) { 124 149 int i; 125 int dim = rv. length();150 int dim = rv.count(); 126 151 mat Smp( dim,n ); 127 vec smp( dim );152 vec smp( dim ); 128 153 this->condition( cond ); 129 154 for ( i=0; i<dim; i++ ) { 130 155 smp = epdf.sample(); 131 lik( i) = epdf.eval(smp);132 Smp.set_col( i ,smp );156 lik( i ) = epdf.eval( smp ); 157 Smp.set_col( i ,smp ); 133 158 } 134 159 return Smp; … … 136 161 137 162 template<class sq_T> 138 void mlnorm<sq_T>::condition( vec &cond) { 163 void mlnorm<sq_T>::condition( vec &cond ) { 164 epdf.mu = A*cond; 165 //R is already assigned; 139 166 } 140 167