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 63 of file Polynomial.h.
Public Types | |
typedef ParamFunction< IParamGradFunction > | ParFunc |
Public Types inherited from ROOT::Math::ParamFunction< IParamGradFunction > | |
typedef IPFType::BaseFunc | BaseFunc |
typedef IParamGradFunction | BaseParFunc |
Public Types inherited from ROOT::Math::IParametricGradFunctionOneDim | |
typedef IParametricFunctionOneDim::BaseFunc | BaseFunc |
typedef IGradientFunctionOneDim | BaseGradFunc |
typedef IParametricFunctionOneDim | BaseParamFunc |
Public Types inherited from ROOT::Math::IParametricFunctionOneDim | |
typedef IBaseFunctionOneDim | BaseFunc |
Public Types inherited from ROOT::Math::IBaseFunctionOneDim | |
typedef IBaseFunctionOneDim | BaseFunc |
Public Member Functions | |
Polynomial (double a, double b) | |
Construct a Polynomial of degree 1 : a*x + b. More... | |
Polynomial (double a, double b, double c) | |
Construct a Polynomial of degree 2 : a*x**2 + b*x + c. More... | |
Polynomial (double a, double b, double c, double d) | |
Construct a Polynomial of degree 3 : a*x**3 + b*x**2 + c*x + d. More... | |
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. More... | |
Polynomial (unsigned int n=0) | |
Construct a Polynomial function of order n. More... | |
virtual | ~Polynomial () |
IGenFunction * | Clone () const |
Clone a function. More... | |
void | FdF (double x, double &f, double &df) const |
Optimized method to evaluate at the same time the function value and derivative at a point x. More... | |
const std::vector< std::complex< double > > & | FindNumRoots () |
Find the polynomial roots using always an iterative numerical methods The numerical method used is from GSL (see <A HREF="http://www.gnu.org/software/gsl/manual/gsl-ref_6.html#SEC53" ) More... | |
std::vector< double > | FindRealRoots () |
Find the only the real polynomial roots. More... | |
const std::vector< std::complex< double > > & | FindRoots () |
Find the polynomial roots. More... | |
unsigned int | Order () const |
Order of Polynomial. More... | |
Public Member Functions inherited from ROOT::Math::ParamFunction< IParamGradFunction > | |
ParamFunction (unsigned int npar=0) | |
Construct a parameteric function with npar parameters. More... | |
virtual | ~ParamFunction () |
unsigned int | NPar () const |
Return the number of parameters. More... | |
virtual const double * | Parameters () const |
Access the parameter values. More... | |
virtual void | SetParameters (const double *p) |
Set the parameter values. More... | |
Public Member Functions inherited from ROOT::Math::IParametricGradFunctionOneDim | |
virtual | ~IParametricGradFunctionOneDim () |
Virtual Destructor (no operations) More... | |
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. More... | |
double | ParameterDerivative (const double *x, unsigned int ipar=0) const |
Evaluate partial derivative using cached parameter values (multi-dim like interface) More... | |
double | ParameterDerivative (double x, const double *p, unsigned int ipar=0) const |
Partial derivative with respect a parameter. More... | |
double | ParameterDerivative (double x, unsigned int ipar=0) const |
Evaluate partial derivative using cached parameter values. More... | |
void | ParameterGradient (const double *x, const double *p, double *grad) const |
Compatibility interface with multi-dimensional functions. More... | |
void | ParameterGradient (const double *x, double *grad) const |
Evaluate all derivatives using cached parameter values (multi-dim like interface) More... | |
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. More... | |
void | ParameterGradient (double x, double *grad) const |
Evaluate all derivatives using cached parameter values. More... | |
Public Member Functions inherited from ROOT::Math::IParametricFunctionOneDim | |
double | operator() (const double *x, const double *p) const |
multidim-like interface More... | |
double | operator() (double x, const double *p) const |
Evaluate function at a point x and for given parameters p. More... | |
Public Member Functions inherited from ROOT::Math::IBaseFunctionOneDim | |
IBaseFunctionOneDim () | |
virtual | ~IBaseFunctionOneDim () |
virtual destructor More... | |
virtual IBaseFunctionOneDim * | Clone () const =0 |
Clone a function. More... | |
double | operator() (const double *x) const |
Evaluate the function at a point x[]. More... | |
double | operator() (double x) const |
Evaluate the function at a point x Use the a pure virtual private method DoEval which must be implemented by sub-classes. More... | |
Public Member Functions inherited from ROOT::Math::IBaseParam | |
virtual | ~IBaseParam () |
Virtual Destructor (no operations) More... | |
virtual unsigned int | NPar () const =0 |
Return the number of Parameters. More... | |
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, ...") More... | |
virtual const double * | Parameters () const =0 |
Access the parameter values. More... | |
virtual void | SetParameters (const double *p)=0 |
Set the parameter values. More... | |
Public Member Functions inherited from ROOT::Math::IGradientOneDim | |
virtual | ~IGradientOneDim () |
virtual destructor More... | |
double | Derivative (const double *x) const |
Compatibility method with multi-dimensional interface for partial derivative. More... | |
double | Derivative (double x) const |
Return the derivative of the function at a point x Use the private method DoDerivative. More... | |
void | FdF (const double *x, double &f, double *df) const |
Compatibility method with multi-dimensional interface for Gradient and function evaluation. More... | |
virtual void | FdF (double x, double &f, double &df) const =0 |
Optimized method to evaluate at the same time the function value and derivative at a point x. More... | |
void | Gradient (const double *x, double *g) const |
Compatibility method with multi-dimensional interface for Gradient. More... | |
Private Member Functions | |
double | DoDerivative (double x) const |
function to evaluate the derivative with respect each coordinate. More... | |
double | DoEvalPar (double x, const double *p) const |
Implementation of the evaluation function using the x value and the parameters. More... | |
double | DoParameterDerivative (double x, const double *p, unsigned int ipar) const |
Evaluate the gradient, to be implemented by the derived classes. More... | |
Private Attributes | |
std::vector< double > | fDerived_params |
unsigned int | fOrder |
std::vector< std::complex< double > > | fRoots |
Additional Inherited Members | |
Protected Attributes inherited from ROOT::Math::ParamFunction< IParamGradFunction > | |
std::vector< double > | fParams |
#include <Math/Polynomial.h>
Definition at line 70 of file Polynomial.h.
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.
Construct a Polynomial of degree 1 : a*x + b.
Definition at line 58 of file Polynomial.cxx.
Construct a Polynomial of degree 2 : a*x**2 + b*x + c.
Definition at line 68 of file Polynomial.cxx.
Construct a Polynomial of degree 3 : a*x**3 + b*x**2 + c*x + d.
Definition at line 79 of file Polynomial.cxx.
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.
|
inlinevirtual |
Definition at line 99 of file Polynomial.h.
|
virtual |
Clone a function.
Each derived class will implement their version of the provate DoClone method
Implements ROOT::Math::IBaseFunctionOneDim.
Definition at line 143 of file Polynomial.cxx.
function to evaluate the derivative with respect each coordinate.
To be implemented by the derived class
Implements ROOT::Math::IGradientOneDim.
Definition at line 127 of file Polynomial.cxx.
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.
|
privatevirtual |
Evaluate the gradient, to be implemented by the derived classes.
Implements ROOT::Math::IParametricGradFunctionOneDim.
Definition at line 136 of file Polynomial.cxx.
Optimized method to evaluate at the same time the function value and derivative at a point x.
Implement the interface specified bby ROOT::Math::IGradientOneDim. In the case of polynomial there is no advantage to compute both at the same time
Implements ROOT::Math::IGradientOneDim.
Definition at line 143 of file Polynomial.h.
const std::vector< std::complex< double > > & ROOT::Math::Polynomial::FindNumRoots | ( | ) |
Find the polynomial roots using always an iterative numerical methods The numerical method used is from GSL (see <A HREF="http://www.gnu.org/software/gsl/manual/gsl-ref_6.html#SEC53" )
Definition at line 247 of file Polynomial.cxx.
std::vector< double > ROOT::Math::Polynomial::FindRealRoots | ( | ) |
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 <A HREF="http://www.gnu.org/software/gsl/manual/gsl-ref_6.html#SEC53" )
Definition at line 237 of file Polynomial.cxx.
const std::vector< std::complex< double > > & ROOT::Math::Polynomial::FindRoots | ( | ) |
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 <A HREF="http://www.gnu.org/software/gsl/manual/gsl-ref_6.html#SEC53" )
Definition at line 151 of file Polynomial.cxx.
|
inline |
Order of Polynomial.
Definition at line 133 of file Polynomial.h.
|
mutableprivate |
Definition at line 162 of file Polynomial.h.
|
private |
Definition at line 159 of file Polynomial.h.
|
private |
Definition at line 166 of file Polynomial.h.