123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- #ifndef RBF_functions_hpp
- #define RBF_functions_hpp
- // Les RBF
- template<typename real> class RBF{
- // Radial Basis Functions: base.
- protected:
- real epsilon;
- RBF(real eps):epsilon(eps){};
- void set_epsilon(real eps) {epsilon = eps;}
- };
- template<typename real> class MQI: public RBF<real> {
- // Multiquadratique inverse.
-
- public:
- using RBF<real>::set_epsilon;
- MQI(real eps): RBF<real>(eps){}
- inline real operator()(real x){return 1./sqrt(1.+
- RBF<real>::epsilon*x*x);}
- };
- template<typename real> class TPS: public RBF<real> {
- // plaque mince.
- public:
- TPS(real eps): RBF<real>(eps){}
- inline real operator()(real x){return exp(-RBF<real>::epsilon*x)*
- (1.+RBF<real>::epsilon*x);}
- };
- template<typename real> class Gauss: public RBF<real> {
- // Gaussienne
- public:
- Gauss(real eps): RBF<real>(eps){}
- inline real operator()(real x){
- if(x<1.e-10)
- return 1.;
- else
- return exp(-RBF<real>::epsilon*x*x);}
- };
- template<typename real> class TPSD: public RBF<real> {
- // plaque mince à la Duchon..
- public:
- TPSD(real eps): RBF<real>(eps){}
- inline real operator()(real x){
- if(x<1.e-9)
- return 1.;
- else
- return 1/(1.+
- pow(RBF<real>::epsilon*x,2)*log(RBF<real>::epsilon*x));}
-
- };
- #endif
|