Changeset 744 for library/bdm/estim
- Timestamp:
- 11/28/09 14:38:48 (15 years ago)
- Location:
- library/bdm/estim
- Files:
-
- 4 modified
Legend:
- Unmodified
- Added
- Removed
-
library/bdm/estim/ekf_template.h
r477 r744 22 22 public: 23 23 void condition ( const vec &QR0 ) { 24 Q = diag ( QR0 ( 0, dim x- 1 ) );25 R = diag ( QR0 ( dim x, dimx+ dimy - 1 ) );24 Q = diag ( QR0 ( 0, dimension() - 1 ) ); 25 R = diag ( QR0 ( dimension(), dimension() + dimy - 1 ) ); 26 26 }; 27 27 }; … … 30 30 class EKFCh_dQ : public EKFCh { 31 31 public: 32 void condition ( const vec &Q0 ) { 33 Q.setD ( Q0, 0 ); 32 BM* _copy_() const {return new EKFCh_dQ(*this);} 33 //! new bayes, expects cond = [ut, Qt] 34 void bayes( const vec &yt , const vec &cond) { 35 vec ut=cond.left(dimc-dimension()); 36 vec dQt=cond.right(dimension()); 37 Q.setD ( dQt, 0 ); 34 38 //from EKF 35 preA.set_submatrix ( dimy + dimx, dimy, Q._Ch() ); 39 preA.set_submatrix ( dimy + dimension(), dimy, Q._Ch() ); 40 41 EKFCh::bayes(yt,ut); 36 42 }; 43 void validate() { 44 EKFCh::validate(); 45 dimc += dimension(); 46 } 37 47 }; 38 48 … … 43 53 Q.setCh ( chQ0 ); 44 54 //from EKF 45 preA.set_submatrix ( dimy + dim x, dimy, Q._Ch() );55 preA.set_submatrix ( dimy + dimension(), dimension(), Q._Ch() ); 46 56 }; 47 57 }; -
library/bdm/estim/kalman.cpp
r739 r744 264 264 int active_x = y_block_size; 265 265 for ( int r = 0; r < urv.length(); r++ ) { 266 diagonal_part ( this->A, active_x + urv.size ( r ), active_x, u_block_sizes ( r ) - urv.size ( r ) ); 267 this->B.set_submatrix ( active_x, 0, eye ( urv.size ( r ) ) ); 266 if (u_block_sizes(r)>0){ 267 diagonal_part ( this->A, active_x + urv.size ( r ), active_x, u_block_sizes ( r ) - urv.size ( r ) ); 268 this->B.set_submatrix ( active_x, 0, eye ( urv.size ( r ) ) ); 269 } 268 270 active_x += u_block_sizes ( r ); 269 271 } -
library/bdm/estim/kalman.h
r739 r744 336 336 //! copy constructor duplicated - calls different set_parameters 337 337 BM* _copy_() const { 338 EKFCh* E = new EKFCh; 339 E->set_parameters ( pfxu, phxu, Q, R ); 340 E->set_statistics ( est._mu(), est._R() ); 341 return E; 338 return new EKFCh(*this); 342 339 } 343 340 //! Set nonlinear functions for mean values and covariance matrices. -
library/bdm/estim/particles.h
r739 r744 267 267 MPF () : jest ( pf, BMs ) {}; 268 268 //! set all parameters at once 269 void set_parameters ( shared_ptr<pdf> par0, shared_ptr<pdf> obs0, int n0, RESAMPLING_METHOD rm = SYSTEMATIC ) { 270 pf->set_model ( par0, obs0 ); 269 void set_pf ( shared_ptr<pdf> par0, int n0, RESAMPLING_METHOD rm = SYSTEMATIC ) { 270 if (!pf) pf=new PF; 271 pf->set_model ( par0, par0 ); // <=== nasty!!! 271 272 pf->set_parameters ( n0, rm ); 273 pf->set_rv(par0->_rv()); 272 274 BMs.set_length ( n0 ); 273 275 } … … 298 300 return BMs ( i ); 299 301 } 302 PF& _pf() {return *pf;} 300 303 301 304 /*! configuration structure for basic PF