Changeset 1192 for library/bdm/stat

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

fixes ob ProdBM

Location:
library/bdm/stat
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • 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;