work/mixpp/libEF.h

Go to the documentation of this file.
00001 
00013 #ifndef EF_H
00014 #define EF_H
00015 
00016 #include <itpp/itbase.h>
00017 //#include <std>
00018 
00019 using namespace itpp;
00020 
00026 class eEF :public epdf {
00027 
00028 public:
00029         virtual void tupdate( double phi, mat &vbar, double nubar ){};
00030         virtual void dupdate( mat &v,double nu=1.0 ){};
00031 };
00032 
00033 class mEF :public mpdf {
00034 
00035 public:
00036 
00037 };
00038 
00044 template<class sq_T>
00045 class enorm : public eEF {
00046         vec mu;
00047         sq_T R;
00048 public:
00049         enorm( RV &rv, vec &mu, sq_T &R );
00050         enorm();
00051         void tupdate( double phi, mat &vbar, double nubar );
00052         void dupdate( mat &v,double nu=1.0 );
00053         vec sample();
00054         double eval( const vec &val );
00055 
00056 };
00057 
00061 template<class sq_T>
00062 class mlnorm : public mEF {
00063         enorm<sq_T> epdf;
00064         mat A;
00065 public:
00067         mlnorm( RV &rv,RV &rvc, mat &A, sq_T &R );
00069         vec samplecond( vec &cond, double &lik );
00070         mat samplecond( vec &cond, vec &lik, int n );
00071         void condition( vec &cond );
00072 };
00073 
00075 
00076 template<class sq_T>
00077 enorm<sq_T>::enorm( RV &rv, vec &mu0, sq_T &R0 ) {
00078         mu = mu0;
00079         R = R0;
00080 };
00081 
00082 template<class sq_T>
00083 void enorm<sq_T>::dupdate( mat &v, double nu ) {
00084         //
00085 };
00086 
00087 template<class sq_T>
00088 void enorm<sq_T>::tupdate( double phi, mat &vbar, double nubar ) {
00089         //
00090 };
00091 
00092 template<class sq_T>
00093 vec enorm<sq_T>::sample() {
00094         //
00095 };
00096 
00097 template<class sq_T>
00098 double enorm<sq_T>::eval( const vec &val ) {
00099         //
00100 };
00101 
00102 
00103 template<class sq_T>
00104 enorm<sq_T>::enorm() {};
00105 
00106 template<class sq_T>
00107 mlnorm<sq_T>::mlnorm( RV &rv,RV &rvc, mat &A, sq_T &R ) {
00108         int dim = rv.length();
00109         vec mu( dim );
00110 
00111         epdf = enorm<sq_T>( rv,mu,R );
00112 }
00113 
00114 template<class sq_T>
00115 vec mlnorm<sq_T>::samplecond( vec &cond, double &lik ) {
00116         this->condition( cond );
00117         vec smp = epdf.sample();
00118         lik = epdf.eval(smp);
00119         return smp;
00120 }
00121 
00122 template<class sq_T>
00123 mat mlnorm<sq_T>::samplecond( vec &cond, vec &lik, int n ) {
00124         int i;
00125         int dim = rv.length();
00126         mat Smp( dim,n );
00127         vec smp( dim);
00128         this->condition( cond );
00129         for ( i=0; i<dim; i++ ) {
00130                 smp = epdf.sample();
00131                 lik(i) = epdf.eval(smp);
00132                 Smp.set_col( i ,smp);
00133         }
00134         return Smp;
00135 }
00136 
00137 template<class sq_T>
00138 void mlnorm<sq_T>::condition( vec &cond) {
00139 }
00140 
00141 #endif //EF_H

Generated on Wed Jan 23 11:30:10 2008 for mixpp by  doxygen 1.5.3