Logo ROOT  
Reference Guide
Loading...
Searching...
No Matches

Parametric Function class describing polynomials of order n.

P(x) = p[0] + p[1]*x + p[2]*x**2 + ....... + p[n]*x**n

The class implements also the derivatives, dP(x)/dx and the dP(x)/dp[i].

The class provides also the method to find the roots of the polynomial. It uses analytical methods up to quartic polynomials.

Implements both the Parameteric function interface and the gradient interface since it provides the analytical gradient with respect to x

Definition at line 64 of file Polynomial.h.

Public Types

typedef IParamGradFunction::BaseFunc BaseFunc
typedef IGradientFunctionOneDim BaseGradFunc
typedef IParametricFunctionOneDim BaseParamFunc
typedef IParamGradFunction BaseParFunc
typedef ParamFunction< IParamGradFunctionParFunc

Public Member Functions

 Polynomial (double a, double b)
 Construct a Polynomial of degree 1 : a*x + b.
 Polynomial (double a, double b, double c)
 Construct a Polynomial of degree 2 : a*x**2 + b*x + c.
 Polynomial (double a, double b, double c, double d)
 Construct a Polynomial of degree 3 : a*x**3 + b*x**2 + c*x + d.
 Polynomial (double a, double b, double c, double d, double e)
 Construct a Polynomial of degree 4 : a*x**4 + b*x**3 + c*x**2 + dx + e.
 Polynomial (unsigned int n=0)
 Construct a Polynomial function of order n.
 ~Polynomial () override
IGenFunctionClone () const override
 Clone a function.
double Derivative (const double *x) const
 Compatibility method with multi-dimensional interface for partial derivative.
double Derivative (double x) const
 Return the derivative of the function at a point x Use the private method DoDerivative.
void FdF (const double *x, double &f, double *df) const
 Compatibility method with multi-dimensional interface for Gradient and function evaluation.
void FdF (double x, double &f, double &df) const override
 Optimized method to evaluate at the same time the function value and derivative at a point x.
std::vector< std::complex< double > > FindNumRoots () const
 Find the polynomial roots using always an iterative numerical methods The numerical method used is from GSL (see documentation ).
std::vector< doubleFindRealRoots () const
 Find the only the real polynomial roots.
std::vector< std::complex< double > > FindRoots () const
 Find the polynomial roots.
void Gradient (const double *x, double *g) const
 Compatibility method with multi-dimensional interface for Gradient.
virtual bool HasGradient () const
bool HasGradient () const override
unsigned int NPar () const override
 Return the number of parameters.
double operator() (const double *x) const
 Evaluate the function at a point x[].
double operator() (const double *x, const double *p) const
 multidim-like interface
double operator() (double x) const
 Evaluate the function at a point x.
double operator() (double x, const double *p) const
 Evaluate function at a point x and for given parameters p.
unsigned int Order () const
 Order of Polynomial.
double ParameterDerivative (const double *x, const double *p, unsigned int ipar=0) const
 Partial derivative with respect a parameter Compatibility interface with multi-dimensional functions.
double ParameterDerivative (const double *x, unsigned int ipar=0) const
 Evaluate partial derivative using cached parameter values (multi-dim like interface).
double ParameterDerivative (double x, const double *p, unsigned int ipar=0) const
 Partial derivative with respect a parameter.
double ParameterDerivative (double x, unsigned int ipar=0) const
 Evaluate partial derivative using cached parameter values.
void ParameterGradient (const double *x, const double *p, double *grad) const
 Compatibility interface with multi-dimensional functions.
void ParameterGradient (const double *x, double *grad) const
 Evaluate all derivatives using cached parameter values (multi-dim like interface).
virtual void ParameterGradient (double x, const double *p, double *grad) const
 Evaluate the derivatives of the function with respect to the parameters at a point x.
void ParameterGradient (double x, double *grad) const
 Evaluate all derivatives using cached parameter values.
virtual std::string ParameterName (unsigned int i) const
 Return the name of the i-th parameter (starting from zero) Overwrite if want to avoid the default name ("Par_0, Par_1, ...").
const doubleParameters () const override
 Access the parameter values.
void SetParameters (const double *p) override
 Set the parameter values.

Protected Attributes

std::vector< doublefParams

Private Member Functions

double DoDerivative (double x) const override
 Function to evaluate the derivative with respect each coordinate. To be implemented by the derived class.
double DoEval (double x) const override
 Implement the ROOT::Math::IBaseFunctionOneDim interface DoEval(x) using the cached parameter values.
double DoEvalPar (double x, const double *p) const override
 Implementation of the evaluation function using the x value and the parameters.
double DoParameterDerivative (double x, const double *p, unsigned int ipar) const override
 Evaluate the gradient, to be implemented by the derived classes.

Private Attributes

std::vector< doublefDerived_params
unsigned int fNpar
 Return true if the calculation of derivatives is implemented.
unsigned int fOrder

#include <Math/Polynomial.h>

Inheritance diagram for ROOT::Math::Polynomial:
ROOT::Math::ParamFunction< IParamGradFunction > ROOT::Math::IGradientFunctionOneDim ROOT::Math::IParametricGradFunctionOneDim ROOT::Math::IBaseFunctionOneDim ROOT::Math::IParametricFunctionOneDim ROOT::Math::IBaseFunctionOneDim ROOT::Math::IBaseParam

Member Typedef Documentation

◆ BaseFunc

Definition at line 72 of file ParamFunction.h.

◆ BaseGradFunc

◆ BaseParamFunc

◆ BaseParFunc

Definition at line 71 of file ParamFunction.h.

◆ ParFunc

Constructor & Destructor Documentation

◆ Polynomial() [1/5]

ROOT::Math::Polynomial::Polynomial ( unsigned int n = 0)

Construct a Polynomial function of order n.

The number of Parameters is n+1.

Definition at line 49 of file Polynomial.cxx.

◆ Polynomial() [2/5]

ROOT::Math::Polynomial::Polynomial ( double a,
double b )

Construct a Polynomial of degree 1 : a*x + b.

Definition at line 58 of file Polynomial.cxx.

◆ Polynomial() [3/5]

ROOT::Math::Polynomial::Polynomial ( double a,
double b,
double c )

Construct a Polynomial of degree 2 : a*x**2 + b*x + c.

Definition at line 68 of file Polynomial.cxx.

◆ Polynomial() [4/5]

ROOT::Math::Polynomial::Polynomial ( double a,
double b,
double c,
double d )

Construct a Polynomial of degree 3 : a*x**3 + b*x**2 + c*x + d.

Definition at line 79 of file Polynomial.cxx.

◆ Polynomial() [5/5]

ROOT::Math::Polynomial::Polynomial ( double a,
double b,
double c,
double d,
double e )

Construct a Polynomial of degree 4 : a*x**4 + b*x**3 + c*x**2 + dx + e.

Definition at line 92 of file Polynomial.cxx.

◆ ~Polynomial()

ROOT::Math::Polynomial::~Polynomial ( )
inlineoverride

Definition at line 100 of file Polynomial.h.

Member Function Documentation

◆ Clone()

IGenFunction * ROOT::Math::Polynomial::Clone ( ) const
overridevirtual

Clone a function.

Each derived class will implement their version of the private DoClone method.

Implements ROOT::Math::IBaseFunctionOneDim.

Definition at line 143 of file Polynomial.cxx.

◆ Derivative() [1/2]

double ROOT::Math::IBaseFunctionOneDim::Derivative ( const double * x) const
inlineinherited

Compatibility method with multi-dimensional interface for partial derivative.

Definition at line 186 of file IFunction.h.

◆ Derivative() [2/2]

double ROOT::Math::IBaseFunctionOneDim::Derivative ( double x) const
inlineinherited

Return the derivative of the function at a point x Use the private method DoDerivative.

Definition at line 183 of file IFunction.h.

◆ DoDerivative()

double ROOT::Math::Polynomial::DoDerivative ( double ) const
overrideprivatevirtual

Function to evaluate the derivative with respect each coordinate. To be implemented by the derived class.

Reimplemented from ROOT::Math::IBaseFunctionOneDim.

Definition at line 127 of file Polynomial.cxx.

◆ DoEval()

double ROOT::Math::IParametricFunctionOneDim::DoEval ( double x) const
inlineoverrideprivatevirtualinherited

Implement the ROOT::Math::IBaseFunctionOneDim interface DoEval(x) using the cached parameter values.

Implements ROOT::Math::IBaseFunctionOneDim.

Reimplemented in ROOT::Math::VavilovAccurateCdf, ROOT::Math::VavilovAccuratePdf, ROOT::Math::VavilovAccurateQuantile, and ROOT::Math::WrappedTF1.

Definition at line 203 of file IParamFunction.h.

◆ DoEvalPar()

double ROOT::Math::Polynomial::DoEvalPar ( double x,
const double * p ) const
overrideprivatevirtual

Implementation of the evaluation function using the x value and the parameters.

Must be implemented by derived classes

Implements ROOT::Math::IParametricFunctionOneDim.

Definition at line 119 of file Polynomial.cxx.

◆ DoParameterDerivative()

double ROOT::Math::Polynomial::DoParameterDerivative ( double x,
const double * p,
unsigned int ipar ) const
overrideprivatevirtual

Evaluate the gradient, to be implemented by the derived classes.

Implements ROOT::Math::IParametricGradFunctionOneDim.

Definition at line 136 of file Polynomial.cxx.

◆ FdF() [1/2]

void ROOT::Math::IBaseFunctionOneDim::FdF ( const double * x,
double & f,
double * df ) const
inlineinherited

Compatibility method with multi-dimensional interface for Gradient and function evaluation.

Definition at line 202 of file IFunction.h.

◆ FdF() [2/2]

void ROOT::Math::Polynomial::FdF ( double x,
double & f,
double & df ) const
inlineoverridevirtual

Optimized method to evaluate at the same time the function value and derivative at a point x.

Implement the interface specified by ROOT::Math::IGradientOneDim. In the case of polynomial there is no advantage to compute both at the same time

Reimplemented from ROOT::Math::IBaseFunctionOneDim.

Definition at line 147 of file Polynomial.h.

◆ FindNumRoots()

std::vector< std::complex< double > > ROOT::Math::Polynomial::FindNumRoots ( ) const

Find the polynomial roots using always an iterative numerical methods The numerical method used is from GSL (see documentation ).

Definition at line 240 of file Polynomial.cxx.

◆ FindRealRoots()

std::vector< double > ROOT::Math::Polynomial::FindRealRoots ( ) const

Find the only the real polynomial roots.

For n <= 4, the roots are found analytically while for larger order an iterative numerical method is used The numerical method used is from GSL (see documentation )

Definition at line 230 of file Polynomial.cxx.

◆ FindRoots()

std::vector< std::complex< double > > ROOT::Math::Polynomial::FindRoots ( ) const

Find the polynomial roots.

For n <= 4, the roots are found analytically while for larger order an iterative numerical method is used The numerical method used is from GSL (see documentation ) For the case of n = 4 by default an analytical algorithm is used from an implementation by Andrew W. Steiner and Andy Buckley which is a translation from the original Cenrlib routine (< HREF="https://cds.cern.ch/record/2050876/files/c208.html">RRTEQ4 ). Note that depending on the coefficients the result could be not very accurate if the discriminant of the resolvent cubic equation is very small. In that case it might be more robust to use the numerical method, by calling directly FindNumRoots()

Definition at line 150 of file Polynomial.cxx.

◆ Gradient()

void ROOT::Math::IBaseFunctionOneDim::Gradient ( const double * x,
double * g ) const
inlineinherited

Compatibility method with multi-dimensional interface for Gradient.

Definition at line 189 of file IFunction.h.

◆ HasGradient() [1/2]

virtual bool ROOT::Math::IBaseFunctionOneDim::HasGradient ( ) const
inlinevirtualinherited

Reimplemented in ROOT::Math::IGradientFunctionOneDim.

Definition at line 179 of file IFunction.h.

◆ HasGradient() [2/2]

bool ROOT::Math::IGradientFunctionOneDim::HasGradient ( ) const
inlineoverridevirtualinherited

Reimplemented from ROOT::Math::IBaseFunctionOneDim.

Definition at line 266 of file IFunction.h.

◆ NPar()

unsigned int ROOT::Math::ParamFunction< IParamGradFunction >::NPar ( ) const
inlineoverridevirtualinherited

Return the number of parameters.

Implements ROOT::Math::IBaseParam.

Definition at line 112 of file ParamFunction.h.

◆ operator()() [1/4]

double ROOT::Math::IBaseFunctionOneDim::operator() ( const double * x) const
inlineinherited

Evaluate the function at a point x[].

Compatible method with multi-dimensional functions.

Definition at line 169 of file IFunction.h.

◆ operator()() [2/4]

double ROOT::Math::IParametricFunctionOneDim::operator() ( const double * x,
const double * p ) const
inlineinherited

multidim-like interface

Definition at line 187 of file IParamFunction.h.

◆ operator()() [3/4]

double ROOT::Math::IBaseFunctionOneDim::operator() ( double x) const
inlineinherited

Evaluate the function at a point x.

Use the a pure virtual private method DoEval which must be implemented by sub-classes.

Definition at line 169 of file IFunction.h.

◆ operator()() [4/4]

double ROOT::Math::IParametricFunctionOneDim::operator() ( double x,
const double * p ) const
inlineinherited

Evaluate function at a point x and for given parameters p.

This method does not change the internal status of the function (internal parameter values). If for some reason one prefers caching the parameter values, SetParameters(p) and then operator()(x) should be called. Use the pure virtual function DoEvalPar to implement it

Definition at line 178 of file IParamFunction.h.

◆ Order()

unsigned int ROOT::Math::Polynomial::Order ( ) const
inline

Order of Polynomial.

Definition at line 137 of file Polynomial.h.

◆ ParameterDerivative() [1/4]

double ROOT::Math::IParametricGradFunctionOneDim::ParameterDerivative ( const double * x,
const double * p,
unsigned int ipar = 0 ) const
inlineinherited

Partial derivative with respect a parameter Compatibility interface with multi-dimensional functions.

Definition at line 403 of file IParamFunction.h.

◆ ParameterDerivative() [2/4]

double ROOT::Math::IParametricGradFunctionOneDim::ParameterDerivative ( const double * x,
unsigned int ipar = 0 ) const
inlineinherited

Evaluate partial derivative using cached parameter values (multi-dim like interface).

Definition at line 412 of file IParamFunction.h.

◆ ParameterDerivative() [3/4]

double ROOT::Math::IParametricGradFunctionOneDim::ParameterDerivative ( double x,
const double * p,
unsigned int ipar = 0 ) const
inlineinherited

Partial derivative with respect a parameter.

Definition at line 386 of file IParamFunction.h.

◆ ParameterDerivative() [4/4]

double ROOT::Math::IParametricGradFunctionOneDim::ParameterDerivative ( double x,
unsigned int ipar = 0 ) const
inlineinherited

Evaluate partial derivative using cached parameter values.

Definition at line 394 of file IParamFunction.h.

◆ ParameterGradient() [1/4]

void ROOT::Math::IParametricGradFunctionOneDim::ParameterGradient ( const double * x,
const double * p,
double * grad ) const
inlineinherited

Compatibility interface with multi-dimensional functions.

Definition at line 369 of file IParamFunction.h.

◆ ParameterGradient() [2/4]

void ROOT::Math::IParametricGradFunctionOneDim::ParameterGradient ( const double * x,
double * grad ) const
inlineinherited

Evaluate all derivatives using cached parameter values (multi-dim like interface).

Definition at line 377 of file IParamFunction.h.

◆ ParameterGradient() [3/4]

virtual void ROOT::Math::IParametricGradFunctionOneDim::ParameterGradient ( double x,
const double * p,
double * grad ) const
inlinevirtualinherited

Evaluate the derivatives of the function with respect to the parameters at a point x.

It is optional to be implemented by the derived classes for better efficiency if needed

Reimplemented in ROOT::Math::WrappedTF1.

Definition at line 351 of file IParamFunction.h.

◆ ParameterGradient() [4/4]

void ROOT::Math::IParametricGradFunctionOneDim::ParameterGradient ( double x,
double * grad ) const
inlineinherited

Evaluate all derivatives using cached parameter values.

Definition at line 361 of file IParamFunction.h.

◆ ParameterName()

virtual std::string ROOT::Math::IBaseParam::ParameterName ( unsigned int i) const
inlinevirtualinherited

Return the name of the i-th parameter (starting from zero) Overwrite if want to avoid the default name ("Par_0, Par_1, ...").

Reimplemented in ROOT::Math::VavilovAccurateCdf, ROOT::Math::VavilovAccuratePdf, ROOT::Math::VavilovAccurateQuantile, ROOT::Math::WrappedMultiTF1Templ< T >, ROOT::Math::WrappedMultiTF1Templ< double >, and ROOT::Math::WrappedTF1.

Definition at line 86 of file IParamFunction.h.

◆ Parameters()

const double * ROOT::Math::ParamFunction< IParamGradFunction >::Parameters ( ) const
inlineoverridevirtualinherited

Access the parameter values.

Implements ROOT::Math::IBaseParam.

Definition at line 96 of file ParamFunction.h.

◆ SetParameters()

void ROOT::Math::ParamFunction< IParamGradFunction >::SetParameters ( const double * p)
inlineoverridevirtualinherited

Set the parameter values.

Parameters
pvector of doubles containing the parameter values.

Implements ROOT::Math::IBaseParam.

Definition at line 102 of file ParamFunction.h.

Member Data Documentation

◆ fDerived_params

std::vector<double> ROOT::Math::Polynomial::fDerived_params
mutableprivate

Definition at line 166 of file Polynomial.h.

◆ fNpar

unsigned int ROOT::Math::ParamFunction< IParamGradFunction >::fNpar
privateinherited

Return true if the calculation of derivatives is implemented.

Return true if the calculation of derivatives with respect to the Parameters is implemented

Definition at line 137 of file ParamFunction.h.

◆ fOrder

unsigned int ROOT::Math::Polynomial::fOrder
private

Definition at line 163 of file Polynomial.h.

◆ fParams

std::vector<double> ROOT::Math::ParamFunction< IParamGradFunction >::fParams
protectedinherited

Definition at line 142 of file ParamFunction.h.


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