# class ROOT::Math::Polynomial: public ROOT::Math::ParamFunction<ROOT::Math::IParametricGradFunctionOneDim>, public ROOT::Math::IGradientOneDim

```
Parametric Function class describing polynomials of order n.

<em>P(x) = p[0] + p[1]*x + p[2]*x**2 + ....... + p[n]*x**n</em>

The class implements also the derivatives, \a dP(x)/dx and the \a 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

@ingroup ParamFunc

```

## Function Members (Methods)

public:
 virtual ~Polynomial() virtual ROOT::Math::IGenFunction* Clone() const double ROOT::Math::IGradientOneDim::Derivative(double x) const double ROOT::Math::IGradientOneDim::Derivative(const double* x) const virtual void FdF(double x, double& f, double& df) const const vector >& FindNumRoots() vector FindRealRoots() const vector >& FindRoots() void ROOT::Math::IGradientOneDim::Gradient(const double* x, double* g) const virtual unsigned int ROOT::Math::ParamFunction::NPar() const double ROOT::Math::IParametricFunctionOneDim::operator()(double x, const double* p) const double ROOT::Math::IParametricFunctionOneDim::operator()(const double* x, const double* p) const ROOT::Math::Polynomial& operator=(const ROOT::Math::Polynomial&) unsigned int Order() const double ROOT::Math::IParametricGradFunctionOneDim::ParameterDerivative(double x, unsigned int ipar = 0) const double ROOT::Math::IParametricGradFunctionOneDim::ParameterDerivative(const double* x, unsigned int ipar = 0) const double ROOT::Math::IParametricGradFunctionOneDim::ParameterDerivative(double x, const double* p, unsigned int ipar = 0) const double ROOT::Math::IParametricGradFunctionOneDim::ParameterDerivative(const double* x, const double* p, unsigned int ipar = 0) const void ROOT::Math::IParametricGradFunctionOneDim::ParameterGradient(double x, double* grad) const void ROOT::Math::IParametricGradFunctionOneDim::ParameterGradient(const double* x, double* grad) const virtual void ROOT::Math::IParametricGradFunctionOneDim::ParameterGradient(double x, const double* p, double* grad) const void ROOT::Math::IParametricGradFunctionOneDim::ParameterGradient(const double* x, const double* p, double* grad) const virtual string ROOT::Math::IBaseParam::ParameterName(unsigned int i) const virtual const double* ROOT::Math::ParamFunction::Parameters() const ROOT::Math::Polynomial Polynomial(unsigned int n = 0) ROOT::Math::Polynomial Polynomial(const ROOT::Math::Polynomial&) ROOT::Math::Polynomial Polynomial(double a, double b) ROOT::Math::Polynomial Polynomial(double a, double b, double c) ROOT::Math::Polynomial Polynomial(double a, double b, double c, double d) ROOT::Math::Polynomial Polynomial(double a, double b, double c, double d, double e) virtual void ROOT::Math::ParamFunction::SetParameters(const double* p)
private:
 virtual double DoDerivative(double x) const virtual double DoEvalPar(double x, const double* p) const virtual double DoParameterDerivative(double x, const double* p, unsigned int ipar) const

## Data Members

protected:
private:
 vector fDerived_params unsigned int fOrder vector > fRoots

## Function documentation

Polynomial(unsigned int n = 0)
```      Construct a Polynomial function of order n.
The number of Parameters is n+1.

```
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

```
virtual ~Polynomial()
`{}`
const std::vector<std::complex <double> > & FindRoots()
``` use default copy-ctor and assignment operators
using ParamFunction::operator();

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" )

```
std::vector<double > 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" )

```
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" )

```
unsigned int Order() const
```      Order of Polynomial

```
`{ return fOrder; }`
IGenFunction * Clone() const
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.
Implement the interface specified bby ROOT::Math::IGradientOneDim.
In the case of polynomial there is no advantage to compute both at the same time

```
double DoEvalPar(double x, const double* p) const
double DoDerivative(double x) const
double DoParameterDerivative(double x, const double* p, unsigned int ipar) const