00001 #define __cplusplus__
00002 #ifndef __DIAGGAUSSMIX__
00003 #define __DIAGGAUSSMIX__
00004
00005 #include<iostream>
00006 #include<istream>
00007 #include<fstream>
00008 #include<string>
00009 #include<vector>
00010 #include<sstream>
00011 #include <cmath>
00012
00013 using namespace std;
00014
00015 #include <Diag_Normal.hpp>
00016 #include <IID_Mixture.hpp>
00017
00028 class Diag_Normal_Mix : public IID_Mixture{
00029
00030 vector<Diag_Normal *> Gaussians;
00031
00032 public :
00033
00035 Diag_Normal_Mix();
00036
00038 Diag_Normal_Mix(uint k, uint dim);
00039
00041 Diag_Normal_Mix(uint k, vector<Diag_Normal *> const & gauss);
00042
00044 ~Diag_Normal_Mix();
00045
00047 void DeleteAll();
00048
00049
00051 uint Get_D();
00052
00053 uint Degrees_Of_Freedom();
00054
00055 void Init(Spatial_Data *spatd);
00056 void Init_Mclachlan(Spatial_Data *spatd);
00057
00059 void Simulate(uint N, Data *dat);
00060
00062 double Density(vector<double> const & X, uint k);
00063
00064
00066 void Update_Gaussians(Spatial_Data *spatd, vector<double> const & tik);
00067
00068
00070
00072
00073
00075 void Info();
00076
00078 void EM_E(Spatial_Data *spatd, vector<double> & tik);
00080 void EM_M(Spatial_Data *spatd, vector<double> const & tik);
00081
00082
00084 void NEM_E(Spatial_Data *spatd, vector<double> const & beta, vector<double> & tik);
00086 void NEM_M(Spatial_Data *spatd, vector<double> const & tik);
00087
00088 };
00089
00090
00091 #endif