00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef FUNTRIPLETS_HPP
00012 #define FUNTRIPLETS_HPP
00013
00014 #include <math.h>
00015
00016 #include "exprPow.hpp"
00017
00018
00020 class funtriplet {
00021
00022 public:
00023
00025 funtriplet () {}
00026
00028 virtual ~funtriplet () {}
00029
00030 virtual CouNumber F (CouNumber x) = 0;
00031 virtual CouNumber Fp (CouNumber x) = 0;
00032 virtual CouNumber Fpp (CouNumber x) = 0;
00033 virtual CouNumber FpInv (CouNumber x) = 0;
00034 };
00035
00036
00038 class simpletriplet: public funtriplet {
00039
00040 protected:
00041
00042 unary_function f_;
00043 unary_function fp_;
00044 unary_function fpp_;
00045 unary_function fpI_;
00046
00047 public:
00048
00050 simpletriplet (unary_function f = NULL,
00051 unary_function fp = NULL,
00052 unary_function fpp = NULL,
00053 unary_function fpI = NULL):
00054 f_ (f),
00055 fp_ (fp),
00056 fpp_ (fpp),
00057 fpI_ (fpI) {}
00058
00060 virtual ~simpletriplet () {}
00061
00062 virtual CouNumber F (CouNumber x) {return f_ (x);}
00063 virtual CouNumber Fp (CouNumber x) {return fp_ (x);}
00064 virtual CouNumber Fpp (CouNumber x) {return fpp_ (x);}
00065 virtual CouNumber FpInv (CouNumber x) {return fpI_ (x);}
00066 };
00067
00068
00070 class powertriplet: public funtriplet {
00071
00072 protected:
00073
00074 CouNumber exponent_;
00075
00076 public:
00077
00079 powertriplet (CouNumber exponent):
00080 exponent_ (exponent) {}
00081
00083 virtual ~powertriplet () {}
00084
00085 virtual CouNumber F (CouNumber x)
00086 {return safe_pow (x, exponent_);}
00087
00088 virtual CouNumber Fp (CouNumber x)
00089 {return exponent_ * safe_pow (x, exponent_ - 1);}
00090
00091 virtual CouNumber Fpp (CouNumber x)
00092 {return exponent_ * (exponent_ - 1) * safe_pow (x, exponent_ - 2);}
00093
00094 virtual CouNumber FpInv (CouNumber x)
00095 {return safe_pow (x / exponent_, 1 / (exponent_ - 1));}
00096 };
00097
00098
00100 class kpowertriplet: public powertriplet {
00101
00102 protected:
00103
00104 CouNumber mult_;
00105
00106 public:
00107
00109 kpowertriplet (CouNumber exponent, CouNumber k):
00110 powertriplet (exponent),
00111 mult_ (k) {}
00112
00114 virtual ~kpowertriplet () {}
00115
00116 virtual CouNumber F (CouNumber x)
00117 {return mult_ * safe_pow (x, exponent_);}
00118
00119 virtual CouNumber Fp (CouNumber x)
00120 {return mult_ * exponent_ * safe_pow (x, exponent_ - 1);}
00121
00122 virtual CouNumber Fpp (CouNumber x)
00123 {return mult_ * exponent_ * (exponent_ - 1) * safe_pow (x, exponent_ - 2);}
00124
00125 virtual CouNumber FpInv (CouNumber x)
00126 {return safe_pow (x / (mult_ * exponent_), 1 / (exponent_ - 1));}
00127 };
00128
00129 #endif