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