RobWorkProject  24.5.15-
Polynomial< T > Class Template Reference

Representation of an ordinary polynomial with scalar coefficients (that can be both real and complex). More...

#include <Polynomial.hpp>

Inherits PolynomialND< double, double >.

## Public Member Functions

Polynomial (std::size_t order)
Create polynomial with coefficients initialized to zero. More...

Polynomial (const std::vector< T > &coefficients)
Create polynomial from vector. More...

Polynomial (const Polynomial< T > &p)
Create polynomial from other polynomial. More...

Polynomial (const PolynomialND< T, T > &p)
Create polynomial from other polynomial. More...

virtual ~Polynomial ()
Destructor.

evaluate (const T &x) const
Evaluate the polynomial using Horner's Method. More...

template<typename ErrT = T>
evaluate (const T &x, ErrT &err) const
Evaluate the polynomial using Horner's Method. More...

std::vector< T > evaluateDerivatives (const T &x, std::size_t n=1) const
Evaluate the first n derivatives of the polynomial using Horner's Method. More...

template<typename ErrT = T>
std::vector< T > evaluateDerivatives (const T &x, std::vector< ErrT > &err, std::size_t n=1) const
Evaluate the first n derivatives of the polynomial using Horner's Method. More...

Polynomial< T > deflate (const T &x) const
Perform deflation of polynomial. More...

Polynomial< T > derivative (std::size_t n=1) const
Get the derivative polynomial. More...

const Polynomial< T > operator- () const
Negate coefficients. More...

bool operator== (const Polynomial< T > &b) const
Check if polynomials are equal. More...

template<class Q >
const Polynomial< Qcast ()
Cast to other type. More...

Arithmetic operators between polynomials.

Operators used to do arithmetic between two polynomials.

const Polynomial< T > operator- (const Polynomial< T > &b) const
Polynomial subtraction. More...

Polynomial< T > & operator-= (const Polynomial< T > &b)
Polynomial subtraction. More...

const Polynomial< T > operator+ (const Polynomial< T > &b) const

Polynomial< T > & operator+= (const Polynomial< T > &b)

void operator= (const Polynomial< T > &b)
Assignment. More...

Public Member Functions inherited from PolynomialND< double, double >
PolynomialND (std::size_t order)
Create polynomial with uninitialized coefficients. More...

PolynomialND (const std::vector< double > &coefficients)
Create polynomial from vector. More...

PolynomialND (const PolynomialND< double, double > &p)
Create polynomial from other polynomial. More...

virtual ~PolynomialND ()
Destructor.

std::size_t order () const
Get the order of the polynomial (the highest power). More...

void increaseOrder (std::size_t increase, const double &value)
Increase the order of this polynomial. More...

void increaseOrder (std::size_t increase=1)
Increase the order of this polynomial. More...

double evaluate (const double &x) const
Evaluate the polynomial using Horner's Method. More...

std::vector< double > evaluateDerivatives (const double &x, std::size_t n=1) const
Evaluate the first n derivatives of the polynomial using Horner's Method. More...

PolynomialND< double, double > deflate (const double &x) const
Perform deflation of polynomial. More...

PolynomialND< double, double > derivative (std::size_t n=1) const
Get the derivative polynomial. More...

const PolynomialND< double, double > operator- () const
Negate coefficients. More...

bool operator== (const PolynomialND< double, double > &b) const
Check if polynomials are equal. More...

const double & operator() (std::size_t i) const
Get specific coefficient. More...

double & operator() (size_t i)
Get specific coefficient. More...

const double & operator[] (size_t i) const
Get specific coefficient. More...

double & operator[] (size_t i)
Get specific coefficient. More...

const PolynomialND< double, double > operator- (const PolynomialND< double, double > &b) const
Polynomial subtraction. More...

PolynomialND< double, double > & operator-= (const PolynomialND< double, double > &b)
Polynomial subtraction. More...

const PolynomialND< double, double > operator+ (const PolynomialND< double, double > &b) const

PolynomialND< double, double > & operator+= (const PolynomialND< double, double > &b)

PolynomialND< OutCoef, double > multiply (const PolynomialND< Coef2, double > &b) const
Polynomial multiplication. More...

PolynomialND< OutCoef, double > multiply (const Coef2 &b) const
Multiply with a coefficient. More...

void operator= (const PolynomialND< double, double > &b)
Assignment. More...

const PolynomialND< double, double > operator* (double s) const
Scalar multiplication. More...

const PolynomialND< double, double > operator/ (double s) const
Scalar division. More...

PolynomialND< double, double > & operator*= (double s)
Scalar multiplication. More...

PolynomialND< double, double > & operator/= (double s)
Scalar division. More...

## Friends

std::ostream & operator<< (std::ostream &out, const Polynomial< T > &p)
Printing polynomial to stream. More...

## Related Functions

(Note that these are not member functions.)

template<>
void write (const rw::math::Polynomial< double > &sobject, rw::common::OutputArchive &oarchive, const std::string &id)

template<>
void write (const rw::math::Polynomial< float > &sobject, rw::common::OutputArchive &oarchive, const std::string &id)

template<>
void read (rw::math::Polynomial< double > &sobject, rw::common::InputArchive &iarchive, const std::string &id)

template<>
void read (rw::math::Polynomial< float > &sobject, rw::common::InputArchive &iarchive, const std::string &id)

## Arithmetic operators between polynomial and scalars.

Operators used to do arithmetic with scalars.

const Polynomial< T > operator+ (T s) const

const Polynomial< T > operator- (T s) const
Scalar subtraction. More...

const Polynomial< T > operator* (T s) const
Scalar multiplication. More...

const Polynomial< T > operator* (const Polynomial< T > &polynomial) const
Polynomial multiplication. More...

PolynomialND< Eigen::Matrix< T, 3, 1 >, T > operator* (const PolynomialND< Eigen::Matrix< T, 3, 1 >, T > &polynomial) const
Multiply polynomial with scalar coefficients with a 3D polynomial vector. More...

PolynomialND< Eigen::Matrix< T, 1, 3 >, T > operator* (const PolynomialND< Eigen::Matrix< T, 1, 3 >, T > &polynomial) const
Multiply polynomial with scalar coefficients with a 3D polynomial vector. More...

PolynomialND< Eigen::Matrix< T, 3, 3 >, T > operator* (const PolynomialND< Eigen::Matrix< T, 3, 3 >, T > &polynomial) const
Multiply polynomial with scalar coefficients with a 3D polynomial matrix. More...

PolynomialND< Eigen::Matrix< T, 3, 1 >, T > operator* (const Eigen::Matrix< T, 3, 1 > &a) const
Multiply polynomial with scalar coefficients with a vector. More...

PolynomialND< Eigen::Matrix< T, 1, 3 >, T > operator* (const Eigen::Matrix< T, 1, 3 > &a) const
Multiply polynomial with scalar coefficients with a vector. More...

PolynomialND< Eigen::Matrix< T, 3, 3 >, T > operator* (const Eigen::Matrix< T, 3, 3 > &A) const
Multiply polynomial with scalar coefficients with a matrix. More...

const Polynomial< T > operator/ (T s) const
Scalar division. More...

Polynomial< T > & operator+= (T s)

Polynomial< T > & operator-= (T s)
Scalar subtraction. More...

Polynomial< T > & operator*= (T s)
Scalar multiplication. More...

Polynomial< T > & operator/= (T s)
Scalar division. More...

const Polynomial< T > operator* (T s, const Polynomial< T > &p)
Scalar multiplication. More...

Protected Attributes inherited from PolynomialND< double, double >
std::vector< double > _coef
The coefficient vector.

## Detailed Description

### template<typename T = double> class rw::math::Polynomial< T >

Representation of an ordinary polynomial with scalar coefficients (that can be both real and complex).

Representation of a polynomial of the following form:

$$f(x) = c_n x^n + c_(n-1) x^(n-1) + c_2 x^2 + c_1 x + c_0$$

The polynomial is represented as a list of coefficients ordered from lowest-order term to highest-order term, $${c_0,c_1,...,c_n}$$.

## ◆ Polynomial() [1/4]

 Polynomial ( std::size_t order )
inlineexplicit

Create polynomial with coefficients initialized to zero.

Parameters
 order [in] the order of the polynomial.

## ◆ Polynomial() [2/4]

 Polynomial ( const std::vector< T > & coefficients )
inline

Create polynomial from vector.

Parameters
 coefficients [in] the coefficients ordered from lowest-order term to highest-order term.

## ◆ Polynomial() [3/4]

 Polynomial ( const Polynomial< T > & p )
inline

Create polynomial from other polynomial.

Parameters
 p [in] the polynomial to copy.

## ◆ Polynomial() [4/4]

 Polynomial ( const PolynomialND< T, T > & p )
inline

Create polynomial from other polynomial.

Parameters
 p [in] the polynomial to copy.

## ◆ cast()

 const Polynomial cast ( )
inline

Cast to other type.

Returns
a new polynomial after cast to new type.

## ◆ deflate()

 Polynomial deflate ( const T & x ) const
inline

Perform deflation of polynomial.

Parameters
 x [in] a root of the polynomial.
Returns
a new polynomial of same order minus one.
Note
There is no check that the given root is in fact a root of the polynomial.

## ◆ derivative()

 Polynomial derivative ( std::size_t n = 1 ) const
inline

Get the derivative polynomial.

Parameters
 n [in] gives the n'th derivative (default is n=1).
Returns
a new polynomial of same order minus one.
Note
To evaluate derivatives use the evaluate derivative method which is more precise.

## ◆ evaluate() [1/2]

 T evaluate ( const T & x ) const
inline

Evaluate the polynomial using Horner's Method.

Parameters
 x [in] the input parameter.
Returns
the value $$f(x)$$.

## ◆ evaluate() [2/2]

 T evaluate ( const T & x, ErrT & err ) const
inline

Evaluate the polynomial using Horner's Method.

This function estimates the error of the result. For float or double types, the error type, ErrT, should be the same as the type T. For std::complex<float> or std::complex<double> types, the error type, ErrT, should be either float or double.

Parameters
 x [in] the input parameter. err [out] estimate of the absolute error.
Returns
the value $$f(x)$$.
Note
Error is the absolute size of the interval where $$f(x)$$ can be, assuming coefficients are exact.

## ◆ evaluateDerivatives() [1/2]

 std::vector evaluateDerivatives ( const T & x, std::size_t n = 1 ) const
inline

Evaluate the first n derivatives of the polynomial using Horner's Method.

Parameters
 x [in] the input parameter. n [in] the number of derivatives to find (default is the first derivative only)
Returns
a vector of values $${f(x),\dot{f}(x),\ddot{f}(x),\cdots}$$.

## ◆ evaluateDerivatives() [2/2]

 std::vector evaluateDerivatives ( const T & x, std::vector< ErrT > & err, std::size_t n = 1 ) const
inline

Evaluate the first n derivatives of the polynomial using Horner's Method.

This function estimates the error of the result. For float or double types, the error type, ErrT, should be the same as the type T. For std::complex<float> or std::complex<double> types, the error type, ErrT, should be either float or double.

Parameters
 x [in] the input parameter. err [out] estimate of the absolute errors. n [in] the number of derivatives to find (default is the first derivative only)
Returns
the value $$\dot{f}(x)$$.
Note
Error is the absolute size of the interval where $$f(x)$$ can be, assuming coefficients are exact.

## ◆ operator*() [1/8]

 PolynomialND, T> operator* ( const Eigen::Matrix< T, 1, 3 > & a ) const
inline

Multiply polynomial with scalar coefficients with a vector.

Parameters
 a [in] vector to multiply with.
Returns
a 3D polynomial vector.

## ◆ operator*() [2/8]

 PolynomialND, T> operator* ( const Eigen::Matrix< T, 3, 1 > & a ) const
inline

Multiply polynomial with scalar coefficients with a vector.

Parameters
 a [in] vector to multiply with.
Returns
a 3D polynomial vector.

## ◆ operator*() [3/8]

 PolynomialND, T> operator* ( const Eigen::Matrix< T, 3, 3 > & A ) const
inline

Multiply polynomial with scalar coefficients with a matrix.

Parameters
 A [in] matrix to multiply with.
Returns
a 3D polynomial matrix.

## ◆ operator*() [4/8]

 const Polynomial operator* ( const Polynomial< T > & polynomial ) const
inline

Polynomial multiplication.

This multiplication functions uses a convolution of the coefficients. More efficient implementations are possible.

Parameters
 polynomial [in] polynomial to multiply with.
Returns
new polynomial after multiplication.

## ◆ operator*() [5/8]

 PolynomialND, T> operator* ( const PolynomialND< Eigen::Matrix< T, 1, 3 >, T > & polynomial ) const
inline

Multiply polynomial with scalar coefficients with a 3D polynomial vector.

Parameters
 polynomial [in] polynomial vector.
Returns
a 3D polynomial vector.

## ◆ operator*() [6/8]

 PolynomialND, T> operator* ( const PolynomialND< Eigen::Matrix< T, 3, 1 >, T > & polynomial ) const
inline

Multiply polynomial with scalar coefficients with a 3D polynomial vector.

Parameters
 polynomial [in] polynomial vector.
Returns
a 3D polynomial vector.

## ◆ operator*() [7/8]

 PolynomialND, T> operator* ( const PolynomialND< Eigen::Matrix< T, 3, 3 >, T > & polynomial ) const
inline

Multiply polynomial with scalar coefficients with a 3D polynomial matrix.

Parameters
 polynomial [in] polynomial matrix.
Returns
a 3D polynomial matrix.

## ◆ operator*() [8/8]

 const Polynomial operator* ( T s ) const
inline

Scalar multiplication.

Parameters
 s [in] scalar to multiply with.
Returns
new polynomial after multiplication.

## ◆ operator*=()

 Polynomial& operator*= ( T s )
inline

Scalar multiplication.

Parameters
 s [in] the scalar to multiply with.
Returns
reference to same polynomial with changed coefficients.

## ◆ operator+() [1/2]

 const Polynomial operator+ ( const Polynomial< T > & b ) const
inline

Parameters
Returns

## ◆ operator+() [2/2]

 const Polynomial operator+ ( T s ) const
inline

Parameters
Returns

## ◆ operator+=() [1/2]

 Polynomial& operator+= ( const Polynomial< T > & b )
inline

Parameters
Returns
same polynomial with different coefficients after addition.

## ◆ operator+=() [2/2]

 Polynomial& operator+= ( T s )
inline

Parameters
Returns
same polynomial with coefficients changed.

## ◆ operator-() [1/3]

 const Polynomial operator- ( ) const
inline

Negate coefficients.

Returns
new polynomial with coefficients negated.

## ◆ operator-() [2/3]

 const Polynomial operator- ( const Polynomial< T > & b ) const
inline

Polynomial subtraction.

Parameters
 b [in] polynomial of to subtract.
Returns
new polynomial after subtraction.

## ◆ operator-() [3/3]

 const Polynomial operator- ( T s ) const
inline

Scalar subtraction.

Parameters
 s [in] scalar to subtract.
Returns
new polynomial after subtraction.

## ◆ operator-=() [1/2]

 Polynomial& operator-= ( const Polynomial< T > & b )
inline

Polynomial subtraction.

Parameters
 b [in] polynomial to subtract.
Returns
same polynomial with different coefficients after subtraction.

## ◆ operator-=() [2/2]

 Polynomial& operator-= ( T s )
inline

Scalar subtraction.

Parameters
 s [in] scalar to subtract.
Returns
same polynomial with coefficients changed.

## ◆ operator/()

 const Polynomial operator/ ( T s ) const
inline

Scalar division.

Parameters
 s [in] scalar to divide with.
Returns
new polynomial after division.

## ◆ operator/=()

 Polynomial& operator/= ( T s )
inline

Scalar division.

Parameters
 s [in] the scalar to divide with.
Returns
reference to same polynomial with changed coefficients.

## ◆ operator=()

 void operator= ( const Polynomial< T > & b )
inline

Assignment.

Parameters
 b [in] the polynomial to take coefficients from.
Returns
true if equal, false if not.

## ◆ operator==()

 bool operator== ( const Polynomial< T > & b ) const
inline

Check if polynomials are equal.

Parameters
 b [in] the polynomial to compare with.
Returns
true if equal, false if not.

## ◆ operator*

 const Polynomial operator* ( T s, const Polynomial< T > & p )
friend

Scalar multiplication.

Parameters
 s [in] scalar to multiply with. p [in] polynomial to multiply with.
Returns
new polynomial after multiplication.

## ◆ operator<<

 std::ostream& operator<< ( std::ostream & out, const Polynomial< T > & p )
friend

Printing polynomial to stream.

Parameters
 out [in/out] the stream to write to. p [in] the polynomail to print.
Returns
the same ostream as out parameter.

 void read ( rw::math::Polynomial< double > & sobject, rw::common::InputArchive & iarchive, const std::string & id )
related

Parameters
 sobject [out] the object in which the data should be streamed into iarchive [in] the InputArchive from which to read data. id [in] The id of the serialized sobject.
Note
the id can be empty in which case the overloaded method should provide a default identifier. E.g. the Vector3D class defined "Vector3D" as its default id.

 void read ( rw::math::Polynomial< float > & sobject, rw::common::InputArchive & iarchive, const std::string & id )
related

Parameters
 sobject [out] the object in which the data should be streamed into iarchive [in] the InputArchive from which to read data. id [in] The id of the serialized sobject.
Note
the id can be empty in which case the overloaded method should provide a default identifier. E.g. the Vector3D class defined "Vector3D" as its default id.

## ◆ write() [1/2]

 void write ( const rw::math::Polynomial< double > & sobject, rw::common::OutputArchive & oarchive, const std::string & id )
related

Enable write-serialization of class T by overloading this method. Data is written to oarchive from the sobject.

Parameters
 sobject [in] the object from which the data should be streamed. oarchive [out] the OutputArchive in which data should be written. id [in] The id of the serialized sobject.
Note
the id can be empty in which case the overloaded method should provide a default identifier. E.g. the Vector3D class defined "Vector3D" as its default id.

## ◆ write() [2/2]

 void write ( const rw::math::Polynomial< float > & sobject, rw::common::OutputArchive & oarchive, const std::string & id )
related

Enable write-serialization of class T by overloading this method. Data is written to oarchive from the sobject.

Parameters
 sobject [in] the object from which the data should be streamed. oarchive [out] the OutputArchive in which data should be written. id [in] The id of the serialized sobject.
Note
the id can be empty in which case the overloaded method should provide a default identifier. E.g. the Vector3D class defined "Vector3D" as its default id.

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