00001 #ifndef INDII_ML_AUX_ALMOSTGAUSSIANKERNEL_HPP
00002 #define INDII_ML_AUX_ALMOSTGAUSSIANKERNEL_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
00030
00031
00032
00033
00034
00035
00036 class AlmostGaussianKernel : public Kernel {
00037 public:
00038
00039
00040
00041
00042
00043
00044 AlmostGaussianKernel();
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056 AlmostGaussianKernel(const unsigned int N, const double h);
00057
00058
00059
00060
00061 virtual ~AlmostGaussianKernel();
00062
00063 virtual double operator()(const double x) const;
00064
00065
00066
00067
00068
00069
00070 virtual double sample() const;
00071
00072 private:
00073
00074
00075
00076 double ZI;
00077
00078
00079
00080
00081 double E;
00082
00083
00084
00085
00086 template<class Archive>
00087 void serialize(Archive& ar, const unsigned int version);
00088
00089
00090
00091
00092 friend class boost::serialization::access;
00093
00094 };
00095
00096 }
00097 }
00098 }
00099
00100 #include "Random.hpp"
00101
00102 #include <math.h>
00103
00104 inline double indii::ml::aux::AlmostGaussianKernel::operator()(const double x)
00105 const {
00106 return ZI * exp(E * x);
00107 }
00108
00109 inline double indii::ml::aux::AlmostGaussianKernel::sample() const {
00110 return fabs(Random::gaussian(0.0, getBandwidth()));
00111 }
00112
00113 template<class Archive>
00114 void indii::ml::aux::AlmostGaussianKernel::serialize(Archive& ar,
00115 const unsigned int version) {
00116 ar & boost::serialization::base_object<Kernel>(*this);
00117 ar & ZI;
00118 ar & E;
00119 }
00120
00121 #endif
00122