Changeset 1192 for library/bdm/stat/emix.h
- Timestamp:
- 09/17/10 14:35:13 (14 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
library/bdm/stat/emix.h
r1170 r1192 293 293 virtual const int no_factors() const NOT_IMPLEMENTED(0); 294 294 //! 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 297 298 vec mean() const; 298 299 … … 449 450 ProdBMBase & pb; 450 451 public : 451 452 452 eprod_bm(ProdBMBase &pb0): pb(pb0) {} 453 const epdf* factor(int i ) const { 453 454 return &(pb.bm(i)->posterior()); 454 455 } … … 458 459 } est; 459 460 public: 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); 462 466 virtual int no_bms() const { 463 467 return 0; … … 496 500 497 501 for (int i=0; i<no_bms(); i++) { 502 bm_yt(i).set_length(bm(i)->dimensiony()); 498 503 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); 500 506 } 501 507 } … … 506 512 bm_cond(i).update(dt,cond); 507 513 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 511 528 }; 512 529 … … 515 532 Array<shared_ptr<BM> > BMs; 516 533 public: 534 ProdBM():ProdBMBase(),BMs(){}; 535 ProdBM(const ProdBM &p0):ProdBMBase(p0),BMs(p0.BMs){est.validate();}; 536 ProdBM* _copy() const {return new ProdBM(*this);} 517 537 virtual BM* bm(int i) { 518 538 return BMs(i).get(); … … 529 549 UI::save(BMs,set,"BMs"); 530 550 } 531 532 551 }; 533 552 UIREGISTER(ProdBM);