libBM.h itpp/itbase.h work/git/mixpp/bdm/stat/libFN.h work/git/mixpp/bdm/stat/libEF.h work/git/mixpp/bdm/stat/emix.h work/git/mixpp/bdm/stat/libBM.cpp work/git/mixpp/bdm/stat/libDS.h work/git/mixpp/bdm/stat/loggers.h work/git/mixpp/bdm/stat/merger.h work/git/mixpp/pmsm/testbidiff.cpp work/git/mixpp/tests/rv_test.cpp work/git/mixpp/tests/test0.cpp str RV fnc epdf mpdf mepdf DS BM BMcond RV RV concat (const RV &rv1, const RV &rv2) concat const RV & rv1 const RV & rv2 Concat two random variables. RV::add Bayesian Models (bm) that use Bayes rule to learn from observations. Vaclav Smidl. ----------------------------------- BDM++ - C++ library for Bayesian Decision Making under UncertaintyUsing IT++ for numerical operations ----------------------------------- #ifndefBM_H #defineBM_H #include<itpp/itbase.h> //#include<std> usingnamespaceitpp; classstr{ public: ivecids; ivectimes; str(ivecids0,ivectimes0):ids(ids0),times(times0){ it_assert_debug(times0.length()==ids0.length(),"Incompatibleinput"); }; }; classRV{ protected: inttsize; intlen; ivecids; ivecsizes; ivectimes; Array<std::string>names; private: voidinit(ivecin_ids,Array<std::string>in_names,ivecin_sizes,ivecin_times); public: RV(Array<std::string>in_names,ivecin_sizes,ivecin_times); RV(Array<std::string>in_names,ivecin_sizes); RV(Array<std::string>in_names); RV(); friendstd::ostream&operator<< (std::ostream&os,constRV&rv); intcount()const{returntsize;}; intlength()const{returnlen;}; //TODOwhynotinlineandlater?? ivecfindself(constRV&rv2)const; boolequal(constRV&rv2)const; booladd(constRV&rv2); RVsubt(constRVrv2)const; RVsubselect(ivecind)const; RVoperator() (ivecind)const; voidt(intdelta); strtostr()const; ivecdataind(RVcrv)const; Array<std::string>&_names(){returnnames;}; intid(intat){returnids(at);}; intsize(intat){returnsizes(at);}; inttime(intat){returntimes(at);}; std::stringname(intat){returnnames(at);}; }; RVconcat(constRV&rv1,constRV&rv2); classfnc{ protected: intdimy; public: fnc(intdy):dimy(dy){}; virtualveceval(constvec&cond){ returnvec(0); }; int_dimy()const{returndimy;} virtual~fnc(){}; }; classepdf{ protected: RVrv; public: epdf():rv(){}; epdf(constRV&rv0):rv(rv0){}; //virtualvecmoment(constintorder=1); virtualvecsample()const=0; virtualmatsampleN(intN)const; virtualdoubleeval(constvec&val)const{returnexp(this->evalpdflog(val));}; virtualdoubleevalpdflog(constvec&val)const=0; virtualvecmean()const=0; virtual~epdf(){}; RV&_rv(){returnrv;} }; //TODOSamplecondcanbegeneralized classmpdf{ protected: RVrv; RVrvc; epdf*ep; public: //virtualfncmoment(constintorder=1); virtualvecsamplecond(constvec&cond,double&ll){this->condition(cond); vectemp=ep->sample(); ll=ep->evalpdflog(temp);returntemp;}; virtualmatsamplecond(constvec&cond,vec&ll,intN){ this->condition(cond); mattemp(rv.count(),N);vecsmp(rv.count()); for(inti=0;i<N;i++){smp=ep->sample();temp.set_col(i,smp);ll(i)=ep->evalpdflog(smp);} returntemp; }; virtualvoidcondition(constvec&cond){}; virtualdoubleevalcond(constvec&dt,constvec&cond){this->condition(cond);returnep->eval(dt);}; virtual~mpdf(){}; mpdf(constRV&rv0,constRV&rvc0):rv(rv0),rvc(rvc0){}; RV_rvc(){returnrvc;} RV_rv(){returnrv;} epdf&_epdf(){return*ep;} }; classmepdf:publicmpdf{ public: mepdf(epdf&em):mpdf(em._rv(),RV()){ep=&em;}; }; classDS{ protected: RVDrv; RVUrv;// public: voidgetdata(vec&dt); voidgetdata(vec&dt,ivec&indeces); voidwrite(vec&ut); voidwrite(vec&ut,ivec&indeces); voidlinkrvs(RV&drv,RV&urv); voidstep(); }; classBM{ protected: RVrv; doublell; boolevalll; public: BM(constRV&rv0):rv(rv0),ll(0),evalll(true){//Fixme:testrv }; virtualvoidbayes(constvec&dt)=0; voidbayes(matDt); virtualepdf&_epdf()=0; virtual~BM(){}; constRV&_rv()const{returnrv;} double_ll()const{returnll;} }; classBMcond{ protected: RVrvc; public: virtualvoidcondition(constvec&val)=0; BMcond(RV&rv0):rvc(rv0){}; virtual~BMcond(){}; constRV&_rvc()const{returnrvc;} }; #endif//BM_H