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<CoefficientType>::Real RealScalar
typedef Eigen::Matrix<RootType, Eigen::Dynamic, 1> RootsType
typedef std::complex<RealScalar> 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<CoefficientType, T>::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<CoefficientType, T>::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<CoefficientType, Eigen::Dynamic, 1> 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<Monomial>& 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<VarType> 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<CoefficientType> pow ( const Polynomial< CoefficientType > &  p,
typename Polynomial< CoefficientType >::PowerType  n 
)
friend

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