24 fFunctionCopied(false),
32 fFunctionCopied(copyFunc),
63 if (&rhs ==
this)
return *
this;
83 const double keps = std::numeric_limits<double>::epsilon();
87 xx =
x+
h;
double f1 = (function)(xx);
89 xx =
x-
h;
double f2 = (function)(xx);
91 xx =
x+
h/2;
double g1 = (function)(xx);
93 xx =
x-
h/2;
double g2 = (function)(xx);
99 double deriv = h2*(8*d2 - d0)/3.;
105 double e0 = (std::abs(
f1) + std::abs(f2)) * keps;
106 double e2 = 2* (std::abs( g1) + std::abs(g2)) * keps + e0;
107 double delta = std::max( std::abs( h2*d0), std::abs( deriv) ) * std::abs(
x)/
h * keps;
110 double err_trunc = std::abs( deriv - h2*d0 );
112 double err_round = std::abs( e2/
h) + delta;
120 const double keps = std::numeric_limits<double>::epsilon();
124 xx =
x+
h/4.0;
double f1 = (function)(xx);
125 xx =
x+
h/2.0;
double f2 = (function)(xx);
127 xx =
x+(3.0/4.0)*
h;
double f3 = (function)(xx);
128 xx =
x+
h;
double f4 = (function)(xx);
132 double r2 = 2.0*(f4 - f2);
133 double r4 = (22.0 / 3.0) * (f4 - f3) - (62.0 / 3.0) * (f3 - f2) +
134 (52.0 / 3.0) * (f2 -
f1);
150 double abserr_trunc =
fabs ((r4 - r2) /
h);
151 double abserr_round =
fabs (e4 /
h) + dy;
161 const double kC1 = 4*std::numeric_limits<double>::epsilon();
164 xx =
x+
h;
double f1 = (function)(xx);
165 xx =
x;
double f2 = (function)(xx);
166 xx =
x-
h;
double f3 = (function)(xx);
168 xx =
x+
h/2;
double g1 = (function)(xx);
169 xx =
x-
h/2;
double g3 = (function)(xx);
173 double d0 = f3 - 2*f2 +
f1;
174 double d2 = 4*g3 - 8*f2 +4*g1;
176 double deriv = hh*(4*d2 - d0)/3.;
182 const double kC1 = 4*std::numeric_limits<double>::epsilon();
185 xx =
x+2*
h;
double f1 = (function)(xx);
186 xx =
x+
h;
double f2 = (function)(xx);
187 xx =
x-
h;
double f3 = (function)(xx);
188 xx =
x-2*
h;
double f4 = (function)(xx);
189 xx =
x;
double fx = (function)(xx);
190 xx =
x+
h/2;
double g2 = (function)(xx);
191 xx =
x-
h/2;
double g3 = (function)(xx);
194 double hhh = 1/(
h*
h*
h);
195 double d0 = 0.5*
f1 - f2 +f3 - 0.5*f4;
196 double d2 = 4*f2 - 8*g2 +8*g3 - 4*f3;
198 double deriv = hhh*(4*d2 - d0)/3.;
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Interface (abstract class) for generic functions objects of one-dimension Provides a method to evalua...
virtual IBaseFunctionOneDim * Clone() const =0
Clone a function.
User class for calculating the derivatives of a function.
double Derivative2(double x)
Returns the second derivative of the function at point x, computed by Richardson's extrapolation meth...
bool fFunctionCopied
flag to control if function is copied in the class
~RichardsonDerivator()
Destructor: Removes function if needed.
RichardsonDerivator(double h=0.001)
Default Constructor.
double DerivativeForward(double x)
Computation of the first derivative using a forward formula.
double fStepSize
step size used for derivative calculation
RichardsonDerivator & operator=(const RichardsonDerivator &rhs)
Assignment operator.
double Derivative3(double x)
Returns the third derivative of the function at point x, computed by Richardson's extrapolation metho...
double Derivative1(double x)
Returns the first derivative of the function at point x, computed by Richardson's extrapolation metho...
void SetFunction(const IGenFunction &f)
Set function for derivative calculation (copy the function if option has been enabled in the construc...
double fLastError
error estimate of last derivative calculation
const IGenFunction * fFunction
pointer to function
Namespace for new Math classes and functions.
VecExpr< UnaryOp< Fabs< T >, VecExpr< A, T, D >, T >, T, D > fabs(const VecExpr< A, T, D > &rhs)
This file contains a specialised ROOT message handler to test for diagnostic in unit tests.