Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
ROOT::Math::RichardsonDerivator Class Reference

User class for calculating the derivatives of a function.

It can calculate first (method Derivative1), second (method Derivative2) and third (method Derivative3) of a function.

It uses the Richardson extrapolation method for function derivation in a given interval. The method use 2 derivative estimates (one computed with step h and one computed with step h/2) to compute a third, more accurate estimation. It is equivalent to the 5-point method, which can be obtained with a Taylor expansion. A step size should be given, depending on x and f(x). An optimal step size value minimizes the truncation error of the expansion and the rounding error in evaluating x+h and f(x+h). A too small h will yield a too large rounding error while a too large h will give a large truncation error in the derivative approximation. A good discussion can be found in discussed in Chapter 5.7 of Numerical Recipes in C. By default a value of 0.001 is uses, acceptable in many cases.

This class is implemented using code previously in TF1::Derivate{,2,3}(). Now TF1 uses this class.

Definition at line 55 of file RichardsonDerivator.h.

Public Member Functions

 RichardsonDerivator (const RichardsonDerivator &rhs)
 Copy constructor.
 
 RichardsonDerivator (const ROOT::Math::IGenFunction &f, double h=0.001, bool copyFunc=false)
 Construct from function and step size.
 
 RichardsonDerivator (double h=0.001)
 Default Constructor.
 
 ~RichardsonDerivator ()
 Destructor: Removes function if needed.
 
double Derivative1 (const IGenFunction &f, double x, double h)
 First Derivative calculation passing function object and step-size.
 
double Derivative1 (double x)
 Returns the first derivative of the function at point x, computed by Richardson's extrapolation method (use 2 derivative estimates to compute a third, more accurate estimation) first, derivatives with steps h and h/2 are computed by central difference formulas.
 
double Derivative2 (const IGenFunction &f, double x, double h)
 Second Derivative calculation passing function and step-size.
 
double Derivative2 (double x)
 Returns the second derivative of the function at point x, computed by Richardson's extrapolation method (use 2 derivative estimates to compute a third, more accurate estimation) first, derivatives with steps h and h/2 are computed by central difference formulas.
 
double Derivative3 (const IGenFunction &f, double x, double h)
 Third Derivative calculation passing function and step-size.
 
double Derivative3 (double x)
 Returns the third derivative of the function at point x, computed by Richardson's extrapolation method (use 2 derivative estimates to compute a third, more accurate estimation) first, derivatives with steps h and h/2 are computed by central difference formulas.
 
double DerivativeBackward (const IGenFunction &f, double x, double h)
 Computation of the first derivative using a forward formula.
 
double DerivativeBackward (double x)
 Computation of the first derivative using a backward formula.
 
double DerivativeForward (const IGenFunction &f, double x, double h)
 Computation of the first derivative using a forward formula.
 
double DerivativeForward (double x)
 Computation of the first derivative using a forward formula.
 
double Error () const
 Returns the estimate of the absolute Error of the last derivative calculation.
 
double operator() (double x)
 
RichardsonDerivator & operator= (const RichardsonDerivator &rhs)
 Assignment operator.
 
void SetFunction (const IGenFunction &f)
 Set function for derivative calculation (copy the function if option has been enabled in the constructor)
 
void SetStepSize (double h)
 Set step size for derivative calculation.
 

Protected Attributes

const IGenFunction * fFunction
 
bool fFunctionCopied
 
double fLastError
 
double fStepSize
 

#include <Math/RichardsonDerivator.h>

Constructor & Destructor Documentation

◆ ~RichardsonDerivator()

ROOT::Math::RichardsonDerivator::~RichardsonDerivator ( )

Destructor: Removes function if needed.

Definition at line 43 of file RichardsonDerivator.cxx.

◆ RichardsonDerivator() [1/3]

ROOT::Math::RichardsonDerivator::RichardsonDerivator ( double  h = 0.001)

Default Constructor.

Give optionally the step size for derivation. By default is 0.001, which is fine for x ~ 1 Increase if x is in average larger or decrease if x is smaller

Definition at line 23 of file RichardsonDerivator.cxx.

◆ RichardsonDerivator() [2/3]

ROOT::Math::RichardsonDerivator::RichardsonDerivator ( const ROOT::Math::IGenFunction &  f,
double  h = 0.001,
bool  copyFunc = false 
)

Construct from function and step size.

Definition at line 31 of file RichardsonDerivator.cxx.

◆ RichardsonDerivator() [3/3]

ROOT::Math::RichardsonDerivator::RichardsonDerivator ( const RichardsonDerivator &  rhs)

Copy constructor.

Definition at line 50 of file RichardsonDerivator.cxx.

Member Function Documentation

◆ Derivative1() [1/2]

double ROOT::Math::RichardsonDerivator::Derivative1 ( const IGenFunction &  f,
double  x,
double  h 
)

First Derivative calculation passing function object and step-size.

Definition at line 81 of file RichardsonDerivator.cxx.

◆ Derivative1() [2/2]

double ROOT::Math::RichardsonDerivator::Derivative1 ( double  x)
inline

Returns the first derivative of the function at point x, computed by Richardson's extrapolation method (use 2 derivative estimates to compute a third, more accurate estimation) first, derivatives with steps h and h/2 are computed by central difference formulas.

\[ D(h) = \frac{f(x+h) - f(x-h)}{2h} \]

the final estimate

\[ D = \frac{4D(h/2) - D(h)}{3} \]

"Numerical Methods for Scientists and Engineers", H.M.Antia, 2nd edition"

the argument eps may be specified to control the step size (precision). the step size is taken as eps*(xmax-xmin). the default value (0.001) should be good enough for the vast majority of functions. Give a smaller value if your function has many changes of the second derivative in the function range.

Getting the error via TF1::DerivativeError: (total error = roundoff error + interpolation error) the estimate of the roundoff error is taken as follows:

\[ err = k\sqrt{f(x)^{2} + x^{2}deriv^{2}}\sqrt{\sum ai^{2}}, \]

where k is the double precision, ai are coefficients used in central difference formulas interpolation error is decreased by making the step size h smaller.

Definition at line 116 of file RichardsonDerivator.h.

◆ Derivative2() [1/2]

double ROOT::Math::RichardsonDerivator::Derivative2 ( const IGenFunction &  f,
double  x,
double  h 
)

Second Derivative calculation passing function and step-size.

Definition at line 159 of file RichardsonDerivator.cxx.

◆ Derivative2() [2/2]

double ROOT::Math::RichardsonDerivator::Derivative2 ( double  x)
inline

Returns the second derivative of the function at point x, computed by Richardson's extrapolation method (use 2 derivative estimates to compute a third, more accurate estimation) first, derivatives with steps h and h/2 are computed by central difference formulas.

\[ D(h) = \frac{f(x+h) - 2f(x) + f(x-h)}{h^{2}} \]

the final estimate

\[ D = \frac{4D(h/2) - D(h)}{3} \]

"Numerical Methods for Scientists and Engineers", H.M.Antia, 2nd edition"

the argument eps may be specified to control the step size (precision). the step size is taken as eps*(xmax-xmin). the default value (0.001) should be good enough for the vast majority of functions. Give a smaller value if your function has many changes of the second derivative in the function range.

Getting the error via TF1::DerivativeError: (total error = roundoff error + interpolation error) the estimate of the roundoff error is taken as follows:

\[ err = k\sqrt{f(x)^{2} + x^{2}deriv^{2}}\sqrt{\sum ai^{2}}, \]

where k is the double precision, ai are coefficients used in central difference formulas interpolation error is decreased by making the step size h smaller.

Definition at line 172 of file RichardsonDerivator.h.

◆ Derivative3() [1/2]

double ROOT::Math::RichardsonDerivator::Derivative3 ( const IGenFunction &  f,
double  x,
double  h 
)

Third Derivative calculation passing function and step-size.

Definition at line 180 of file RichardsonDerivator.cxx.

◆ Derivative3() [2/2]

double ROOT::Math::RichardsonDerivator::Derivative3 ( double  x)
inline

Returns the third derivative of the function at point x, computed by Richardson's extrapolation method (use 2 derivative estimates to compute a third, more accurate estimation) first, derivatives with steps h and h/2 are computed by central difference formulas.

\[ D(h) = \frac{f(x+2h) - 2f(x+h) + 2f(x-h) - f(x-2h)}{2h^{3}} \]

the final estimate

\[ D = \frac{4D(h/2) - D(h)}{3} \]

"Numerical Methods for Scientists and Engineers", H.M.Antia, 2nd edition"

the argument eps may be specified to control the step size (precision). the step size is taken as eps*(xmax-xmin). the default value (0.001) should be good enough for the vast majority of functions. Give a smaller value if your function has many changes of the second derivative in the function range.

Getting the error via TF1::DerivativeError: (total error = roundoff error + interpolation error) the estimate of the roundoff error is taken as follows:

\[ err = k\sqrt{f(x)^{2} + x^{2}deriv^{2}}\sqrt{\sum ai^{2}}, \]

where k is the double precision, ai are coefficients used in central difference formulas interpolation error is decreased by making the step size h smaller.

Definition at line 211 of file RichardsonDerivator.h.

◆ DerivativeBackward() [1/2]

double ROOT::Math::RichardsonDerivator::DerivativeBackward ( const IGenFunction &  f,
double  x,
double  h 
)
inline

Computation of the first derivative using a forward formula.

Definition at line 138 of file RichardsonDerivator.h.

◆ DerivativeBackward() [2/2]

double ROOT::Math::RichardsonDerivator::DerivativeBackward ( double  x)
inline

Computation of the first derivative using a backward formula.

Definition at line 133 of file RichardsonDerivator.h.

◆ DerivativeForward() [1/2]

double ROOT::Math::RichardsonDerivator::DerivativeForward ( const IGenFunction &  f,
double  x,
double  h 
)

Computation of the first derivative using a forward formula.

Definition at line 118 of file RichardsonDerivator.cxx.

◆ DerivativeForward() [2/2]

double ROOT::Math::RichardsonDerivator::DerivativeForward ( double  x)
inline

Computation of the first derivative using a forward formula.

Definition at line 125 of file RichardsonDerivator.h.

◆ Error()

double ROOT::Math::RichardsonDerivator::Error ( ) const
inline

Returns the estimate of the absolute Error of the last derivative calculation.

Definition at line 83 of file RichardsonDerivator.h.

◆ operator()()

double ROOT::Math::RichardsonDerivator::operator() ( double  x)
inline

Definition at line 117 of file RichardsonDerivator.h.

◆ operator=()

RichardsonDerivator & ROOT::Math::RichardsonDerivator::operator= ( const RichardsonDerivator &  rhs)

Assignment operator.

Definition at line 60 of file RichardsonDerivator.cxx.

◆ SetFunction()

void ROOT::Math::RichardsonDerivator::SetFunction ( const IGenFunction &  f)

Set function for derivative calculation (copy the function if option has been enabled in the constructor)

@param f Function to be differentiated

Definition at line 71 of file RichardsonDerivator.cxx.

◆ SetStepSize()

void ROOT::Math::RichardsonDerivator::SetStepSize ( double  h)
inline

Set step size for derivative calculation.

@param h step size for calculation

Definition at line 230 of file RichardsonDerivator.h.

Member Data Documentation

◆ fFunction

const IGenFunction* ROOT::Math::RichardsonDerivator::fFunction
protected

Definition at line 237 of file RichardsonDerivator.h.

◆ fFunctionCopied

bool ROOT::Math::RichardsonDerivator::fFunctionCopied
protected

Definition at line 234 of file RichardsonDerivator.h.

◆ fLastError

double ROOT::Math::RichardsonDerivator::fLastError
protected

Definition at line 236 of file RichardsonDerivator.h.

◆ fStepSize

double ROOT::Math::RichardsonDerivator::fStepSize
protected

Definition at line 235 of file RichardsonDerivator.h.

Libraries for ROOT::Math::RichardsonDerivator:

The documentation for this class was generated from the following files: