Changeset 283 for bdm/estim

Show
Ignore:
Timestamp:
02/24/09 14:14:01 (15 years ago)
Author:
smidl
Message:

get rid of BMcond + adaptation in doprava/

Location:
bdm/estim
Files:
9 modified

Legend:

Unmodified
Added
Removed
  • bdm/estim/arx.cpp

    r270 r283  
    4444} 
    4545 
    46 ARX* ARX::_copy_ ( ) { 
     46ARX* ARX::_copy_ ( ) const { 
    4747        ARX* Tmp=new ARX ( *this ); 
    4848        return Tmp; 
  • bdm/estim/arx.h

    r271 r283  
    5555        ARX ( const double frg0=1.0 ) : BMEF ( frg0 ),est (), V ( est._V() ), nu ( est._nu() ) {}; 
    5656        ARX ( const ARX &A0 ) : BMEF (),est ( A0.est ), V ( est._V() ), nu ( est._nu() ) {}; 
    57         ARX* _copy_(); 
     57        ARX* _copy_() const; 
    5858        void set_parameters ( double frg0 ) {frg=frg0;} 
    5959        void set_statistics ( int dimx0, const ldmat V0, double nu0=-1.0 ) {est.set_parameters ( dimx0,V0,nu0 );last_lognc=est.lognc();dimx=dimx0;} 
  • bdm/estim/ekf_templ.h

    r279 r283  
    1919 
    2020//!Extended Kalman filter with unknown \c Q and \c R 
    21 class EKFful_unQR : public EKFfull , public BMcond { 
     21class EKFful_unQR : public EKFfull { 
    2222public: 
    23         //! Default constructor 
    24         EKFful_unQR ( ) :EKFfull ( ),BMcond ( ) {}; 
    2523        void condition ( const vec &QR0 ) { 
    2624                Q=diag(QR0(0,dimx-1)); 
     
    3028 
    3129//!Extended Kalman filter in Choleski form with unknown \c Q 
    32 class EKFCh_unQ : public EKFCh , public BMcond { 
     30class EKFCh_unQ : public EKFCh { 
    3331public: 
    34         //! Default constructor 
    35         EKFCh_unQ (  ) :EKFCh ( ),BMcond ( ) {}; 
    3632        void condition ( const vec &Q0 ) { 
    3733                Q.setD ( Q0,0 ); 
     
    4238 
    4339//!Extended Kalman filter with unknown parameters in \c IM 
    44 class EKFCh_cond : public EKFCh , public BMcond { 
     40class EKFCh_cond : public EKFCh { 
    4541        public: 
    46         //! Default constructor 
    47                 EKFCh_cond ( ) :EKFCh ( ),BMcond ( ) {}; 
    4842                void condition ( const vec &val ) { 
    4943                        pfxu->condition ( val ); 
  • bdm/estim/libKF.cpp

    r279 r283  
    6969 
    7070        dimx = pfxu0->_dimx(); 
    71         dimy = phxu0->_dimy(); 
     71        dimy = phxu0->dimension(); 
    7272        dimu = pfxu0->_dimu(); 
    7373 
     
    169169        phxu = phxu0; 
    170170 
    171         dimx = pfxu0->_dimy(); 
    172         dimy = phxu0->_dimy(); 
     171        dimx = pfxu0->dimension(); 
     172        dimy = phxu0->dimension(); 
    173173        dimu = pfxu0->_dimu(); 
    174174        // set size of mu - just for constant terms of A and C  
     
    249249} 
    250250 
    251 void KFcondQR::condition ( const vec &QR ) { 
    252         it_assert_debug ( QR.length() == ( dimx+dimy ),"KFcondRQ: conditioning by incompatible vector" ); 
    253  
    254         Q.setD ( QR ( 0, dimx-1 ) ); 
    255         R.setD ( QR ( dimx, -1 ) ); 
    256 }; 
    257  
    258 void KFcondR::condition ( const vec &R0 ) { 
    259         it_assert_debug ( R0.length() == ( dimy ),"KFcondR: conditioning by incompatible vector" ); 
    260  
    261         R.setD ( R0 ); 
    262 }; 
    263  
    264  
    265 } 
     251} 
  • bdm/estim/libKF.h

    r279 r283  
    1919#include "../math/chmat.h" 
    2020 
    21 namespace bdm{ 
     21namespace bdm { 
    2222 
    2323/*! 
     
    4949        friend std::ostream &operator<< ( std::ostream &os, const KalmanFull &kf ); 
    5050        //! For EKFfull; 
    51         KalmanFull(){}; 
     51        KalmanFull() {}; 
    5252}; 
    5353 
     
    5656* \brief Kalman filter with covariance matrices in square root form. 
    5757 
    58 Parameter evolution model:\f[ x_t = A x_{t-1} + B u_t + Q^{1/2} e_t \f]  
     58Parameter evolution model:\f[ x_t = A x_{t-1} + B u_t + Q^{1/2} e_t \f] 
    5959Observation model: \f[ y_t = C x_{t-1} + C u_t + Q^{1/2} w_t. \f] 
    60 Where $e_t$ and $w_t$ are independent vectors Normal(0,1)-distributed disturbances.  
     60Where $e_t$ and $w_t$ are independent vectors Normal(0,1)-distributed disturbances. 
    6161*/ 
    6262template<class sq_T> 
     
    7777        mat A; 
    7878        //! Matrix B 
    79         mat B;  
     79        mat B; 
    8080        //! Matrix C 
    8181        mat C; 
     
    112112        //! Set estimate values, used e.g. in initialization. 
    113113        void set_est ( const vec &mu0, const sq_T &P0 ) { 
    114                 sq_T pom(dimy); 
     114                sq_T pom ( dimy ); 
    115115                est.set_parameters ( mu0,P0 ); 
    116                 P0.mult_sym(C,pom); 
     116                P0.mult_sym ( C,pom ); 
    117117                fy.set_parameters ( C*mu0, pom ); 
    118118        }; 
     
    133133Trivial example: 
    134134\include kalman_simple.cpp 
    135   
    136 */ 
    137 class KalmanCh : public Kalman<chmat>{ 
     135 
     136*/ 
     137class KalmanCh : public Kalman<chmat> { 
    138138protected: 
    139139//! pre array (triangular matrix) 
    140 mat preA; 
     140        mat preA; 
    141141//! post array (triangular matrix) 
    142 mat postA; 
    143  
    144 public: 
    145         //! Default constructor 
    146         KalmanCh ():Kalman<chmat>(),preA(),postA(){}; 
     142        mat postA; 
     143 
     144public: 
     145        //! copy constructor 
     146        BM* _copy_() const { 
     147                KalmanCh* K=new KalmanCh; 
     148                K->set_parameters ( A,B,C,D,Q,R ); 
     149                K->set_statistics ( _mu,_P ); 
     150                return K; 
     151        } 
    147152        //! Set parameters with check of relevance 
    148153        void set_parameters ( const mat &A0,const mat &B0,const mat &C0,const mat &D0,const chmat &Q0,const chmat &R0 ); 
     
    150155                est.set_parameters ( mu0,P0 ); 
    151156        }; 
    152          
    153          
     157 
     158 
    154159        /*!\brief  Here dt = [yt;ut] of appropriate dimensions 
    155          
     160 
    156161        The following equality hold::\f[ 
    157 \left[\begin{array}{cc} 
    158 R^{0.5}\\ 
    159 P_{t|t-1}^{0.5}C' & P_{t|t-1}^{0.5}CA'\\ 
    160  & Q^{0.5}\end{array}\right]<\mathrm{orth.oper.}>=\left[\begin{array}{cc} 
    161 R_{y}^{0.5} & KA'\\ 
    162  & P_{t+1|t}^{0.5}\\ 
    163 \\\end{array}\right]\f] 
    164  
    165 Thus this object evaluates only predictors! Not filtering densities. 
     162        \left[\begin{array}{cc} 
     163        R^{0.5}\\ 
     164        P_{t|t-1}^{0.5}C' & P_{t|t-1}^{0.5}CA'\\ 
     165        & Q^{0.5}\end{array}\right]<\mathrm{orth.oper.}>=\left[\begin{array}{cc} 
     166        R_{y}^{0.5} & KA'\\ 
     167        & P_{t+1|t}^{0.5}\\ 
     168        \\\end{array}\right]\f] 
     169 
     170        Thus this object evaluates only predictors! Not filtering densities. 
    166171        */ 
    167172        void bayes ( const vec &dt ); 
     
    179184        //! Observation Model h(x,u) 
    180185        diffbifn* phxu; 
    181          
    182         enorm<fsqmat> E;  
     186 
     187        enorm<fsqmat> E; 
    183188public: 
    184189        //! Default constructor 
     
    189194        void bayes ( const vec &dt ); 
    190195        //! set estimates 
    191         void set_est (vec mu0, mat P0){mu=mu0;P=P0;}; 
     196        void set_est ( vec mu0, mat P0 ) {mu=mu0;P=P0;}; 
    192197        //!dummy! 
    193         const epdf& posterior()const{return E;}; 
    194         const enorm<fsqmat>* _e()const{return &E;}; 
    195         const mat _R(){return P;} 
     198        const epdf& posterior() const{return E;}; 
     199        const enorm<fsqmat>* _e() const{return &E;}; 
     200        const mat _R() {return P;} 
    196201}; 
    197202 
     
    210215        //! Default constructor 
    211216        EKF ( RV rvx, RV rvy, RV rvu ); 
     217        //! copy constructor 
     218        EKF<sq_T>* _copy_() const { return new EKF<sq_T>(this); } 
    212219        //! Set nonlinear functions for mean values and covariance matrices. 
    213220        void set_parameters ( diffbifn* pfxu, diffbifn* phxu, const sq_T Q0, const sq_T R0 ); 
     
    223230 
    224231class EKFCh : public KalmanCh { 
    225         protected: 
     232protected: 
    226233        //! Internal Model f(x,u) 
    227234        diffbifn* pfxu; 
     
    229236        diffbifn* phxu; 
    230237public: 
     238        //! copy constructor duplicated - calls different set_parameters 
     239        BM* _copy_() const { 
     240                EKFCh* E=new EKFCh; 
     241                E->set_parameters ( pfxu,phxu,Q,R ); 
     242                E->set_statistics ( _mu,_P ); 
     243                return E; 
     244        } 
    231245        //! Set nonlinear functions for mean values and covariance matrices. 
    232246        void set_parameters ( diffbifn* pfxu, diffbifn* phxu, const chmat Q0, const chmat R0 ); 
     
    239253*/ 
    240254 
    241 class KFcondQR : public Kalman<ldmat>, public BMcond { 
     255class KFcondQR : public Kalman<ldmat> { 
    242256//protected: 
    243257public: 
     258        void condition ( const vec &QR ) { 
     259                it_assert_debug ( QR.length() == ( dimx+dimy ),"KFcondRQ: conditioning by incompatible vector" ); 
     260 
     261                Q.setD ( QR ( 0, dimx-1 ) ); 
     262                R.setD ( QR ( dimx, -1 ) ); 
     263        }; 
     264}; 
     265 
     266/*! 
     267\brief Kalman Filter with conditional diagonal matrices R and Q. 
     268*/ 
     269 
     270class KFcondR : public Kalman<ldmat> { 
     271//protected: 
     272public: 
    244273        //!Default constructor 
    245         KFcondQR ( ) : Kalman<ldmat> ( ),BMcond ( ) {}; 
    246  
    247         void condition ( const vec &RQ ); 
    248 }; 
    249  
    250 /*! 
    251 \brief Kalman Filter with conditional diagonal matrices R and Q. 
    252 */ 
    253  
    254 class KFcondR : public Kalman<ldmat>, public BMcond { 
    255 //protected: 
    256 public: 
    257         //!Default constructor 
    258         KFcondR ( ) : Kalman<ldmat> ( ),BMcond ( ) {}; 
    259  
    260         void condition ( const vec &R ); 
     274        KFcondR ( ) : Kalman<ldmat> ( ) {}; 
     275 
     276        void condition ( const vec &R0 ) { 
     277                it_assert_debug ( R0.length() == ( dimy ),"KFcondR: conditioning by incompatible vector" ); 
     278 
     279                R.setD ( R0 ); 
     280        }; 
     281 
    261282}; 
    262283 
     
    267288                dimx ( K0.dimx ), dimy ( K0.dimy ),dimu ( K0.dimu ), 
    268289                A ( K0.A ), B ( K0.B ), C ( K0.C ), D ( K0.D ), 
    269                 Q(K0.Q), R(K0.R), 
    270                 est ( K0.est ), fy ( K0.fy ), _yp(fy._mu()),_Ry(fy._R()), _mu(est._mu()), _P(est._R()) { 
     290                Q ( K0.Q ), R ( K0.R ), 
     291                est ( K0.est ), fy ( K0.fy ), _yp ( fy._mu() ),_Ry ( fy._R() ), _mu ( est._mu() ), _P ( est._R() ) { 
    271292 
    272293// copy values in pointers 
     
    279300 
    280301template<class sq_T> 
    281 Kalman<sq_T>::Kalman ( ) : BM (), est ( ), fy (),  _yp(fy._mu()), _Ry(fy._R()), _mu(est._mu()), _P(est._R()) { 
     302Kalman<sq_T>::Kalman ( ) : BM (), est ( ), fy (),  _yp ( fy._mu() ), _Ry ( fy._R() ), _mu ( est._mu() ), _P ( est._R() ) { 
    282303}; 
    283304 
     
    287308        dimy = C0.rows(); 
    288309        dimu = B0.cols(); 
    289          
     310 
    290311        it_assert_debug ( A0.cols() ==dimx, "Kalman: A is not square" ); 
    291312        it_assert_debug ( B0.rows() ==dimx, "Kalman: B is not compatible" ); 
     
    307328        it_assert_debug ( dt.length() == ( dimy+dimu ),"KalmanFull::bayes wrong size of dt" ); 
    308329 
    309         sq_T iRy(dimy); 
     330        sq_T iRy ( dimy ); 
    310331        vec u = dt.get ( dimy,dimy+dimu-1 ); 
    311332        vec y = dt.get ( 0,dimy-1 ); 
     
    328349        sq_T pom ( ( int ) Pfull.rows() ); 
    329350        iRy.mult_sym_t ( C*Pfull,pom ); 
    330         (_P ) -= pom; // P = P -PC'iRy*CP; 
    331         (_yp ) = C* _mu  +D*u; //y prediction 
    332         (_mu ) += _K* ( y- _yp ); 
     351        ( _P ) -= pom; // P = P -PC'iRy*CP; 
     352        ( _yp ) = C* _mu  +D*u; //y prediction 
     353        ( _mu ) += _K* ( y- _yp ); 
    333354 
    334355 
     
    340361 
    341362}; 
    342   
     363 
    343364 
    344365 
     
    369390        it_assert_debug ( dt.length() == ( dimy+dimu ),"KalmanFull::bayes wrong size of dt" ); 
    370391 
    371         sq_T iRy(dimy,dimy); 
     392        sq_T iRy ( dimy,dimy ); 
    372393        vec u = dt.get ( dimy,dimy+dimu-1 ); 
    373394        vec y = dt.get ( 0,dimy-1 ); 
     
    393414        sq_T pom ( ( int ) Pfull.rows() ); 
    394415        iRy.mult_sym_t ( C*Pfull,pom ); 
    395         (_P ) -= pom; // P = P -PC'iRy*CP; 
     416        ( _P ) -= pom; // P = P -PC'iRy*CP; 
    396417        _yp = phxu->eval ( _mu,u ); //y prediction 
    397418        ( _mu ) += _K* ( y-_yp ); 
  • bdm/estim/libPF.cpp

    r278 r283  
    11#include "libPF.h" 
    22 
    3 namespace bdm{ 
     3namespace bdm { 
    44 
    55using std::endl; 
     
    1313        for ( i=0;i<n;i++ ) { 
    1414                //generate new samples from paramater evolution model; 
    15                 _samples ( i ) = par->samplecond ( _samples ( i )); 
    16                 lls(i )= par->_e()->evallog(_samples(i)); 
     15                _samples ( i ) = par->samplecond ( _samples ( i ) ); 
     16                lls ( i ) = par->_e()->evallog ( _samples ( i ) ); 
    1717                lls ( i ) *= obs->evallogcond ( dt,_samples ( i ) ); 
    1818 
     
    3030        _w ( i ) /=sum; //? 
    3131 
    32         ind = est.resample(); 
     32        ind = est.resample(resmethod); 
    3333 
    3434} 
    3535 
    36 void PF::set_est ( const epdf &epdf0 ) { 
    37         int i; 
     36// void PF::set_est ( const epdf &epdf0 ) { 
     37//      int i; 
     38//  
     39//      for ( i=0;i<n;i++ ) { 
     40//              _samples ( i ) = epdf0.sample(); 
     41//      } 
     42// } 
    3843 
    39         for ( i=0;i<n;i++ ) { 
    40                 _samples ( i ) = epdf0.sample(); 
    41         } 
    42 } 
    4344 
    4445} 
  • bdm/estim/libPF.h

    r281 r283  
    4040        mpdf *obs; 
    4141 
     42        //! which resampling method will be used 
     43        RESAMPLING_METHOD resmethod; 
     44 
    4245        //! \name Options 
    4346        //!@{ 
    4447 
    45         //! Log resampling times 
    46         bool opt_L_res; 
    4748        //! Log all samples 
    4849        bool opt_L_smp; 
     50        //! Log all samples 
     51        bool opt_L_wei; 
    4952        //!@} 
    5053 
     
    5255        //! \name Constructors 
    5356        //!@{ 
    54         PF ( ) :est(), _w ( est._w() ),_samples ( est._samples() ) {}; 
    55         PF ( mpdf *par0, mpdf *obs0, epdf *epdf0, int n0 ) : 
    56                         est ( ),_w ( est._w() ),_samples ( est._samples() ) 
    57         { set_parameters ( par0,obs0,n0 ); set_statistics ( ones ( n0 ),epdf0 ); }; 
    58         void set_parameters ( mpdf *par0, mpdf *obs0, int n0 ) 
    59         { par = par0; obs=obs0; n=n0; est.set_n ( n );}; 
    60         void set_statistics ( const vec w0, epdf *epdf0 ) {est.set_parameters ( w0,epdf0 );}; 
     57        PF ( ) :est(), _w ( est._w() ),_samples ( est._samples() ), opt_L_smp ( false ), opt_L_wei ( false ) {LIDs.set_size ( 5 );}; 
     58        /*      PF ( mpdf *par0, mpdf *obs0, epdf *epdf0, int n0 ) : 
     59                                est ( ),_w ( est._w() ),_samples ( est._samples() ),opt_L_smp(false), opt_L_wei(false) 
     60                { set_parameters ( par0,obs0,n0 ); set_statistics ( ones ( n0 ),epdf0 ); };*/ 
     61        void set_parameters ( mpdf *par0, mpdf *obs0, int n0, RESAMPLING_METHOD rm=SYSTEMATIC ) 
     62        { par = par0; obs=obs0; n=n0; resmethod= rm;}; 
     63        void set_statistics ( const vec w0, epdf *epdf0 ) {est.set_statistics ( w0,epdf0 );}; 
    6164        //!@} 
    6265        //! Set posterior density by sampling from epdf0 
    63         void set_est ( const epdf &epdf0 ); 
    64         void set_options(const string &opt){ 
    65                 opt_L_res= ( s.find ( "logres" ) !=string::npos ); 
    66                 opt_L_smp= ( s.find ( "logsmp" ) !=string::npos );               
     66//      void set_est ( const epdf &epdf0 ); 
     67        void set_options ( const string &opt ) { 
     68                BM::set_options(opt); 
     69                opt_L_wei= ( opt.find ( "logweights" ) !=string::npos ); 
     70                opt_L_smp= ( opt.find ( "logsamples" ) !=string::npos ); 
    6771        } 
    6872        void bayes ( const vec &dt ); 
     
    7882 
    7983template<class BM_T> 
    80  
    8184class MPF : public PF { 
    82         BM_T* Bms[10000]; 
     85        Array<BM_T*> BMs; 
    8386 
    8487        //! internal class for MPDF providing composition of eEmp with external components 
     
    9497                                Coms ( _w.length() ) { 
    9598                }; 
     99                //! read statistics from MPF 
     100                void read_statistics ( Array<BM_T*> &A ) { 
     101                        dim = E.dimension() +A ( 0 )->posterior().dimension(); 
     102                        for ( int i=0; i<_w.length() ;i++ ) {Coms ( i ) = A ( i )->_e();} 
     103                } 
     104                //! needed in resampling 
    96105                void set_elements ( int &i, double wi, const epdf* ep ) 
    97106                {_w ( i ) =wi; Coms ( i ) =ep;}; 
    98107 
    99                 void set_n ( int n ) {E.set_n ( n ); Coms.set_length ( n );} 
     108                void set_parameters ( int n ) { 
     109                        E.set_parameters ( n, false ); 
     110                        Coms.set_length ( n ); 
     111                } 
    100112                vec mean() const { 
    101113                        // ugly 
     
    114126                        return concat ( E.variance(),pom2-pow ( pom,2 ) ); 
    115127                } 
     128                void qbounds ( vec &lb, vec &ub, double perc=0.95 ) const { 
     129                        //bounds on particles 
     130                        vec lbp; 
     131                        vec ubp; 
     132                        E.qbounds ( lbp,ubp ); 
     133 
     134                        //bounds on Components 
     135                        int dimC=Coms ( 0 )->dimension(); 
     136                        int j; 
     137                        // temporary 
     138                        vec lbc(dimC); 
     139                        vec ubc(dimC); 
     140                        // minima and maxima 
     141                        vec Lbc(dimC); 
     142                        vec Ubc(dimC); 
     143                        Lbc = std::numeric_limits<double>::infinity(); 
     144                        Ubc = -std::numeric_limits<double>::infinity(); 
     145 
     146                        for ( int i=0;i<_w.length();i++ ) { 
     147                                // check Coms 
     148                                Coms ( i )->qbounds ( lbc,ubc ); 
     149                                for ( j=0;j<dimC; j++ ) { 
     150                                        if ( lbc ( j ) <Lbc ( j ) ) {Lbc ( j ) =lbc ( j );} 
     151                                        if ( ubc ( j ) >Ubc ( j ) ) {Ubc ( j ) =ubc ( j );} 
     152                                } 
     153                        } 
     154                        lb=concat(lbp,Lbc); 
     155                        ub=concat(ubp,Ubc); 
     156                } 
    116157 
    117158                vec sample() const {it_error ( "Not implemented" );return 0;} 
     
    125166        //! Log means of BMs 
    126167        bool opt_L_mea; 
    127          
     168 
    128169public: 
    129170        //! Default constructor. 
    130         MPF ( mpdf *par0, mpdf *obs0, int n, const BM_T &BMcond0 ) : PF (), jest ( est ) { 
    131                 PF::set_parameters ( par0,obs0,n ); 
    132                 jest.set_n ( n ); 
    133                 // 
    134                 //TODO test if rv and BMcond.rv are compatible. 
    135 //              rv.add ( rvlin ); 
    136                 // 
    137  
    138                 if ( n>10000 ) {it_error ( "increase 10000 here!" );} 
    139  
    140                 for ( int i=0;i<n;i++ ) { 
    141                         Bms[i] = new BM_T ( BMcond0 ); //copy constructor 
    142                         const epdf& pom=Bms[i]->posterior(); 
    143                         jest.set_elements ( i,1.0/n,&pom ); 
    144                 } 
     171        MPF () : PF (), jest ( est ) {}; 
     172        void set_parameters ( mpdf *par0, mpdf *obs0, int n0, RESAMPLING_METHOD rm=SYSTEMATIC ) { 
     173                PF::set_parameters ( par0, obs0, n0, rm ); 
     174                jest.set_parameters ( n0 );//duplication of rm 
     175                BMs.set_length ( n0 ); 
     176        } 
     177        void set_statistics ( epdf *epdf0, const BM_T* BMcond0 ) { 
     178 
     179                PF::set_statistics ( ones ( n ) /n, epdf0 ); 
     180                // copy 
     181                for ( int i=0;i<n;i++ ) { BMs ( i ) = new BM_T ( *BMcond0 ); BMs ( i )->condition ( _samples ( i ) );} 
     182 
     183                jest.read_statistics ( BMs ); 
     184                //options 
    145185        }; 
    146  
    147         ~MPF() { 
    148         } 
    149186 
    150187        void bayes ( const vec &dt ); 
    151188        const epdf& posterior() const {return jest;} 
    152189        const epdf* _e() const {return &jest;} //Fixme: is it useful? 
    153         //! Set postrior of \c rvc to samples from epdf0. Statistics of Bms are not re-computed! Use only for initialization! 
    154         void set_est ( const epdf& epdf0 ) { 
    155                 PF::set_est ( epdf0 );  // sample params in condition 
    156                 // copy conditions to BMs 
    157  
    158                 for ( int i=0;i<n;i++ ) {Bms[i]->condition ( _samples ( i ) );} 
    159         } 
    160         void set_options(const string &opt){ 
    161                 PF:set_options(opt); 
    162                 opt_L_mea = ( s.find ( "logmeans" ) !=string::npos ); 
    163         } 
    164          
     190        //! Set postrior of \c rvc to samples from epdf0. Statistics of BMs are not re-computed! Use only for initialization! 
     191        /*      void set_est ( const epdf& epdf0 ) { 
     192                        PF::set_est ( epdf0 );  // sample params in condition 
     193                        // copy conditions to BMs 
     194 
     195                        for ( int i=0;i<n;i++ ) {BMs(i)->condition ( _samples ( i ) );} 
     196                }*/ 
     197        void set_options ( const string &opt ) { 
     198                PF::set_options ( opt ); 
     199                opt_L_mea = ( opt.find ( "logmeans" ) !=string::npos ); 
     200        } 
     201 
    165202        //!Access function 
    166         BM* _BM ( int i ) {return Bms[i];} 
     203        BM* _BM ( int i ) {return BMs ( i );} 
    167204}; 
    168205 
     
    180217                _samples ( i ) = par->samplecond ( _samples ( i ) ); 
    181218                llsP ( i ) = par->_e()->evallog ( _samples ( i ) ); 
    182                 Bms[i]->condition ( _samples ( i ) ); 
    183                 Bms[i]->bayes ( dt ); 
    184                 lls ( i ) = Bms[i]->_ll(); // lls above is also in proposal her must be lls(i) =, not +=!! 
     219                BMs ( i )->condition ( _samples ( i ) ); 
     220                BMs ( i )->bayes ( dt ); 
     221                lls ( i ) = BMs ( i )->_ll(); // lls above is also in proposal her must be lls(i) =, not +=!! 
    185222                if ( lls ( i ) >mlls ) mlls=lls ( i ); //find maximum likelihood (for numerical stability) 
    186223        } 
     
    204241        double eff = 1.0/ ( _w*_w ); 
    205242        if ( eff < ( 0.3*n ) ) { 
    206                 ind = est.resample(); 
     243                ind = est.resample ( resmethod ); 
    207244                // Resample Bms! 
    208245 
     
    215252                                // poor-man's solution: replicate constructor here 
    216253                                // copied from MPF::MPF 
    217                                 delete Bms[i]; 
    218                                 Bms[i] = new BM_T ( *Bms[ind ( i ) ] ); //copy constructor 
    219                                 const epdf& pom=Bms[i]->posterior(); 
     254                                delete BMs ( i ); 
     255                                BMs ( i ) = new BM_T ( *BMs ( ind ( i ) ) ); //copy constructor 
     256                                const epdf& pom=BMs ( i )->posterior(); 
    220257                                jest.set_elements ( i,1.0/n,&pom ); 
    221258                        } 
  • bdm/estim/merger.cpp

    r278 r283  
    3333        it_assert_debug ( rv.equal ( g0->_rv() ),"Incompatible g0" ); 
    3434        //Empirical density - samples 
    35         eSmp.set_parameters ( ones ( Ns ), g0 ); 
     35        eSmp.set_statistics ( ones ( Ns ), g0 ); 
    3636        Array<vec> &Smp = eSmp._samples(); //aux 
    3737        vec &w = eSmp._w(); //aux 
  • bdm/estim/merger.h

    r278 r283  
    7171        } 
    7272//! Set internal parameters used in approximation 
    73         void set_parameters ( double beta0, int Ns0, int Nc0 ) {beta=beta0;Ns=Ns0;Nc=Nc0;eSmp.set_n(Ns0,false);} 
     73        void set_parameters ( double beta0, int Ns0, int Nc0 ) {beta=beta0;Ns=Ns0;Nc=Nc0;eSmp.set_parameters(Ns0,false);} 
    7474//!Initialize the proposal density. This function must be called before merge()! 
    7575        void init() { ////////////// NOT FINISHED