Changeset 33 for bdm/estim/libPF.h
- Timestamp:
- 03/05/08 16:01:56 (16 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
bdm/estim/libPF.h
r32 r33 41 41 mpdf &obs; 42 42 public: 43 //! Default constructor 43 44 PF ( const RV &rv0, mpdf &par0, mpdf &obs0, int n0 ) :BM ( rv0 ), 44 45 n ( n0 ),est ( rv0,n ),_w ( est._w() ),_samples ( est._samples() ), 45 46 par ( par0 ), obs ( obs0 ) {}; 46 47 47 // void set_parametres(mpdf &par0, mpdf &obs0) {par=&par0;obs=&obs0;}; 48 //! Set posterior density by sampling from epdf0 48 49 void set_est ( const epdf &epdf0 ); 49 //TODO remove or implement bayes()!50 50 void bayes ( const vec &dt ); 51 51 }; … … 119 119 void bayes ( const vec &dt ); 120 120 epdf& _epdf() {return jest;} 121 121 //! Set postrior of \c rvc to samples from epdf0. Statistics of Bms are not re-computed! Use only for initialization! 122 122 void set_est ( const epdf& epdf0 ) { 123 123 PF::set_est ( epdf0 ); // sample params in condition … … 134 134 ivec ind; 135 135 double mlls=-std::numeric_limits<double>::infinity(); 136 double sum=0.0;137 136 138 137 for ( i=0;i<n;i++ ) { … … 141 140 Bms[i]->condition ( _samples ( i ) ); 142 141 Bms[i]->bayes ( dt ); 143 lls ( i ) += Bms[i]->_ll();142 lls ( i ) = Bms[i]->_ll(); // lls above is also in proposal her must be lls(i) =, not +=!! 144 143 145 144 if ( lls ( i ) >mlls ) mlls=lls ( i ); //find maximum likelihood (for numerical stability) … … 151 150 } 152 151 153 //renormalize 154 for ( i=0;i<n;i++ ) {sum+=_w ( i );}; 152 _w /=sum(_w); //? 155 153 156 _w /=sum; //? 157 158 if ( ( _w*_w ) < ( 0.5*n ) ) { 154 double eff = 1.0/( _w*_w ); 155 if ( eff < ( 0.1*n ) ) { 159 156 ind = est.resample(); 160 157 // Resample Bms! … … 173 170 } 174 171 }; 172 cout << '.'; 175 173 } 176 174 }