Drake
Polynomial< _CoefficientType > Class Template Reference

A scalar multi-variate polynomial, modeled after the msspoly in spotless. More...

#include <drake/common/polynomial.h>

## Classes

class  Monomial
An additive atom of a Polynomial: The product of any number of Terms and a coefficient. More...

struct  Product

class  Term
An individual variable raised to an integer power; e.g. x**2. More...

## Public Types

typedef _CoefficientType CoefficientType

typedef unsigned int VarType

typedef int PowerType
This should be 'unsigned int' but MSVC considers a call to std::pow(..., unsigned int) ambiguous because it won't cast unsigned int to int. More...

typedef Eigen::NumTraits< CoefficientType >::Real RealScalar

typedef std::complex< RealScalarRootType

typedef Eigen::Matrix< RootType, Eigen::Dynamic, 1 > RootsType

## Public Member Functions

Polynomial (void)
Construct the vacuous polynomial, "0". More...

Polynomial (const CoefficientType &scalar)
Construct a Polynomial of a single constant. e.g. "5". More...

Polynomial (const CoefficientType coeff, const std::vector< Term > &terms)
Construct a Polynomial consisting of a single Monomial, e.g. "5xy**3". More...

Polynomial (typename std::vector< Monomial >::const_iterator start, typename std::vector< Monomial >::const_iterator finish)
Construct a Polynomial from a sequence of Monomials. More...

Polynomial (const std::string varname, const unsigned int num=1)
Construct a polynomial consisting of a single Monomial of the variable named varname + num. More...

Polynomial (const CoefficientType &coeff, const VarType &v)
Construct a single Monomial of the given coefficient and variable. More...

template<typename Derived >
Polynomial (Eigen::MatrixBase< Derived > const &coefficients)
A legacy constructor for univariate polynomials: Takes a vector of coefficients for the constant, x, x**2, x**3... More...

int GetNumberOfCoefficients () const
Returns the number of unique Monomials (and thus the number of coefficients) in this Polynomial. More...

int GetDegree () const
Returns the highest degree of any Monomial in this Polynomial. More...

bool IsAffine () const
Returns true iff this is a sum of terms of degree 1, plus a constant. More...

VarType GetSimpleVariable () const
If the polynomial is "simple" – e.g. More...

const std::vector< Monomial > & GetMonomials () const

Eigen::Matrix< CoefficientType, Eigen::Dynamic, 1 > GetCoefficients () const

std::set< VarTypeGetVariables () const
Returns a set of all of the variables present in this Polynomial. More...

template<typename T >
Product< CoefficientType, T >::type EvaluateUnivariate (const T &x) const
Evaluate a univariate Polynomial at a specific point. More...

template<typename T >
Product< CoefficientType, T >::type EvaluateMultivariate (const std::map< VarType, T > &var_values) const
Evaluate a multivariate Polynomial at a specific point. More...

drake::AutoDiffXd EvaluateMultivariate (const std::map< VarType, drake::AutoDiffXd > &var_values) const
Specialization of EvaluateMultivariate on AutoDiffXd. More...

Polynomial EvaluatePartial (const std::map< VarType, CoefficientType > &var_values) const
Substitute values for some but not necessarily all variables of a Polynomial. More...

void Subs (const VarType &orig, const VarType &replacement)
Replaces all instances of variable orig with replacement. More...

Polynomial Derivative (int derivative_order=1) const
Takes the derivative of this (univariate) Polynomial. More...

Polynomial Integral (const CoefficientType &integration_constant=0.0) const
Takes the integral of this (univariate, non-constant) Polynomial. More...

bool operator== (const Polynomial &other) const

Polynomialoperator+= (const Polynomial &other)

Polynomialoperator-= (const Polynomial &other)

Polynomialoperator*= (const Polynomial &other)

Polynomialoperator+= (const CoefficientType &scalar)

Polynomialoperator-= (const CoefficientType &scalar)

Polynomialoperator*= (const CoefficientType &scalar)

Polynomialoperator/= (const CoefficientType &scalar)

const Polynomial operator+ (const Polynomial &other) const

const Polynomial operator- (const Polynomial &other) const

const Polynomial operator- () const

const Polynomial operator* (const Polynomial &other) const

const Polynomial operator/ (const CoefficientType &scalar) const

bool operator< (const Polynomial &other) const
A comparison to allow std::lexicographical_compare on this class; does not reflect any sort of mathematical total order. More...

RootsType Roots () const
Returns the roots of this (univariate) Polynomial. More...

bool IsApprox (const Polynomial &other, const RealScalar &tol) const
Checks if a (univariate) Polynomial is approximately equal to this one. More...

## Static Public Member Functions

static bool IsValidVariableName (const std::string name)
Variable name/ID conversion facility. More...

static VarType VariableNameToId (const std::string name, const unsigned int m=1)

static std::string IdToVariableName (const VarType id)

## Friends

const Polynomial operator+ (const Polynomial &p, const CoefficientType &scalar)

const Polynomial operator+ (const CoefficientType &scalar, const Polynomial &p)

const Polynomial operator- (const Polynomial &p, const CoefficientType &scalar)

const Polynomial operator- (const CoefficientType &scalar, const Polynomial &p)

const Polynomial operator* (const Polynomial &p, const CoefficientType &scalar)

const Polynomial operator* (const CoefficientType &scalar, const Polynomial &p)

std::ostream & operator<< (std::ostream &os, const Monomial &m)

std::ostream & operator<< (std::ostream &os, const Polynomial &poly)

template<typename CoefficientType >
Polynomial< CoefficientTypepow (const Polynomial< CoefficientType > &p, typename Polynomial< CoefficientType >::PowerType n)

## Detailed Description

### template<typename _CoefficientType = double> class Polynomial< _CoefficientType >

A scalar multi-variate polynomial, modeled after the msspoly in spotless.

Polynomial represents a list of additive Monomials, each one of which is a product of a constant coefficient (of _CoefficientType, which by default is double) and any number of distinct Terms (variables raised to positive integer powers).

Variables are identified by integer indices rather than symbolic names, but an automatic facility is provided to covert variable names up to four characters into unique integers, provided those variables are named using only lowercase letters and the "@#_." characters followed by a number. For example, valid names include "dx4" and "m_x".

Monomials which have the same variables and powers may be constructed but will be automatically combined: (3 * a * b * a) + (1.5 * b * a**2) will be reduced to (4.5 * b * a**2) internally after construction.

Polynomials can be added, subtracted, and multiplied. They may only be divided by scalars (of _CoefficientType) because Polynomials are not closed under division.

## Member Typedef Documentation

 typedef _CoefficientType CoefficientType
 typedef int PowerType

This should be 'unsigned int' but MSVC considers a call to std::pow(..., unsigned int) ambiguous because it won't cast unsigned int to int.

 typedef Eigen::NumTraits::Real RealScalar
 typedef Eigen::Matrix RootsType
 typedef std::complex RootType
 typedef unsigned int VarType

## Constructor & Destructor Documentation

 Polynomial ( void )
inline

Construct the vacuous polynomial, "0".

Here is the caller graph for this function:

 Polynomial ( const CoefficientType & scalar )

Construct a Polynomial of a single constant. e.g. "5".

 Polynomial ( const CoefficientType coeff, const std::vector< Term > & terms )

Construct a Polynomial consisting of a single Monomial, e.g. "5xy**3".

 Polynomial ( typename std::vector< Monomial >::const_iterator start, typename std::vector< Monomial >::const_iterator finish )

Construct a Polynomial from a sequence of Monomials.

 Polynomial ( const std::string varname, const unsigned int num = 1 )
explicit

Construct a polynomial consisting of a single Monomial of the variable named varname + num.

 Polynomial ( const CoefficientType & coeff, const VarType & v )

Construct a single Monomial of the given coefficient and variable.

 Polynomial ( Eigen::MatrixBase< Derived > const & coefficients )
inlineexplicit

A legacy constructor for univariate polynomials: Takes a vector of coefficients for the constant, x, x**2, x**3...

Monomials.

## Member Function Documentation

 Polynomial Derivative ( int derivative_order = 1 ) const

Takes the derivative of this (univariate) Polynomial.

Returns a new Polynomial that is the derivative of this one in its sole variable. Throws an exception of this Polynomial is not univariate.

If derivative_order is given, takes the nth derivative of this Polynomial.

Here is the caller graph for this function:

 Product::type EvaluateMultivariate ( const std::map< VarType, T > & var_values ) const
inline

Evaluate a multivariate Polynomial at a specific point.

Evaluates a Polynomial with the given values for each variable. Throws std::out_of_range if the Polynomial contains variables for which values were not provided.

The provided values may be of any type which is std::is_arithmetic (supporting the std::pow, *, and + operations) and need not be CoefficientsType or RealScalar)

Here is the caller graph for this function:

 drake::AutoDiffXd EvaluateMultivariate ( const std::map< VarType, drake::AutoDiffXd > & var_values ) const
inline

Specialization of EvaluateMultivariate on AutoDiffXd.

Specialize EvaluateMultivariate on AutoDiffXd because Eigen autodiffs implement a confusing subset of operators and conversions that makes a strictly generic approach too confusing and unreadable.

Note that it is up to the caller to ensure that all of the AutoDiffXds in var_values correctly correspond to one another, because Polynomial has no knowledge of what partial derivative terms the indices of a given AutoDiffXd correspond to.

 Polynomial EvaluatePartial ( const std::map< VarType, CoefficientType > & var_values ) const

Substitute values for some but not necessarily all variables of a Polynomial.

Analogous to EvaluateMultivariate, but: (1) Restricted to CoefficientType, and (2) Need not map every variable in var_values.

Returns a Polynomial in which each variable in var_values has been replaced with its value and constants appropriately combined.

Here is the caller graph for this function:

 Product::type EvaluateUnivariate ( const T & x ) const
inline

Evaluate a univariate Polynomial at a specific point.

Evaluates a univariate Polynomial at the given x. Throws an exception of this Polynomial is not univariate.

x may be of any type supporting the ** and + operations (which can be different from both CoefficientsType and RealScalar)

Here is the caller graph for this function:

 Eigen::Matrix GetCoefficients ( ) const

Here is the caller graph for this function:

 int GetDegree ( ) const

Returns the highest degree of any Monomial in this Polynomial.

The degree of a multivariate Monomial is the product of the degrees of each of its terms.

Here is the caller graph for this function:

 const std::vector& GetMonomials ( ) const

Here is the caller graph for this function:

 int GetNumberOfCoefficients ( ) const

Returns the number of unique Monomials (and thus the number of coefficients) in this Polynomial.

Here is the caller graph for this function:

 VarType GetSimpleVariable ( ) const

If the polynomial is "simple" – e.g.

just a single term with coefficient 1 – then returns that variable; otherwise returns 0.

Here is the caller graph for this function:

 std::set GetVariables ( ) const

Returns a set of all of the variables present in this Polynomial.

Here is the caller graph for this function:

 static std::string IdToVariableName ( const VarType id )
static

Here is the caller graph for this function:

 Polynomial Integral ( const CoefficientType & integration_constant = 0.0 ) const

Takes the integral of this (univariate, non-constant) Polynomial.

Returns a new Polynomial that is the indefinite integral of this one in its sole variable. Throws an exception of this Polynomial is not univariate, or if it has no variables.

If integration_constant is given, adds that constant as the constant term (zeroth-order coefficient) of the resulting Polynomial.

Here is the caller graph for this function:

 bool IsAffine ( ) const

Returns true iff this is a sum of terms of degree 1, plus a constant.

Here is the caller graph for this function:

 bool IsApprox ( const Polynomial< _CoefficientType > & other, const RealScalar & tol ) const

Checks if a (univariate) Polynomial is approximately equal to this one.

Checks that every coefficient of other is within tol of the corresponding coefficient of this Polynomial. Throws an exception if either Polynomial is not univariate.

Here is the caller graph for this function:

 static bool IsValidVariableName ( const std::string name )
static

Variable name/ID conversion facility.

Here is the caller graph for this function:

 const Polynomial operator* ( const Polynomial< _CoefficientType > & other ) const

Here is the caller graph for this function:

 Polynomial& operator*= ( const Polynomial< _CoefficientType > & other )

Here is the caller graph for this function:

 Polynomial& operator*= ( const CoefficientType & scalar )
 const Polynomial operator+ ( const Polynomial< _CoefficientType > & other ) const

Here is the caller graph for this function:

 Polynomial& operator+= ( const Polynomial< _CoefficientType > & other )

Here is the caller graph for this function:

 Polynomial& operator+= ( const CoefficientType & scalar )
 const Polynomial operator- ( const Polynomial< _CoefficientType > & other ) const
 const Polynomial operator- ( ) const

Here is the caller graph for this function:

 Polynomial& operator-= ( const Polynomial< _CoefficientType > & other )

Here is the caller graph for this function:

 Polynomial& operator-= ( const CoefficientType & scalar )
 const Polynomial operator/ ( const CoefficientType & scalar ) const
 Polynomial& operator/= ( const CoefficientType & scalar )

Here is the caller graph for this function:

 bool operator< ( const Polynomial< _CoefficientType > & other ) const
inline

A comparison to allow std::lexicographical_compare on this class; does not reflect any sort of mathematical total order.

 bool operator== ( const Polynomial< _CoefficientType > & other ) const

Here is the caller graph for this function:

 RootsType Roots ( ) const

Returns the roots of this (univariate) Polynomial.

Returns the roots of a univariate Polynomial as an Eigen column vector of complex numbers whose components are of the RealScalar type. Throws an exception of this Polynomial is not univariate.

Here is the caller graph for this function:

 void Subs ( const VarType & orig, const VarType & replacement )

Replaces all instances of variable orig with replacement.

Here is the caller graph for this function:

 static VarType VariableNameToId ( const std::string name, const unsigned int m = 1 )
static

Here is the caller graph for this function:

## Friends And Related Function Documentation

 const Polynomial operator* ( const Polynomial< _CoefficientType > & p, const CoefficientType & scalar )
friend
 const Polynomial operator* ( const CoefficientType & scalar, const Polynomial< _CoefficientType > & p )
friend
 const Polynomial operator+ ( const Polynomial< _CoefficientType > & p, const CoefficientType & scalar )
friend
 const Polynomial operator+ ( const CoefficientType & scalar, const Polynomial< _CoefficientType > & p )
friend
 const Polynomial operator- ( const Polynomial< _CoefficientType > & p, const CoefficientType & scalar )
friend
 const Polynomial operator- ( const CoefficientType & scalar, const Polynomial< _CoefficientType > & p )
friend
 std::ostream& operator<< ( std::ostream & os, const Monomial & m )
friend
 std::ostream& operator<< ( std::ostream & os, const Polynomial< _CoefficientType > & poly )
friend
 Polynomial pow ( const Polynomial< CoefficientType > & p, typename Polynomial< CoefficientType >::PowerType n )
friend

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