Changeset 744 for library

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

Working unitsteps and controlloop + corresponding fixes

Location:
library/bdm
Files:
8 modified

Legend:

Unmodified
Added
Removed
  • library/bdm/base/bdmbase.cpp

    r738 r744  
    495495void datalink_buffered::set_connection ( const RV &rv, const RV &rv_up ) { 
    496496        // create link between up and down 
    497         datalink_part::set_connection ( rv, rv_up.remove_time() ); // only non-delayed version 
     497        datalink_part::set_connection ( rv, rv_up); // only non-delayed version 
    498498 
    499499        // create rvs of history 
    500500        // we can store only what we get in rv_up - everything else is removed 
    501         ivec valid_ids = rv.findself_ids ( rv_up ); 
    502         RV rv_hist = rv.subselect ( find ( valid_ids >= 0 ) ); // select only rvs that are in rv_up 
     501        ivec valid_ids = rv.findself_ids ( rv_up ); // return on which position each id is 
     502        RV rv_hist = rv.subselect ( find ( valid_ids >= 0 ) ); // select only rvs that are in rv_up, ie ind>0 
    503503        RV rv_hist0 = rv_hist.remove_time(); // these RVs will form history at time =0 
    504504        // now we need to know what is needed from Up 
  • library/bdm/base/bdmbase.h

    r741 r744  
    10961096                yrv = rv; 
    10971097        } 
     1098        //! access function 
     1099        void set_rvc ( const RV &rv ) { 
     1100                rvc = rv; 
     1101        } 
    10981102        //! access to rv of the posterior 
    10991103        void set_rv ( const RV &rv ) { 
  • library/bdm/design/arx_ctrl.h

    r737 r744  
    124124                lq.validate(); 
    125125 
     126                rv = urvm; // rv is not shifted to t+1!! 
    126127                rvc = concat ( xrv, urvm ); 
    127128                rvc2ar_y.set_connection ( ar->_yrv(), rvc ); 
  • library/bdm/design/ctrlbase.cpp

    r738 r744  
    1313        //penalization 
    1414        qux.set_submatrix ( 0, 0, Qu._Ch() ); 
    15         qux.set_submatrix ( 0, dimx + dimu + dimy, Qu._Ch() ); 
     15        qux.set_submatrix ( 0, dimx + dimu + dimy, -Qu._Ch() ); 
    1616 
    1717        qyx.set_submatrix ( 0, 0, S->_C() ); 
     
    5757 
    5858void LQG::ricatti_step() { 
    59         pre_qr.set_submatrix ( 0, 0, s*pr ); 
    60         pre_qr.set_submatrix ( dimx + dimu + dimy, dimu + dimx, -Qy.to_mat() *y_req ); 
     59//      pre_qr.set_submatrix ( 0, 0, s*pr ); 
     60//      pre_qr.set_submatrix ( dimx + dimu + dimy, dimu + dimx, -Qy.to_mat() *y_req ); 
    6161        if ( !qr ( pre_qr, post_qr ) ) { 
    6262                bdm_warning ( "QR in LQG unstable" ); 
  • 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