1#ifndef __JMATH__JMATHLIB__
2#define __JMATH__JMATHLIB__
6#include <initializer_list>
20namespace JPP {
using namespace JMATH; }
38 template<
class ...Args>
50 operator const double*()
const
62 template<
class ...Args>
63 void add(
const double x,
const Args& ...args)
76 void add(
const double x)
106 std::vector<double JF1_t::*>(1, parameter)
116 std::vector<double JF1_t::*>(parameters)
128 std::vector<double JF1_t::*>(parameters.begin(), parameters.end())
130 this->push_back(parameter);
140 template<
class U,
class V>
143 for (
const auto& i : first) { this->push_back(i); }
144 for (
const auto& i : second) { this->push_back(i); }
154 template<
class JF1_t>
157 return JF1_t::parameters.size();
168 template<
class JF1_t>
171 return f1.*JF1_t::parameters.at(i);
181 template<
class JF1_t>
184 if (f1 != NULL && values != NULL) {
185 for (
size_t i = 0; i != JF1_t::parameters.size(); ++i) {
186 f1->*JF1_t::parameters[i] = values[i];
195 template<
class JF1_t>
205 for (
const auto& i : JF1_t::parameters) {
206 static_cast<JF1_t&
>(*this).*i = -(
static_cast<JF1_t&
>(*this).*i);
209 return static_cast<JF1_t&
>(*this);
219 JF1_t&
add(
const JF1_t& f1)
221 for (
const auto& i : JF1_t::parameters) {
222 static_cast<JF1_t&
>(*this).*i += f1.*i;
225 return static_cast<JF1_t&
>(*this);
235 JF1_t&
sub(
const JF1_t& f1)
237 for (
const auto& i : JF1_t::parameters) {
238 static_cast<JF1_t&
>(*this).*i -= f1.*i;
241 return static_cast<JF1_t&
>(*this);
251 JF1_t&
mul(
const double factor)
253 for (
const auto& i : JF1_t::parameters) {
254 static_cast<JF1_t&
>(*this).*i *= factor;
257 return static_cast<JF1_t&
>(*this);
267 JF1_t&
div(
const double factor)
269 for (
const auto& i : JF1_t::parameters) {
270 static_cast<JF1_t&
>(*this).*i /= factor;
273 return static_cast<JF1_t&
>(*this);
284 friend JF1_t&
operator+=(JF1_t& function,
const JF1_t& value)
286 return function.add(value);
297 friend JF1_t&
operator-=(JF1_t& function,
const JF1_t& value)
299 return function.sub(value);
310 friend JF1_t&
operator*=(JF1_t& function,
const double factor)
312 return function.mul(factor);
323 friend JF1_t&
operator/=(JF1_t& function,
const double factor)
325 return function.div(factor);
330 template<
class JF1_t>
333 template<
class JF1_t,
class JF2_t =
double>
336 template<
class JF1_t,
class JF2_t =
double>
339 template<
class JF1_t,
class JF2_t =
double>
342 template<
class JF1_t,
class JF2_t =
double>
345 template<
class JF1_t>
353 template<
class JF1_t>
361 template<
class ...Args>
364 return static_cast<const JF1_t&
>(*this).getValue(args...);
490 template<
class JF2_t>
504 template<
class JF2_t>
518 template<
class JF2_t>
532 template<
class JF2_t>
556 template<
class JF1_t>
587 template<
class ...Args>
590 return -
static_cast<const JF1_t&
>(*this).getValue(args...);
602 return -
static_cast<const JF1_t&
>(*this).getDerivative(x);
612 template<
class ...Args>
617 static_cast<JF1_t&
>(gradient) =
static_cast<const JF1_t&
>(*this).
getGradient(args...);
618 static_cast<JF1_t&
>(gradient).negate();
628 template<
class JF1_t>
630 public JMathlib< JAdd<JF1_t, double> >,
649 JAdd(
const JF1_t& f1,
const double value) :
661 template<
class ...Args>
664 return static_cast<const JF1_t&
>(*this).getValue(args...) + value;
676 return static_cast<const JF1_t&
>(*this).getDerivative(x);
686 template<
class ...Args>
689 static JAdd gradient;
691 static_cast<JF1_t&
>(gradient) =
static_cast<const JF1_t&
>(*this).
getGradient(args...);
704 template<
class JF1_t>
706 public JMathlib< JSub<JF1_t, double> >,
725 JSub(
const JF1_t& f1,
const double value) :
737 template<
class ...Args>
740 return static_cast<const JF1_t&
>(*this).getValue(args...) - value;
752 return static_cast<const JF1_t&
>(*this).getDerivative(x);
762 template<
class ...Args>
765 static JSub gradient;
767 static_cast<JF1_t&
>(gradient) =
static_cast<const JF1_t&
>(*this).
getGradient(args...);
780 template<
class JF1_t>
782 public JMathlib< JMul<JF1_t, double> >,
801 JMul(
const JF1_t& f1,
const double value) :
813 template<
class ...Args>
816 return static_cast<const JF1_t&
>(*this).getValue(args...) * value;
828 return static_cast<const JF1_t&
>(*this).getDerivative(x) * value;
838 template<
class ...Args>
841 static JMul gradient;
843 static_cast<JF1_t&
>(gradient) =
static_cast<const JF1_t&
>(*this).
getGradient(args...);
844 static_cast<JF1_t&
>(gradient) *= value;
857 template<
class JF1_t>
859 public JMathlib< JDiv<JF1_t, double> >,
878 JDiv(
const JF1_t& f1,
const double value) :
890 template<
class ...Args>
893 return static_cast<const JF1_t&
>(*this).getValue(args...) / value;
905 return static_cast<const JF1_t&
>(*this).getDerivative(x) / value;
915 template<
class ...Args>
918 static JDiv gradient;
920 static_cast<JF1_t&
>(gradient) =
static_cast<const JF1_t&
>(*this).
getGradient(args...);
921 static_cast<JF1_t&
>(gradient) /= value;
934 template<
class JF1_t,
class JF2_t>
960 JPair(
const JF1_t& f1,
const JF2_t& f2) :
971 template<
class JF1_t,
class JF2_t>
978 template<
class JF1_t,
class JF2_t>
980 public JMathlib< JAdd<JF1_t, JF2_t> >,
981 public JPair<JF1_t, JF2_t>
999 JAdd(
const JF1_t& f1,
const JF2_t& f2) :
1000 JPair<JF1_t, JF2_t>(f1, f2)
1010 template<
class ...Args>
1013 return (
static_cast<const JF1_t&
>(*this).getValue(args...) +
1014 static_cast<const JF2_t&
>(*this).getValue(args...));
1026 return (
static_cast<const JF1_t&
>(*this).getDerivative(x) +
1027 static_cast<const JF2_t&
>(*this).getDerivative(x));
1037 template<
class ...Args>
1040 static JAdd gradient;
1042 static_cast<JF1_t&
>(gradient) =
static_cast<const JF1_t&
>(*this).
getGradient(args...);
1043 static_cast<JF2_t&
>(gradient) =
static_cast<const JF2_t&
>(*this).
getGradient(args...);
1053 template<
class JF1_t,
class JF2_t>
1055 public JMathlib< JSub<JF1_t, JF2_t> >,
1056 public JPair<JF1_t, JF2_t>
1074 JSub(
const JF1_t& f1,
const JF2_t& f2) :
1075 JPair<JF1_t, JF2_t>(f1, f2)
1085 template<
class ...Args>
1088 return (
static_cast<const JF1_t&
>(*this).getValue(args...) -
1089 static_cast<const JF2_t&
>(*this).getValue(args...));
1101 return (
static_cast<const JF1_t&
>(*this).getDerivative(x) -
1102 static_cast<const JF2_t&
>(*this).getDerivative(x));
1112 template<
class ...Args>
1115 static JSub gradient;
1117 static_cast<JF1_t&
>(gradient) =
static_cast<const JF1_t&
>(*this).
getGradient(args...);
1118 static_cast<JF2_t&
>(gradient) =
static_cast<const JF2_t&
>(*this).
getGradient(args...);
1119 static_cast<JF2_t&
>(gradient).
negate();
1129 template<
class JF1_t,
class JF2_t>
1131 public JMathlib< JMul<JF1_t, JF2_t> >,
1132 public JPair<JF1_t, JF2_t>
1150 JMul(
const JF1_t& f1,
const JF2_t& f2) :
1151 JPair<JF1_t, JF2_t>(f1, f2)
1161 template<
class ...Args>
1164 return (
static_cast<const JF1_t&
>(*this).getValue(args...) *
1165 static_cast<const JF2_t&
>(*this).getValue(args...));
1177 return (
static_cast<const JF1_t&
>(*this).getDerivative(x) *
static_cast<const JF2_t&
>(*this).getValue(x) +
1178 static_cast<const JF1_t&
>(*this).getValue(x) *
static_cast<const JF2_t&
>(*this).getDerivative(x));
1188 template<
class ...Args>
1191 static JMul gradient;
1193 static_cast<JF1_t&
>(gradient) =
static_cast<const JF1_t&
>(*this).
getGradient(args...);
1194 static_cast<JF1_t&
>(gradient) *=
static_cast<const JF2_t&
>(*this).
getValue(args...);
1195 static_cast<JF2_t&
>(gradient) =
static_cast<const JF2_t&
>(*this).getGradient(args...);
1196 static_cast<JF2_t&
>(gradient) *=
static_cast<const JF1_t&
>(*this).getValue(args...);
1206 template<
class JF1_t,
class JF2_t>
1208 public JMathlib< JDiv<JF1_t, JF2_t> >,
1209 public JPair<JF1_t, JF2_t>
1227 JDiv(
const JF1_t& f1,
const JF2_t& f2) :
1228 JPair<JF1_t, JF2_t>(f1, f2)
1238 template<
class ...Args>
1241 return (
static_cast<const JF1_t&
>(*this).getValue(args...) /
1242 static_cast<const JF2_t&
>(*this).getValue(args...));
1254 const double v =
static_cast<const JF1_t&
>(*this).getValue(x);
1255 const double w =
static_cast<const JF2_t&
>(*this).getValue(x);
1257 return (
static_cast<const JF1_t&
>(*this).getDerivative(x) * w -
1258 v *
static_cast<const JF2_t&
>(*this).getDerivative(x)) / (w*w);
1268 template<
class ...Args>
1271 static JDiv gradient;
1273 const double v =
static_cast<const JF1_t&
>(*this).
getValue(args...);
1274 const double w =
static_cast<const JF2_t&
>(*this).getValue(args...);
1276 static_cast<JF1_t&
>(gradient) =
static_cast<const JF1_t&
>(*this).getGradient(args...);
1277 static_cast<JF1_t&
>(gradient) *= 1.0/w;
1278 static_cast<JF2_t&
>(gradient) =
static_cast<const JF2_t&
>(*this).getGradient(args...);
1279 static_cast<JF2_t&
>(gradient) *= -v/(w*w);
1289 template<
class JF1_t>
1313 JFn(
const JF1_t& f1,
const int N) :
1325 template<
class ...Args>
1328 const double u =
static_cast<const JF1_t&
>(*this).getValue(args...);
1342 const double u =
static_cast<const JF1_t&
>(*this).getValue(x);
1343 const double v =
static_cast<const JF1_t&
>(*this).getDerivative(x);
1345 return N *
pow(u,
N - 1) * v;
1355 template<
class ...Args>
1358 static JFn gradient;
1360 const double u =
static_cast<const JF1_t&
>(*this).
getValue(args...);
1361 const double w =
N *
pow(u,
N - 1);
1363 static_cast<JF1_t&
>(gradient) =
static_cast<const JF1_t&
>(*this).getGradient(args...);
1364 static_cast<JF1_t&
>(gradient) *= w;
1376 template<
int ID_t,
size_t N>
1378 public JMathlib < JPolynome<ID_t, N> >,
1382 static const int ID = ID_t;
1407 template<
class ...Args>
1449 gradient.
a =
pow(x,N);
1476 template<
int ID_t,
size_t N>
1485 public JMathlib < JPolynome<ID_t, 0> >,
1488 static const int ID = ID_t;
1585 template<
int ID_t,
bool normalised = false>
1590 static const int ID = ID_t;
1609 const double sigma) :
1637 const double w = 1.0 /
sigma;
1640 return get(u) * -u * w;
1654 const double w = 1.0 /
sigma;
1655 const double u = (x -
center) * w;
1656 const double f0 =
get(u);
1675 inline double get(
const double u)
const
1677 return exp(-0.5*u*u);
1684 template<
int ID_t,
bool normalised>
1693 public JMathlib < JGauss<ID_t, true> >,
1696 static const int ID = ID_t;
1715 const double sigma) :
1743 const double w = 1.0 /
sigma;
1746 return get(u) * -u * w;
1760 const double w = 1.0 /
sigma;
1761 const double u = (x -
center) * w;
1762 const double f0 =
get(u);
1781 inline double get(
const double u)
const
1783 return exp(-0.5*u*u) / (sqrt(2.0*PI) *
sigma);
1797 template<
int ID_t,
class JF1_t = _vF>
1799 public JMathlib < JPow<ID_t, JF1_t> >,
1802 static const int ID = ID_t;
1836 const double u =
static_cast<const JF1_t&
>(*this).getValue(x);
1850 const double u =
static_cast<const JF1_t&
>(*this).getValue(x);
1851 const double v =
static_cast<const JF1_t&
>(*this).getDerivative(x);
1865 static JPow gradient;
1867 const double u =
static_cast<const JF1_t&
>(*this).
getValue(x);
1870 gradient.
alpha = w * log(u);
1872 static_cast<JF1_t&
>(gradient) =
static_cast<const JF1_t&
>(*this).getGradient(x);
1873 static_cast<JF1_t&
>(gradient) *=
alpha * w / u;
1885 template<
int ID_t,
class JF1_t>
1896 template<
class JF1_t>
1911 static const int ID = ID_t;
1964 static JPow gradient;
2017 return N *
pow(x, N - 1);
2029 static JXn gradient;
2054 template<
class JF1_t = _vF>
2088 const double u =
static_cast<const JF1_t&
>(*this).getValue(x);
2102 const double u =
static_cast<const JF1_t&
>(*this).getValue(x);
2103 const double v =
static_cast<const JF1_t&
>(*this).getDerivative(x);
2105 return 0.5 * v / sqrt(u);
2117 static JSqrt gradient;
2119 const double u =
static_cast<const JF1_t&
>(*this).
getValue(x);
2121 static_cast<JF1_t&
>(gradient) =
static_cast<const JF1_t&
>(*this).getGradient(x);
2122 static_cast<JF1_t&
>(gradient) *= 0.5 / sqrt(u);
2135 template<
class JF1_t>
2180 return 0.5 / sqrt(x);
2192 static JSqrt gradient;
2220 template<
class JF1_t>
2254 const double u =
static_cast<const JF1_t&
>(*this).getValue(x);
2268 const double u =
static_cast<const JF1_t&
>(*this).getValue(x);
2269 const double v =
static_cast<const JF1_t&
>(*this).getDerivative(x);
2283 static JSin gradient;
2285 const double u =
static_cast<const JF1_t&
>(*this).
getValue(x);
2287 static_cast<JF1_t&
>(gradient) =
static_cast<const JF1_t&
>(*this).getGradient(x);
2288 static_cast<JF1_t&
>(gradient) *= cos(u);
2301 template<
class JF1_t>
2311 template<
class JF1_t>
2345 const double u =
static_cast<const JF1_t&
>(*this).getValue(x);
2359 const double u =
static_cast<const JF1_t&
>(*this).getValue(x);
2360 const double v =
static_cast<const JF1_t&
>(*this).getDerivative(x);
2374 static JCos gradient;
2376 const double u =
static_cast<const JF1_t&
>(*this).
getValue(x);
2378 static_cast<JF1_t&
>(gradient) =
static_cast<const JF1_t&
>(*this).getGradient(x);
2379 static_cast<JF1_t&
>(gradient) *= -sin(u);
2392 template<
class JF1_t>
2402 template<
class JF1_t>
2436 return exp(
static_cast<const JF1_t&
>(*this).getValue(x));
2448 return static_cast<const JF1_t&
>(*this).getDerivative(x) *
getValue(x);
2460 static JExp gradient;
2462 gradient =
static_cast<const JF1_t&
>(*this).
getGradient(x);
2475 public JMathlib< JExp< JPolynome<ID_t, 0> > >,
2528 static JExp gradient;
2544 template<
class JF1_t>
2554 template<
class JF1_t>
2588 return log(
static_cast<const JF1_t&
>(*this).getValue(x));
2600 return static_cast<const JF1_t&
>(*this).getDerivative(x) /
static_cast<const JF1_t&
>(*this).getValue(x);
2612 static JLog gradient;
2614 gradient =
static_cast<const JF1_t&
>(*this).
getGradient(x);
2615 gradient /= (
static_cast<const JF1_t&
>(*this).getValue(x));
2628 template<
class JF1_t>
size_t getNumberOfParameters()
Get number of parameters.
void setParameters(JF1_t *f1, const double *values)
Set values of all parameters.
double getParameter(const JF1_t &f1, const size_t i)
Get value of parameter at given index.
JPow< JF1_t::ID, JF1_t > Pow(const JF1_t &f1, const double alpha)
Power of function.
JExp< JF1_t > Exp(const JF1_t &f1)
Exponent of function.
T pow(const T &x, const double y)
Power .
JCos< JF1_t > Cos(const JF1_t &f1)
Cosine function.
JSqrt Sqrt()
Square root of x.
JSin< JF1_t > Sin(const JF1_t &f1)
Sine of function.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
const JAdd & getGradient(const Args &...args) const
Get gradient.
double getDerivative(const double x) const
Derivative value.
JAdd()
Default constructor.
JAdd(const JF1_t &f1, const double value)
Constructor.
double getValue(const Args &...args) const
Function value.
forward declaration for negate of function.
double getDerivative(const double x) const
Derivative value.
const JAdd & getGradient(const Args &...args) const
Get gradient.
JAdd()
Default constructor.
double getValue(const Args &...args) const
Function value.
JAdd(const JF1_t &f1, const JF2_t &f2)
Constructor.
Auxiliary base class for mathematical operations on parameters of function.
JF1_t & div(const double factor)
Scale function.
JF1_t & mul(const double factor)
Scale function.
JF1_t & add(const JF1_t &f1)
Add function.
friend JF1_t & operator+=(JF1_t &function, const JF1_t &value)
Add function.
friend JF1_t & operator/=(JF1_t &function, const double factor)
Scale function.
friend JF1_t & operator*=(JF1_t &function, const double factor)
Scale function.
JF1_t & sub(const JF1_t &f1)
Subtract function.
JF1_t & negate()
Negate function.
friend JF1_t & operator-=(JF1_t &function, const JF1_t &value)
Subtract function.
JCos(const JF1_t &f1)
Constructor.
double getDerivative(const double x) const
Derivative value.
double getValue(const double x) const
Function value.
const JCos & getGradient(const double x) const
Get gradient.
JCos()
Default constructor.
JDiv(const JF1_t &f1, const double value)
Constructor.
double getValue(const Args &...args) const
Function value.
JDiv()
Default constructor.
double getDerivative(const double x) const
Derivative value.
const JDiv & getGradient(const Args &...args) const
Get gradient.
forward declaration for multiplication of fuction.
const JDiv & getGradient(const Args &...args) const
Get gradient.
double getValue(const Args &...args) const
Function value.
JDiv()
Default constructor.
JDiv(const JF1_t &f1, const JF2_t &f2)
Constructor.
double getDerivative(const double x) const
Derivative value.
double getDerivative(...) const
Derivative value.
double getValue(...) const
Function value.
JExp()
Default constructor.
const JExp & getGradient(...) const
Get gradient.
JExp(const JPolynome< ID_t, 0 > &f1)
Constructor.
JExp()
Default constructor.
double getDerivative(const double x) const
Derivative value.
double getValue(const double x) const
Function value.
JExp(const JF1_t &f1)
Constructor.
const JExp & getGradient(const double x) const
Get gradient.
forward declaration for division of fuction.
JFn()
Default constructor.
JFn(const JF1_t &f1, const int N)
Constructor.
double getDerivative(const double x) const
Derivative value.
const JFn & getGradient(const Args &...args) const
Get gradient.
double getValue(const Args &...args) const
Function value.
JGauss(const double center, const double sigma)
Constructor.
JGauss()
Default constructor.
double getValue(const double x) const
Function value.
double getDerivative(const double x) const
Derivative value.
const JGauss & getGradient(const double x) const
Get gradient.
static const parameter_list< JGauss > parameters
parameters
double get(const double u) const
Get ordinate value.
const JGauss & getGradient(const double x) const
Get gradient.
double getDerivative(const double x) const
Derivative value.
JGauss()
Default constructor.
double getValue(const double x) const
Function value.
static const parameter_list< JGauss > parameters
parameters
double get(const double u) const
Get ordinate value.
JGauss(const double center, const double sigma)
Constructor.
double getValue(const double x) const
Function value.
const JLog & getGradient(const double x) const
Get gradient.
JLog()
Default constructor.
JLog(const JF1_t &f1)
Constructor.
double getDerivative(const double x) const
Derivative value.
forward declaration for fixed power of function.
friend JMul< JF1_t, JF2_t > operator*(const JF1_t &f1, const JF2_t &f2)
Multiplication of two functions.
friend JDiv< JF1_t, JF2_t > operator/(const JF1_t &f1, const JF2_t &f2)
Division of two functions.
friend JAdd< JNegate< JF1_t > > operator-(const double value, const JF1_t &f1)
Subtraction of constant value.
friend JAdd< JF1_t > operator+(const double value, const JF1_t &f1)
Addition of constant value.
friend JSub< JF1_t > operator-(const JF1_t &f1, const double value)
Subtraction of constant value.
friend const JF1_t & operator+(const JF1_t &function)
Affirm operator.
friend JMul< JF1_t > operator*(const double value, const JF1_t &f1)
Multiplication of constant value.
friend JFn< JF1_t > operator^(const JF1_t &function, int N)
Power of operator.
friend JSub< JF1_t, JF2_t > operator-(const JF1_t &f1, const JF2_t &f2)
Subtraction of two functions.
friend JDiv< JF1_t > operator/(const JF1_t &f1, const double value)
Division of constant value.
double operator()(const Args &...args) const
Function value.
friend JAdd< JF1_t > operator+(const JF1_t &f1, const double value)
Addition of constant value.
friend JNegate< JF1_t > operator-(const JF1_t &function)
Negate operator.
friend JAdd< JF1_t, JF2_t > operator+(const JF1_t &f1, const JF2_t &f2)
Addition of two functions.
friend JMul< JF1_t > operator*(const JF1_t &f1, const double value)
Multiplication of constant value.
double getValue(const Args &...args) const
Function value.
JMul(const JF1_t &f1, const double value)
Constructor.
const JMul & getGradient(const Args &...args) const
Get gradient.
double getDerivative(const double x) const
Derivative value.
JMul()
Default constructor.
forward declaration for subtraction of fuction.
double getValue(const Args &...args) const
Function value.
const JMul & getGradient(const Args &...args) const
Get gradient.
JMul()
Default constructor.
JMul(const JF1_t &f1, const JF2_t &f2)
Constructor.
double getDerivative(const double x) const
Derivative value.
double getValue(const Args &...args) const
Function value.
JNegate()
Default constructor.
JNegate(const JF1_t &f1)
Constructor.
const JNegate & getGradient(const Args &...args) const
Get gradient.
double getDerivative(const double x) const
Derivative value.
Auxiliary data structure for pair of functions.
JPair()
Default constructor.
JPair(const JF1_t &f1, const JF2_t &f2)
Constructor.
static const parameter_list< JPair > parameters
parameters
Termination class for polynomial function.
static const parameter_list< JPolynome > parameters
parameters
void set(const double *array)
Set parameter values.
double getValue(...) const
Function value.
const JPolynome & getGradient(...) const
Get gradient.
double getDerivative(...) const
Derivative value.
JPolynome()
Default constructor.
JPolynome(const double a)
Constructor.
JPolynome_t & mul(const double factor)
Scale polynome.
JPolynome_t & sub(const JPolynome_t &polynome)
Subtract polynome.
JPolynome_t & add(const JPolynome_t &polynome)
Add polynome.
Recursive template class for polynomial function.
static const size_t NUMBER_OF_DEGREES
void set(const double *pA)
Set parameter values.
JPolynome()
Default constructor.
JPolynome(const Args &...args)
Constructor.
double getValue(const double x) const
Function value.
static const parameter_list< JPolynome > parameters
parameters
double getDerivative(const double x) const
Derivative value.
const JPolynome & getGradient(const double x) const
Get gradient.
const JPow & getGradient(const double x) const
Get gradient.
double getValue(const double x) const
Function value.
JPow()
Default constructor.
double getDerivative(const double x) const
Derivative value.
static const parameter_list< JPow > parameters
parameters
JPow(const double alpha)
Constructor.
double getValue(const double x) const
Function value.
JPow(const JF1_t &f1, const double alpha)
Constructor.
static const parameter_list< JPow > parameters
parameters
JPow()
Default constructor.
const JPow & getGradient(const double x) const
Get gradient.
double getDerivative(const double x) const
Derivative value.
JSin()
Default constructor.
const JSin & getGradient(const double x) const
Get gradient.
double getDerivative(const double x) const
Derivative value.
double getValue(const double x) const
Function value.
JSin(const JF1_t &f1)
Constructor.
JSqrt()
Default constructor.
double getValue(const double x) const
Function value.
double getDerivative(const double x) const
Derivative value.
static const parameter_list< JSqrt > parameters
parameters
const JSqrt & getGradient(const double x) const
Get gradient.
JSqrt()
Default constructor.
double getValue(const double x) const
Function value.
double getDerivative(const double x) const
Derivative value.
const JSqrt & getGradient(const double x) const
Get gradient.
JSqrt(const JF1_t &f1)
Constructor.
const JSub & getGradient(const Args &...args) const
Get gradient.
double getValue(const Args &...args) const
Function value.
JSub()
Default constructor.
double getDerivative(const double x) const
Derivative value.
JSub(const JF1_t &f1, const double value)
Constructor.
forward declaration for addition of fuction.
double getDerivative(const double x) const
Derivative value.
double getValue(const Args &...args) const
Function value.
JSub()
Default constructor.
const JSub & getGradient(const Args &...args) const
Get gradient.
JSub(const JF1_t &f1, const JF2_t &f2)
Constructor.
double getValue(const double x) const
Function value.
double getDerivative(const double x) const
Derivative value.
static const parameter_list< JXn > parameters
parameters
JXn()
Default constructor.
const JXn & getGradient(const double x) const
Get gradient.
void add(const double x)
Termination method for adding values to array.
void add(const double x, const Args &...args)
Recursive method for adding values to array.
make_carray(const Args &...args)
Constructor.
Auxiliary data structure for list of parameters.
parameter_list(double JF1_t::*parameter)
Constructor.
parameter_list(const parameter_list< U > ¶meters, double JF1_t::*parameter)
Combine constructor.
parameter_list(const std::initializer_list< double JF1_t::* > ¶meters)
Constructor.
parameter_list()
Default constructor.
parameter_list(const parameter_list< U > &first, const parameter_list< V > &second)
Combine constructor.