Changeset 744 for library/bdm/estim

Show
Ignore:
Timestamp:
11/28/09 14:38:48 (15 years ago)
Author:
smidl
Message:

Working unitsteps and controlloop + corresponding fixes

Location:
library/bdm/estim
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • library/bdm/estim/ekf_template.h

    r477 r744  
    2222public: 
    2323        void condition ( const vec &QR0 ) { 
    24                 Q = diag ( QR0 ( 0, dimx - 1 ) ); 
    25                 R = diag ( QR0 ( dimx, dimx + dimy - 1 ) ); 
     24                Q = diag ( QR0 ( 0, dimension() - 1 ) ); 
     25                R = diag ( QR0 ( dimension(), dimension() + dimy - 1 ) ); 
    2626        }; 
    2727}; 
     
    3030class EKFCh_dQ : public EKFCh { 
    3131public: 
    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 ); 
    3438                //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); 
    3642        }; 
     43        void validate() { 
     44                EKFCh::validate(); 
     45                dimc += dimension(); 
     46        } 
    3747}; 
    3848 
     
    4353                Q.setCh ( chQ0 ); 
    4454                //from EKF 
    45                 preA.set_submatrix ( dimy + dimx, dimy, Q._Ch() ); 
     55                preA.set_submatrix ( dimy + dimension(), dimension(), Q._Ch() ); 
    4656        }; 
    4757}; 
  • library/bdm/estim/kalman.cpp

    r739 r744  
    264264        int active_x = y_block_size; 
    265265        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                } 
    268270                active_x += u_block_sizes ( r ); 
    269271        } 
  • library/bdm/estim/kalman.h

    r739 r744  
    336336        //! copy constructor duplicated - calls different set_parameters 
    337337        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); 
    342339        } 
    343340        //! Set nonlinear functions for mean values and covariance matrices. 
  • library/bdm/estim/particles.h

    r739 r744  
    267267        MPF () :  jest ( pf, BMs ) {}; 
    268268        //! 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!!! 
    271272                pf->set_parameters ( n0, rm ); 
     273                pf->set_rv(par0->_rv()); 
    272274                BMs.set_length ( n0 ); 
    273275        } 
     
    298300                return BMs ( i ); 
    299301        } 
     302        PF& _pf() {return *pf;} 
    300303 
    301304        /*! configuration structure for basic PF