Changeset 1192 for library

Show
Ignore:
Timestamp:
09/17/10 14:35:13 (14 years ago)
Author:
smidl
Message:

fixes ob ProdBM

Location:
library/bdm
Files:
7 modified

Legend:

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

    r1165 r1192  
    210210    rv.dataind ( rv_up, v2v_down, v2v_up ); 
    211211    downsize = v2v_down.length(); 
    212     upsize = v2v_up.length(); 
     212    upsize = rv_up._dsize();//v2v_up.length(); 
    213213} 
    214214 
  • library/bdm/base/bdmbase.h

    r1165 r1192  
    10361036    }; 
    10371037    void connect(const RV &vecrv, const RV & vec1) { 
    1038         bdm_assert(vecrv._dsize()==length(),"Description of this vector, "+ vecrv.to_string() +" does not math it length: " + num2str(length())); 
     1038 
     1039                bdm_assert(vecrv._dsize()==length(),"Description of this vector, "+ vecrv.to_string() +" does not math it length: " + num2str(length())); 
    10391040        dl.set_connection(vecrv,vec1); 
     1041                vecfromlen=vec1._dsize(); 
    10401042        bdm_assert(dl._downsize()==length(), "Rv of this vector, "+vecrv.to_string() +" was not found in given rv: "+vec1.to_string()); 
    10411043    }; 
     1044        void push_to(vec &v_up){ 
     1045                dl.pushup(*this,v_up); 
     1046        } 
     1047        datalink_part& _dl() {return dl;} 
    10421048}; 
    10431049 
     
    13251331         
    13261332        //! Sample from predictor(cond). Implemented as sampling the joint density \f$ f(y_t, \theta_t) \f$ and discarding the sample of \f$ \theta_t \f$. 
    1327         virtual vec samplepred(const vec &cond=empty_vec) const NOT_IMPLEMENTED(empty_vec); 
     1333        virtual vec samplepred(const vec &cond=empty_vec) NOT_IMPLEMENTED(empty_vec); 
    13281334 
    13291335    //! Matrix version of logpred 
  • library/bdm/estim/arx.cpp

    r1176 r1192  
    7171} 
    7272 
    73 vec ARX::samplepred(const vec &cond) const{ 
     73vec ARX::samplepred(const vec &cond) { 
    7474        mat M; 
    7575        chmat R; 
  • library/bdm/estim/arx.h

    r1189 r1192  
    8989    }; 
    9090        double logpred ( const vec &yt, const vec &cond ) const; 
    91         vec samplepred (  const vec &cond ) const; 
     91        vec samplepred (  const vec &cond ) ; 
    9292        void flatten ( const BMEF* B , double weight ); 
    9393    //! Conditioned version of the predictor 
  • library/bdm/estim/particles.h

    r1187 r1192  
    3333        MarginalizedParticleBase ∓ 
    3434    public: 
    35         eprod_2(MarginalizedParticleBase &m):mp(m) {} 
    36         const epdf* factor(int i) const { 
     35                eprod_2(MarginalizedParticleBase &m):mp(m) {} 
     36                const epdf* factor(int i) const { 
    3737            return (i==0) ? &mp.bm->posterior() : &mp.est_emp; 
    3838        } 
     
    622622}; 
    623623UIREGISTER(NoiseParticleX); 
     624 
    624625 
    625626/*! Marginalized particle for state-space models with unknown parameters of distribuution of residues on \f$v_t\f$ and \f$ w_t \f$. 
  • library/bdm/stat/emix.h

    r1170 r1192  
    293293    virtual const int no_factors() const NOT_IMPLEMENTED(0); 
    294294    //! Default constructor 
    295     eprod_base () :  dls (0) {}; 
    296     //! Set internal 
     295        eprod_base () :  dls (0) {}; 
     296        eprod_base (const eprod_base &ep0) :  dls (ep0.dls) {}; 
     297        //! Set internal 
    297298    vec mean() const; 
    298299 
     
    449450        ProdBMBase & pb; 
    450451    public : 
    451         eprod_bm(ProdBMBase &pb0): pb(pb0) {} 
    452         const epdf* factor(int i ) const { 
     452                eprod_bm(ProdBMBase &pb0): pb(pb0) {} 
     453                const epdf* factor(int i ) const { 
    453454            return &(pb.bm(i)->posterior()); 
    454455        } 
     
    458459    } est; 
    459460public: 
    460     ProdBMBase():est(*this) {} 
    461     virtual BM* bm(int i) NOT_IMPLEMENTED(NULL); 
     461        ProdBMBase():BM(),est(*this) {} 
     462        ProdBMBase(const ProdBMBase &p0):BM(p0),bm_yt(p0.bm_yt),bm_cond(p0.bm_cond),est(*this) { 
     463                est.validate(); 
     464        } 
     465        virtual BM* bm(int i) NOT_IMPLEMENTED(NULL); 
    462466    virtual int no_bms() const { 
    463467        return 0; 
     
    496500 
    497501        for (int i=0; i<no_bms(); i++) { 
     502                        bm_yt(i).set_length(bm(i)->dimensiony()); 
    498503            bm_yt(i).connect(bm(i)->_yrv(), yrv); 
    499             bm_cond(i).connect(bm(i)->_rvc(), yrv, rvc); 
     504                        bm_cond(i).set_length(bm(i)->dimensionc()); 
     505                        bm_cond(i).connect(bm(i)->_rvc(), yrv, rvc); 
    500506        } 
    501507    } 
     
    506512            bm_cond(i).update(dt,cond); 
    507513            bm(i)->bayes(bm_yt(i), bm_cond(i)); 
    508         } 
    509     } 
    510  
     514                        ll+=bm(i)->_ll(); 
     515        } 
     516    } 
     517    vec samplepred( const vec &cond) { 
     518                vec samp=zeros(dimy); 
     519                 
     520                for(int i=0; i<no_bms(); i++) { 
     521                        bm_cond(i).update(samp,cond); 
     522                        vec yi=bm(i)->samplepred(bm_cond(i)); 
     523                        bm_yt(i)._dl().pushup(samp,yi); 
     524                } 
     525                return samp; 
     526        } 
     527         
    511528}; 
    512529 
     
    515532    Array<shared_ptr<BM> > BMs; 
    516533public: 
     534        ProdBM():ProdBMBase(),BMs(){}; 
     535        ProdBM(const ProdBM &p0):ProdBMBase(p0),BMs(p0.BMs){est.validate();}; 
     536    ProdBM* _copy() const {return new ProdBM(*this);} 
    517537    virtual BM* bm(int i) { 
    518538        return BMs(i).get(); 
     
    529549        UI::save(BMs,set,"BMs"); 
    530550    } 
    531  
    532551}; 
    533552UIREGISTER(ProdBM); 
  • library/bdm/stat/exp_family.cpp

    r1189 r1192  
    160160vec egiw::est_theta() const { 
    161161    if ( dimx == 1 ) { 
     162                if (dimc<1) return empty_vec; 
     163                 
    162164        const mat &L = V._L(); 
    163165        int end = L.rows() - 1;