Drake
PolynomialBasisElement Class Referenceabstract

Detailed Description

Each polynomial p(x) can be written as a linear combination of its basis elements p(x) = ∑ᵢ cᵢ * ϕᵢ(x), where ϕᵢ(x) is the i'th element in the basis, cᵢ is the coefficient of that element.

The most commonly used basis is monomials. For example in polynomial p(x) = 2x₀²x₁ + 3x₀x₁ + 2, x₀²x₁, x₀x₁ and 1 are all elements of monomial basis. Likewise, a polynomial can be written using other basis, such as Chebyshev polynomials, Legendre polynomials, etc. For a polynomial written with Chebyshev polynomial basis p(x) = 2T₂(x₀)T₁(x₁) + 3T₁(x₁) + 2T₂(x₀), T₂(x₀)T₁(x₁),T₁(x₁), and T₂(x₀) are all elements of Chebyshev basis. This PolynomialBasisElement class represents an element ϕᵢ(x) in the basis. We can think of an element of polynomial basis as a mapping from the variable to its degree. So for monomial basis element x₀²x₁, it can be thought of as a mapping {x₀ -> 2, x₁ -> 1}. For a Chebyshev basis element T₂(x₀)T₁(x₁), it can be thought of as a mapping {x₀ -> 2, x₁ -> 1}.

Each of the derived class, Derived, should implement the following functions

• std::map<Derived, double> operator*(const Derived& A, const Derived&B)
• std::map<Derived, double> Derived::Differentiate(const Variable& var) const;
• std::map<Derived, double> Derived::Integrate(const Variable& var) const;
• bool Derived::operator<(const Derived& other) const;
• std::pair<double, Derived> EvaluatePartial(const Environment& e) const;
• void MergeBasisElementInPlace(const Derived& other)

The function lexicographical_compare can be used when implementing operator<. The function DoEvaluatePartial can be used when implementing EvaluatePartial

#include <drake/common/symbolic_polynomial_basis_element.h>

Public Member Functions

PolynomialBasisElement ()=default
Constructs a polynomial basis with empty var_to_degree map. More...

PolynomialBasisElement (const std::map< Variable, int > &var_to_degree_map)
Constructs a polynomial basis given the variable and the degree of that variable. More...

PolynomialBasisElement (const Eigen::Ref< const VectorX< Variable >> &vars, const Eigen::Ref< const Eigen::VectorXi > &degrees)
Constructs a polynomial basis, such that it contains the variable-to-degree map vars(i)→degrees(i). More...

virtual ~PolynomialBasisElement ()=default

const std::map< Variable, int > & var_to_degree_map () const

const std::map< Variable, int > & get_powers () const
Returns variable to degree map. More...

int total_degree () const
Returns the total degree of a polynomial basis. More...

int degree (const Variable &v) const
Returns the degree of this PolynomialBasisElement in a variable v. More...

Variables GetVariables () const

double Evaluate (const Environment &env) const
Evaluates under a given environment env. More...

bool operator== (const PolynomialBasisElement &other) const

bool operator!= (const PolynomialBasisElement &other) const

Expression ToExpression () const

Implements CopyConstructible, CopyAssignable, MoveConstructible, MoveAssignable
PolynomialBasisElement (const PolynomialBasisElement &)=default

PolynomialBasisElementoperator= (const PolynomialBasisElement &)=default

PolynomialBasisElement (PolynomialBasisElement &&)=default

PolynomialBasisElementoperator= (PolynomialBasisElement &&)=default

Protected Member Functions

bool lexicographical_compare (const PolynomialBasisElement &other) const
Compares two PolynomialBasisElement using lexicographical order. More...

virtual bool EqualTo (const PolynomialBasisElement &other) const

void DoEvaluatePartial (const Environment &e, double *coeff, std::map< Variable, int > *new_basis_element) const

intget_mutable_total_degree ()

std::map< Variable, int > * get_mutable_var_to_degree_map ()

void DoMergeBasisElementInPlace (const PolynomialBasisElement &other)
Merge this basis element with another basis element by merging their var_to_degree_map. More...

◆ PolynomialBasisElement() [1/5]

 PolynomialBasisElement ( const PolynomialBasisElement & )
default

◆ PolynomialBasisElement() [2/5]

 PolynomialBasisElement ( PolynomialBasisElement && )
default

◆ PolynomialBasisElement() [3/5]

 PolynomialBasisElement ( )
default

Constructs a polynomial basis with empty var_to_degree map.

This element should be interpreted as 1.

◆ PolynomialBasisElement() [4/5]

 PolynomialBasisElement ( const std::map< Variable, int > & var_to_degree_map )
explicit

Constructs a polynomial basis given the variable and the degree of that variable.

Exceptions
 std::exception if any of the degree is negative.
Note
we will ignore the variable with degree 0.

◆ PolynomialBasisElement() [5/5]

 PolynomialBasisElement ( const Eigen::Ref< const VectorX< Variable >> & vars, const Eigen::Ref< const Eigen::VectorXi > & degrees )

Constructs a polynomial basis, such that it contains the variable-to-degree map vars(i)→degrees(i).

Exceptions
 std::exception if vars contains repeated variables. std::exception if any degree is negative.

◆ ~PolynomialBasisElement()

 virtual ~PolynomialBasisElement ( )
virtualdefault

◆ degree()

 int degree ( const Variable & v ) const

Returns the degree of this PolynomialBasisElement in a variable v.

If v is not a variable in this PolynomialBasisElement, then returns 0.

◆ DoEvaluatePartial()

 void DoEvaluatePartial ( const Environment & e, double * coeff, std::map< Variable, int > * new_basis_element ) const
protected

◆ DoMergeBasisElementInPlace()

 void DoMergeBasisElementInPlace ( const PolynomialBasisElement & other )
protected

Merge this basis element with another basis element by merging their var_to_degree_map.

After merging, the degree of each variable is raised to the sum of the degree in each basis element (if a variable does not show up in either one of the basis element, we regard its degree to be 0).

◆ EqualTo()

 virtual bool EqualTo ( const PolynomialBasisElement & other ) const
protectedvirtual

◆ Evaluate()

 double Evaluate ( const Environment & env ) const

Evaluates under a given environment env.

Exceptions
 std::exception exception if there is a variable in this monomial whose assignment is not provided by env.

◆ get_mutable_total_degree()

 int* get_mutable_total_degree ( )
protected

◆ get_mutable_var_to_degree_map()

 std::map* get_mutable_var_to_degree_map ( )
protected

◆ get_powers()

 const std::map& get_powers ( ) const

Returns variable to degree map.

TODO(hongkai.dai): this function is added because Monomial class has get_powers() function. We will remove this get_powers() function when Monomial class is deprecated.

◆ GetVariables()

 Variables GetVariables ( ) const

◆ lexicographical_compare()

 bool lexicographical_compare ( const PolynomialBasisElement & other ) const
protected

Compares two PolynomialBasisElement using lexicographical order.

This function is meant to be called by the derived class, to compare two polynomial basis of the same derived class.

◆ operator!=()

 bool operator!= ( const PolynomialBasisElement & other ) const

◆ operator=() [1/2]

 PolynomialBasisElement& operator= ( PolynomialBasisElement && )
default

◆ operator=() [2/2]

 PolynomialBasisElement& operator= ( const PolynomialBasisElement & )
default

◆ operator==()

 bool operator== ( const PolynomialBasisElement & other ) const

◆ ToExpression()

 Expression ToExpression ( ) const

◆ total_degree()

 int total_degree ( ) const

Returns the total degree of a polynomial basis.

This is the summation of the degree for each variable.

◆ var_to_degree_map()

 const std::map& var_to_degree_map ( ) const

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