00001 #define __cplusplus__
00002 #ifndef __GAUSSHDMIX__
00003 #define __GAUSSHDMIX__
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 <NormalHD.hpp>
00016 #include <IID_Mixture.hpp>
00017
00028 class GaussHD_Mix : public IID_Mixture{
00029
00030 vector<NormalHD *> Gaussians;
00031
00032
00033 public :
00034
00036 GaussHD_Mix();
00037
00039 GaussHD_Mix(uint k, uint dim);
00040
00042 GaussHD_Mix(uint k, vector<Normal *> const & gauss);
00043
00045 ~GaussHD_Mix();
00046
00048 void DeleteAll();
00049
00050
00052 uint Get_D();
00053
00054 uint Degrees_Of_Freedom();
00055
00056 void Init(Spatial_Data *spatd);
00057 void Init_Mclachlan(Spatial_Data *spatd);
00058
00060 void Simulate(uint N, Data *dat);
00061
00063 double Density(vector<double> const & X, uint k);
00064
00065
00067 void Update_Gaussians(Spatial_Data *spatd, vector<double> const & tik);
00068
00069
00071
00073
00074
00076 void Info();
00077
00079 void EM_E(Spatial_Data *spatd, vector<double> & tik);
00081 void EM_M(Spatial_Data *spatd, vector<double> const & tik);
00082
00083
00085 void NEM_E(Spatial_Data *spatd, vector<double> const & beta, vector<double> & tik);
00087 void NEM_M(Spatial_Data *spatd, vector<double> const & tik);
00088
00089 };
00090
00091
00092 #endif