00001 #ifndef INDII_ML_AUX_GAUSSIANKERNEL_HPP
00002 #define INDII_ML_AUX_GAUSSIANKERNEL_HPP
00003
00004 #include "Kernel.hpp"
00005
00006 namespace indii {
00007 namespace ml {
00008 namespace aux {
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 class GaussianKernel : public Kernel {
00030 public:
00031
00032
00033
00034
00035
00036
00037 GaussianKernel();
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 GaussianKernel(const unsigned int N, const double h);
00050
00051
00052
00053
00054 virtual ~GaussianKernel();
00055
00056 virtual double operator()(const double x) const;
00057
00058
00059
00060
00061
00062
00063 virtual double sample() const;
00064
00065 private:
00066
00067
00068
00069 double ZI;
00070
00071
00072
00073
00074 double E;
00075
00076
00077
00078
00079 template<class Archive>
00080 void serialize(Archive& ar, const unsigned int version);
00081
00082
00083
00084
00085 friend class boost::serialization::access;
00086
00087 };
00088
00089 }
00090 }
00091 }
00092
00093 #include "Random.hpp"
00094
00095 #include <math.h>
00096
00097 inline double indii::ml::aux::GaussianKernel::operator()(const double x)
00098 const {
00099 return ZI * exp(E * pow(x,2));
00100 }
00101
00102 inline double indii::ml::aux::GaussianKernel::sample() const {
00103 return fabs(Random::gaussian(0.0, getBandwidth()));
00104 }
00105
00106 template<class Archive>
00107 void indii::ml::aux::GaussianKernel::serialize(Archive& ar,
00108 const unsigned int version) {
00109 ar & boost::serialization::base_object<Kernel>(*this);
00110 ar & ZI;
00111 ar & E;
00112 }
00113
00114 #endif
00115