#ifndef RBF_functions_hpp #define RBF_functions_hpp // Les RBF // classe de base template class RBF{ // Radial Basis Functions: base. protected: real epsilon; RBF(real eps):epsilon(eps){}; void set_epsilon(real eps) {epsilon = eps;} }; template class MQI: public RBF { // Multiquadratique inverse. public: using RBF::set_epsilon; //utiliser le set-epsilon de la classe // de base (C++ 11 !). // constructeur: on appelle de constructeur de la base. MQI(real eps): RBF(eps){} // la veur en x (distance au noeud) inline real operator()(real x){return 1./sqrt(1.+ RBF::epsilon*x*x);} }; /// template class TPS: public RBF { // plaque mince. public: TPS(real eps): RBF(eps){} inline real operator()(real x){return exp(-RBF::epsilon*x)* (1.+RBF::epsilon*x);} }; template class Gauss: public RBF { // Gaussienne public: Gauss(real eps): RBF(eps){} inline real operator()(real x){ if(x<1.e-10) return 1.; else return exp(-RBF::epsilon*x*x);} }; template class TPSD: public RBF { // plaque mince à la Duchon.. public: TPSD(real eps): RBF(eps){} inline real operator()(real x){ if(x<1.e-9) return 1.; else return 1/(1.+ pow(RBF::epsilon*x,2)*log(RBF::epsilon*x));} }; #endif