00001 
00013 #ifndef MX_H
00014 #define MX_H
00015 
00016 #include "libBM.h"
00017 #include "libEF.h"
00018 
00019 
00020 using namespace itpp;
00021 
00032 class emix : public epdf
00033 {
00034         protected:
00036                 vec w;
00038                 Array<epdf*> Coms;
00039         public:
00041                 emix ( RV &rv ) : epdf ( rv ) {};
00043                 void set_parameters ( const vec &w, const Array<epdf*> &Coms );
00044 
00045                 vec sample() const;
00046                 vec mean() const
00047                 {
00048                         int i; vec mu=zeros ( rv.count() );
00049                         for ( i=0;i<w.length();i++ ) {mu+=w ( i ) *Coms ( i )->mean(); }
00050                         return mu;
00051                 }
00052                 double evalpdflog ( const vec &val ) const
00053                 {
00054                         int i;
00055                         double sum=0.0;
00056                         for ( i=0;i<w.length();i++ ) {sum+=w ( i ) *Coms ( i )->evalpdflog ( val );}
00057                         return log ( sum );
00058                 };
00059 
00060 
00062                 vec& _w() {return w;}
00063 };
00064 
00073 class eprod: public epdf
00074 {
00075         protected:
00076                 Array<epdf*> epdfs;
00077                 Array<mpdf*> mpdfs;
00078                 ivec sizes;
00079         public:
00080                 eprod(Array<epdf> Facs){
00081                         for 
00082                 };
00083 
00084 };
00085 
00089 class mmix : public mpdf
00090 {
00091         protected:
00093                 Array<mpdf*> Coms;
00095                 emix Epdf;
00096         public:
00098                 mmix ( RV &rv, RV &rvc ) : mpdf ( rv, rvc ), Epdf ( rv ) {ep=&Epdf;};
00100                 void set_parameters ( const vec &w, const Array<mpdf*> &Coms )
00101                 {
00102                         Array<epdf*> Eps ( Coms.length() );
00103 
00104                         for ( int i=0;i<Coms.length();i++ )
00105                         {
00106                                 Eps ( i ) =& ( Coms ( i )->_epdf() );
00107                         }
00108                         Epdf.set_parameters ( w,Eps );
00109                 };
00110 
00111                 void condition ( const vec &cond )
00112                 {
00113                         for ( int i=0;i<Coms.length();i++ ) {Coms ( i )->condition ( cond );}
00114                 };
00115 };
00116 #endif //MX_H