Drake
Expression Class Reference

Represents a symbolic form of an expression. More...

#include <drake/common/symbolic_expression.h>

Public Member Functions

 Expression ()
 Default constructor. More...
 
 Expression (double d)
 Constructs a constant. More...
 
 Expression (const Variable &var)
 Constructs an expression from var. More...
 
ExpressionKind get_kind () const
 Returns expression kind. More...
 
size_t get_hash () const
 Returns hash value. More...
 
Variables GetVariables () const
 Collects variables in expression. More...
 
bool EqualTo (const Expression &e) const
 Checks structural equality. More...
 
bool Less (const Expression &e) const
 Provides lexicographical ordering between expressions. More...
 
bool is_polynomial () const
 Checks if this symbolic expression is convertible to Polynomial. More...
 
Polynomiald ToPolynomial () const
 Returns a Polynomial representing this expression. More...
 
double Evaluate (const Environment &env=Environment{}) const
 Evaluates under a given environment (by default, an empty environment). More...
 
Expression EvaluatePartial (const Environment &env) const
 Partially evaluates this expression using an environment env. More...
 
Expression Expand () const
 Expands out products and positive integer powers in expression. More...
 
Expression Substitute (const Variable &var, const Expression &e) const
 Returns a copy of this expression replacing all occurrences of var with e. More...
 
Expression Substitute (const Substitution &s) const
 Returns a copy of this expression replacing all occurrences of the variables in s with corresponding expressions in s. More...
 
Expression Differentiate (const Variable &x) const
 Differentiates this symbolic expression with respect to the variable var. More...
 
std::string to_string () const
 Returns string representation of Expression. More...
 
Expressionoperator++ ()
 Provides prefix increment operator (i.e. More...
 
Expression operator++ (int)
 Provides postfix increment operator (i.e. More...
 
Expressionoperator-- ()
 Provides prefix decrement operator (i.e. More...
 
Expression operator-- (int)
 Provides postfix decrement operator (i.e. More...
 
Implements CopyConstructible, CopyAssignable, MoveConstructible, MoveAssignable
 Expression (const Expression &)=default
 
Expressionoperator= (const Expression &)=default
 
 Expression (Expression &&)=default
 
Expressionoperator= (Expression &&)=default
 

Static Public Member Functions

static Expression Zero ()
 Returns zero. More...
 
static Expression One ()
 Returns one. More...
 
static Expression Pi ()
 Returns Pi, the ratio of a circle’s circumference to its diameter. More...
 
static Expression E ()
 Return e, the base of natural logarithms. More...
 
static Expression NaN ()
 Returns NaN (Not-a-Number). More...
 

Friends

class ExpressionAddFactory
 
class ExpressionMulFactory
 
Expression operator+ (Expression lhs, const Expression &rhs)
 
Expressionoperator+= (Expression &lhs, const Expression &rhs)
 
Expression operator- (Expression lhs, const Expression &rhs)
 
Expressionoperator-= (Expression &lhs, const Expression &rhs)
 
Expression operator- (const Expression &e)
 Provides unary minus operator. More...
 
Expression operator* (Expression lhs, const Expression &rhs)
 
Expressionoperator*= (Expression &lhs, const Expression &rhs)
 
Expression operator/ (Expression lhs, const Expression &rhs)
 
Expressionoperator/= (Expression &lhs, const Expression &rhs)
 
Expression log (const Expression &e)
 
Expression abs (const Expression &e)
 
Expression exp (const Expression &e)
 
Expression sqrt (const Expression &e)
 
Expression pow (const Expression &e1, const Expression &e2)
 
Expression sin (const Expression &e)
 
Expression cos (const Expression &e)
 
Expression tan (const Expression &e)
 
Expression asin (const Expression &e)
 
Expression acos (const Expression &e)
 
Expression atan (const Expression &e)
 
Expression atan2 (const Expression &e1, const Expression &e2)
 
Expression sinh (const Expression &e)
 
Expression cosh (const Expression &e)
 
Expression tanh (const Expression &e)
 
Expression min (const Expression &e1, const Expression &e2)
 
Expression max (const Expression &e1, const Expression &e2)
 
Expression ceil (const Expression &e)
 
Expression floor (const Expression &e)
 
Expression if_then_else (const Formula &f_cond, const Expression &e_then, const Expression &e_else)
 Constructs if-then-else expression. More...
 
Expression uninterpreted_function (const std::string &name, const Variables &vars)
 Constructs an uninterpreted-function expression with name and vars. More...
 
std::ostream & operator<< (std::ostream &os, const Expression &e)
 
void swap (Expression &a, Expression &b)
 
bool is_constant (const Expression &e)
 Checks if e is a constant expression. More...
 
bool is_variable (const Expression &e)
 Checks if e is a variable expression. More...
 
bool is_addition (const Expression &e)
 Checks if e is an addition expression. More...
 
bool is_multiplication (const Expression &e)
 Checks if e is a multiplication expression. More...
 
bool is_division (const Expression &e)
 Checks if e is a division expression. More...
 
bool is_log (const Expression &e)
 Checks if e is a log expression. More...
 
bool is_abs (const Expression &e)
 Checks if e is an abs expression. More...
 
bool is_exp (const Expression &e)
 Checks if e is an exp expression. More...
 
bool is_sqrt (const Expression &e)
 Checks if e is a square-root expression. More...
 
bool is_pow (const Expression &e)
 Checks if e is a power-function expression. More...
 
bool is_sin (const Expression &e)
 Checks if e is a sine expression. More...
 
bool is_cos (const Expression &e)
 Checks if e is a cosine expression. More...
 
bool is_tan (const Expression &e)
 Checks if e is a tangent expression. More...
 
bool is_asin (const Expression &e)
 Checks if e is an arcsine expression. More...
 
bool is_acos (const Expression &e)
 Checks if e is an arccosine expression. More...
 
bool is_atan (const Expression &e)
 Checks if e is an arctangent expression. More...
 
bool is_atan2 (const Expression &e)
 Checks if e is an arctangent2 expression. More...
 
bool is_sinh (const Expression &e)
 Checks if e is a hyperbolic-sine expression. More...
 
bool is_cosh (const Expression &e)
 Checks if e is a hyperbolic-cosine expression. More...
 
bool is_tanh (const Expression &e)
 Checks if e is a hyperbolic-tangent expression. More...
 
bool is_min (const Expression &e)
 Checks if e is a min expression. More...
 
bool is_max (const Expression &e)
 Checks if e is a max expression. More...
 
bool is_ceil (const Expression &e)
 
bool is_floor (const Expression &e)
 
bool is_if_then_else (const Expression &e)
 Checks if e is an if-then-else expression. More...
 
bool is_uninterpreted_function (const Expression &e)
 Checks if e is an uninterpreted-function expression. More...
 
std::shared_ptr< ExpressionConstantto_constant (const Expression &e)
 Casts e to shared_ptr<ExpressionConstant>. More...
 
std::shared_ptr< ExpressionVarto_variable (const Expression &e)
 Casts e to shared_ptr<ExpressionVar>. More...
 
std::shared_ptr< UnaryExpressionCellto_unary (const Expression &e)
 Casts e to shared_ptr<UnaryExpressionCell>. More...
 
std::shared_ptr< BinaryExpressionCellto_binary (const Expression &e)
 Casts e to shared_ptr<BinaryExpressionCell>. More...
 
std::shared_ptr< ExpressionAddto_addition (const Expression &e)
 Casts e to shared_ptr<ExpressionAdd>. More...
 
std::shared_ptr< ExpressionMulto_multiplication (const Expression &e)
 Casts e to shared_ptr<ExpressionMul>. More...
 
std::shared_ptr< ExpressionDivto_division (const Expression &e)
 Casts e to shared_ptr<ExpressionDiv>. More...
 
std::shared_ptr< ExpressionLogto_log (const Expression &e)
 Casts e to shared_ptr<ExpressionLog>. More...
 
std::shared_ptr< ExpressionAbsto_abs (const Expression &e)
 Casts e to shared_ptr<ExpressionAbs>. More...
 
std::shared_ptr< ExpressionExpto_exp (const Expression &e)
 Casts e to shared_ptr<ExpressionExp>. More...
 
std::shared_ptr< ExpressionSqrtto_sqrt (const Expression &e)
 Casts e to shared_ptr<ExpressionSqrt>. More...
 
std::shared_ptr< ExpressionPowto_pow (const Expression &e)
 Casts e to shared_ptr<ExpressionPow>. More...
 
std::shared_ptr< ExpressionSinto_sin (const Expression &e)
 Casts e to shared_ptr<ExpressionSin>. More...
 
std::shared_ptr< ExpressionCosto_cos (const Expression &e)
 Casts e to shared_ptr<ExpressionCos>. More...
 
std::shared_ptr< ExpressionTanto_tan (const Expression &e)
 Casts e to shared_ptr<ExpressionTan>. More...
 
std::shared_ptr< ExpressionAsinto_asin (const Expression &e)
 Casts e to shared_ptr<ExpressionAsin>. More...
 
std::shared_ptr< ExpressionAcosto_acos (const Expression &e)
 Casts e to shared_ptr<ExpressionAcos>. More...
 
std::shared_ptr< ExpressionAtanto_atan (const Expression &e)
 Casts e to shared_ptr<ExpressionAtan>. More...
 
std::shared_ptr< ExpressionAtan2to_atan2 (const Expression &e)
 Casts e to shared_ptr<ExpressionAtan2>. More...
 
std::shared_ptr< ExpressionSinhto_sinh (const Expression &e)
 Casts e to shared_ptr<ExpressionSinh>. More...
 
std::shared_ptr< ExpressionCoshto_cosh (const Expression &e)
 Casts e to shared_ptr<ExpressionCosh>. More...
 
std::shared_ptr< ExpressionTanhto_tanh (const Expression &e)
 Casts e to shared_ptr<ExpressionTanh>. More...
 
std::shared_ptr< ExpressionMinto_min (const Expression &e)
 Casts e to shared_ptr<ExpressionMin>. More...
 
std::shared_ptr< ExpressionMaxto_max (const Expression &e)
 Casts e to shared_ptr<ExpressionMax>. More...
 
std::shared_ptr< ExpressionCeilingto_ceil (const Expression &e)
 Casts e to shared_ptr<ExpressionCeiling>. More...
 
std::shared_ptr< ExpressionFloorto_floor (const Expression &e)
 Casts e to shared_ptr<ExpressionFloor>. More...
 
std::shared_ptr< ExpressionIfThenElseto_if_then_else (const Expression &e)
 Casts e to shared_ptr<ExpressionIfThenElse>. More...
 
std::shared_ptr< ExpressionUninterpretedFunctionto_uninterpreted_function (const Expression &e)
 Casts e to shared_ptr<ExpressionUninterpretedFunction>. More...
 

Detailed Description

Represents a symbolic form of an expression.

Its syntax tree is as follows:

    E := Var | Constant | E + ... + E | E * ... * E | E / E | log(E)
       | abs(E) | exp(E) | sqrt(E) | pow(E, E) | sin(E) | cos(E) | tan(E)
       | asin(E) | acos(E) | atan(E) | atan2(E, E) | sinh(E) | cosh(E) | tanh(E)
       | min(E, E) | max(E, E) | ceil(E) | floor(E) | if_then_else(F, E, E)
       | NaN | uninterpreted_function(name, {v_1, ..., v_n})

In the implementation, Expression is a simple wrapper including a shared pointer to ExpressionCell class which is a super-class of different kinds of symbolic expressions (i.e. ExpressionAdd, ExpressionMul, ExpressionLog, ExpressionSin). Note that it includes a shared pointer, not a unique pointer, to allow sharing sub-expressions.

Note
The sharing of sub-expressions is not yet implemented.
-E is represented as -1 * E internally.
A subtraction E1 - E2 is represented as E1 + (-1 * E2) internally.

The following simple simplifications are implemented:

    E + 0             ->  E
    0 + E             ->  E
    E - 0             ->  E
    E - E             ->  0
    E * 1             ->  E
    1 * E             ->  E
    E * 0             ->  0
    0 * E             ->  0
    E / 1             ->  E
    E / E             ->  1
    pow(E, 0)         ->  1
    pow(E, 1)         ->  E
    E * E             ->  E^2 (= pow(E, 2))
    sqrt(E * E)       ->  |E| (= abs(E))
    sqrt(E) * sqrt(E) -> E

Constant folding is implemented:

    E(c1) + E(c2)  ->  E(c1 + c2)    // c1, c2 are constants
    E(c1) - E(c2)  ->  E(c1 - c2)
    E(c1) * E(c2)  ->  E(c1 * c2)
    E(c1) / E(c2)  ->  E(c1 / c2)
    f(E(c))        ->  E(f(c))       // c is a constant, f is a math function

For the math functions which are only defined over a restricted domain (namely, log, sqrt, pow, asin, acos), we check the domain of argument(s), and throw std::domain_error exception if a function is not well-defined for a given argument(s).

Relational operators over expressions (==, !=, <, >, <=, >=) return symbolic::Formula instead of bool. Those operations are declared in symbolic_formula.h file. To check structural equality between two expressions a separate function, Expression::EqualTo, is provided.

symbolic::Expression can be used as a scalar type of Eigen types.

Constructor & Destructor Documentation

Expression ( const Expression )
default
Expression ( Expression &&  )
default
Expression ( )
inline

Default constructor.

It constructs Zero().

Here is the call graph for this function:

Here is the caller graph for this function:

Constructs a constant.

Here is the call graph for this function:

Expression ( const Variable var)

Constructs an expression from var.

Precondition
var is neither a dummy nor a BOOLEAN variable.

Member Function Documentation

Expression Differentiate ( const Variable x) const

Differentiates this symbolic expression with respect to the variable var.

Exceptions
std::runtime_errorif it is not differentiable.

Here is the caller graph for this function:

Expression E ( )
static

Return e, the base of natural logarithms.

Here is the call graph for this function:

bool EqualTo ( const Expression e) const

Checks structural equality.

Two expressions e1 and e2 are structurally equal when they have the same internal AST(abstract-syntax tree) representation. Please note that we can have two computationally (or extensionally) equivalent expressions which are not structurally equal. For example, consider:

e1 = 2 * (x + y) e2 = 2x + 2y

Obviously, we know that e1 and e2 are evaluated to the same value for all assignments to x and y. However, e1 and e2 are not structurally equal by the definition. Note that e1 is a multiplication expression (is_multiplication(e1) is true) while e2 is an addition expression (is_addition(e2) is true).

One main reason we use structural equality in EqualTo is due to Richardson's Theorem. It states that checking ∀x. E(x) = F(x) is undecidable when we allow sin, asin, log, exp in E and F. Read https://en.wikipedia.org/wiki/Richardson%27s_theorem for details.

Note that for polynomial cases, you can use Expand method and check if two polynomial expressions p1 and p2 are computationally equal. To do so, you check the following:

(p1.Expand() - p2.Expand()).EqualTo(0).

Here is the call graph for this function:

Here is the caller graph for this function:

double Evaluate ( const Environment env = Environment{}) const

Evaluates under a given environment (by default, an empty environment).

Exceptions
std::runtime_errorif NaN is detected during evaluation.

Here is the caller graph for this function:

Expression EvaluatePartial ( const Environment env) const

Partially evaluates this expression using an environment env.

Internally, this method promotes env into a substitution (VariableExpression) and call Evaluate::Substitute with it.

Exceptions
std::runtime_errorif NaN is detected during evaluation.

Here is the call graph for this function:

Here is the caller graph for this function:

Expression Expand ( ) const

Expands out products and positive integer powers in expression.

For example, (x + 1) * (x - 1) is expanded to x^2 - 1 and (x + y)^2 is expanded to x^2 + 2xy + y^2. Note that Expand applies recursively to sub-expressions. For instance, sin(2 * (x + y)) is expanded to sin(2x + 2y). It also simplifies "division by constant" cases. See "drake/common/test/symbolic_expansion_test.cc" to find the examples.

Exceptions
std::runtime_errorif NaN is detected during expansion.

Here is the caller graph for this function:

size_t get_hash ( ) const

Returns hash value.

Here is the caller graph for this function:

ExpressionKind get_kind ( ) const

Returns expression kind.

Here is the caller graph for this function:

Variables GetVariables ( ) const

Collects variables in expression.

Here is the caller graph for this function:

bool is_polynomial ( ) const

Checks if this symbolic expression is convertible to Polynomial.

Here is the caller graph for this function:

bool Less ( const Expression e) const

Provides lexicographical ordering between expressions.

This function is used as a compare function in map<Expression> and set<Expression> via std::less<drake::symbolic::Expression>.

Here is the call graph for this function:

Here is the caller graph for this function:

Expression NaN ( )
static

Returns NaN (Not-a-Number).

Here is the caller graph for this function:

Expression One ( )
static

Returns one.

Here is the call graph for this function:

Here is the caller graph for this function:

Expression & operator++ ( )

Provides prefix increment operator (i.e.

++x).

Here is the call graph for this function:

Expression operator++ ( int  )

Provides postfix increment operator (i.e.

x++).

Expression & operator-- ( )

Provides prefix decrement operator (i.e.

–x).

Here is the call graph for this function:

Expression operator-- ( int  )

Provides postfix decrement operator (i.e.

x–).

Expression& operator= ( const Expression )
default
Expression& operator= ( Expression &&  )
default
Expression Pi ( )
static

Returns Pi, the ratio of a circle’s circumference to its diameter.

Here is the call graph for this function:

Expression Substitute ( const Variable var,
const Expression e 
) const

Returns a copy of this expression replacing all occurrences of var with e.

Exceptions
std::runtime_errorif NaN is detected during substitution.

Here is the caller graph for this function:

Expression Substitute ( const Substitution s) const

Returns a copy of this expression replacing all occurrences of the variables in s with corresponding expressions in s.

Note that the substitutions occur simultaneously. For example, (x / y).Substitute({{x, y}, {y, x}}) gets (y / x).

Exceptions
std::runtime_errorif NaN is detected during substitution.
string to_string ( ) const

Returns string representation of Expression.

Polynomiald ToPolynomial ( ) const

Returns a Polynomial representing this expression.

Note that the ID of a variable is preserved in this translation.

Precondition
{is_polynomial() is true.}

Here is the caller graph for this function:

Expression Zero ( )
static

Returns zero.

Here is the call graph for this function:

Here is the caller graph for this function:

Friends And Related Function Documentation

Expression abs ( const Expression e)
friend
Expression acos ( const Expression e)
friend
Expression asin ( const Expression e)
friend
Expression atan ( const Expression e)
friend
Expression atan2 ( const Expression e1,
const Expression e2 
)
friend
Expression ceil ( const Expression e)
friend
Expression cos ( const Expression e)
friend
Expression cosh ( const Expression e)
friend
Expression exp ( const Expression e)
friend
friend class ExpressionAddFactory
friend
friend class ExpressionMulFactory
friend
Expression floor ( const Expression e)
friend
Expression if_then_else ( const Formula f_cond,
const Expression e_then,
const Expression e_else 
)
friend

Constructs if-then-else expression.

  if_then_else(cond, expr_then, expr_else)

The value returned by the above if-then-else expression is expr_then if cond is evaluated to true. Otherwise, it returns expr_else.

The semantics is similar to the C++'s conditional expression constructed by its ternary operator, ?:. However, there is a key difference between the C++'s conditional expression and our if_then_else expression in a way the arguments are evaluated during the construction.

  • In case of the C++'s conditional expression, cond ? expr_then : expr_else, the then expression expr_then (respectively, the else expression expr_else) is only evaluated when the conditional expression cond is evaluated to true (respectively, when cond is evaluated to false).
  • In case of the symbolic expression, if_then_else(cond, expr_then, expr_else), however, both arguments expr_then and expr_else are evaluated first and then passed to the if_then_else function.
Note
This function returns an expression and it is different from the C++'s if-then-else statement.
While it is still possible to define min, max, abs math functions using if_then_else expression, it is highly recommended to use the provided native definitions for them because it allows solvers to detect specific math functions and to have a room for special optimizations.
More information about the C++'s conditional expression and ternary operator is available at http://en.cppreference.com/w/cpp/language/operator_other#Conditional_operator.
bool is_abs ( const Expression e)
friend

Checks if e is an abs expression.

bool is_acos ( const Expression e)
friend

Checks if e is an arccosine expression.

bool is_addition ( const Expression e)
friend

Checks if e is an addition expression.

bool is_asin ( const Expression e)
friend

Checks if e is an arcsine expression.

bool is_atan ( const Expression e)
friend

Checks if e is an arctangent expression.

bool is_atan2 ( const Expression e)
friend

Checks if e is an arctangent2 expression.

bool is_ceil ( const Expression e)
friend
bool is_constant ( const Expression e)
friend

Checks if e is a constant expression.

bool is_cos ( const Expression e)
friend

Checks if e is a cosine expression.

bool is_cosh ( const Expression e)
friend

Checks if e is a hyperbolic-cosine expression.

bool is_division ( const Expression e)
friend

Checks if e is a division expression.

bool is_exp ( const Expression e)
friend

Checks if e is an exp expression.

bool is_floor ( const Expression e)
friend
bool is_if_then_else ( const Expression e)
friend

Checks if e is an if-then-else expression.

bool is_log ( const Expression e)
friend

Checks if e is a log expression.

bool is_max ( const Expression e)
friend

Checks if e is a max expression.

bool is_min ( const Expression e)
friend

Checks if e is a min expression.

bool is_multiplication ( const Expression e)
friend

Checks if e is a multiplication expression.

bool is_pow ( const Expression e)
friend

Checks if e is a power-function expression.

bool is_sin ( const Expression e)
friend

Checks if e is a sine expression.

bool is_sinh ( const Expression e)
friend

Checks if e is a hyperbolic-sine expression.

bool is_sqrt ( const Expression e)
friend

Checks if e is a square-root expression.

bool is_tan ( const Expression e)
friend

Checks if e is a tangent expression.

bool is_tanh ( const Expression e)
friend

Checks if e is a hyperbolic-tangent expression.

bool is_uninterpreted_function ( const Expression e)
friend

Checks if e is an uninterpreted-function expression.

bool is_variable ( const Expression e)
friend

Checks if e is a variable expression.

Expression log ( const Expression e)
friend
Expression max ( const Expression e1,
const Expression e2 
)
friend
Expression min ( const Expression e1,
const Expression e2 
)
friend
Expression operator* ( Expression  lhs,
const Expression rhs 
)
friend
Expression& operator*= ( Expression lhs,
const Expression rhs 
)
friend
Expression operator+ ( Expression  lhs,
const Expression rhs 
)
friend
Expression& operator+= ( Expression lhs,
const Expression rhs 
)
friend
Expression operator- ( Expression  lhs,
const Expression rhs 
)
friend
Expression operator- ( const Expression e)
friend

Provides unary minus operator.

Expression& operator-= ( Expression lhs,
const Expression rhs 
)
friend
Expression operator/ ( Expression  lhs,
const Expression rhs 
)
friend
Expression& operator/= ( Expression lhs,
const Expression rhs 
)
friend
std::ostream& operator<< ( std::ostream &  os,
const Expression e 
)
friend
Expression pow ( const Expression e1,
const Expression e2 
)
friend
Expression sin ( const Expression e)
friend
Expression sinh ( const Expression e)
friend
Expression sqrt ( const Expression e)
friend
void swap ( Expression a,
Expression b 
)
friend
Expression tan ( const Expression e)
friend
Expression tanh ( const Expression e)
friend
std::shared_ptr<ExpressionAbs> to_abs ( const Expression e)
friend

Casts e to shared_ptr<ExpressionAbs>.

Precondition
*(e.ptr_) is of ExpressionAbs.
std::shared_ptr<ExpressionAcos> to_acos ( const Expression e)
friend

Casts e to shared_ptr<ExpressionAcos>.

Precondition
*(e.ptr_) is of ExpressionAcos.
std::shared_ptr<ExpressionAdd> to_addition ( const Expression e)
friend

Casts e to shared_ptr<ExpressionAdd>.

Precondition
*(e.ptr_) is of ExpressionAdd.
std::shared_ptr<ExpressionAsin> to_asin ( const Expression e)
friend

Casts e to shared_ptr<ExpressionAsin>.

Precondition
*(e.ptr_) is of ExpressionAsin.
std::shared_ptr<ExpressionAtan> to_atan ( const Expression e)
friend

Casts e to shared_ptr<ExpressionAtan>.

Precondition
*(e.ptr_) is of ExpressionAtan.
std::shared_ptr<ExpressionAtan2> to_atan2 ( const Expression e)
friend

Casts e to shared_ptr<ExpressionAtan2>.

Precondition
*(e.ptr_) is of ExpressionAtan2.
std::shared_ptr<BinaryExpressionCell> to_binary ( const Expression e)
friend

Casts e to shared_ptr<BinaryExpressionCell>.

Precondition
*(e.ptr_) is of BinaryExpressionCell.
std::shared_ptr<ExpressionCeiling> to_ceil ( const Expression e)
friend

Casts e to shared_ptr<ExpressionCeiling>.

Precondition
*(e.ptr_) is of ExpressionCeiling.
std::shared_ptr<ExpressionConstant> to_constant ( const Expression e)
friend

Casts e to shared_ptr<ExpressionConstant>.

Precondition
*(e.ptr_) is of ExpressionConstant.
std::shared_ptr<ExpressionCos> to_cos ( const Expression e)
friend

Casts e to shared_ptr<ExpressionCos>.

Precondition
*(e.ptr_) is of ExpressionCos.
std::shared_ptr<ExpressionCosh> to_cosh ( const Expression e)
friend

Casts e to shared_ptr<ExpressionCosh>.

Precondition
*(e.ptr_) is of ExpressionCosh.
std::shared_ptr<ExpressionDiv> to_division ( const Expression e)
friend

Casts e to shared_ptr<ExpressionDiv>.

Precondition
*(e.ptr_) is of ExpressionDiv.
std::shared_ptr<ExpressionExp> to_exp ( const Expression e)
friend

Casts e to shared_ptr<ExpressionExp>.

Precondition
*(e.ptr_) is of ExpressionExp.
std::shared_ptr<ExpressionFloor> to_floor ( const Expression e)
friend

Casts e to shared_ptr<ExpressionFloor>.

Precondition
*(e.ptr_) is of ExpressionFloor.
std::shared_ptr<ExpressionIfThenElse> to_if_then_else ( const Expression e)
friend

Casts e to shared_ptr<ExpressionIfThenElse>.

Precondition
*(e.ptr_) is of ExpressionIfThenElse.
std::shared_ptr<ExpressionLog> to_log ( const Expression e)
friend

Casts e to shared_ptr<ExpressionLog>.

Precondition
*(e.ptr_) is of ExpressionLog.
std::shared_ptr<ExpressionMax> to_max ( const Expression e)
friend

Casts e to shared_ptr<ExpressionMax>.

Precondition
*(e.ptr_) is of ExpressionMax.
std::shared_ptr<ExpressionMin> to_min ( const Expression e)
friend

Casts e to shared_ptr<ExpressionMin>.

Precondition
*(e.ptr_) is of ExpressionMin.
std::shared_ptr<ExpressionMul> to_multiplication ( const Expression e)
friend

Casts e to shared_ptr<ExpressionMul>.

Precondition
*(e.ptr_) is of ExpressionMul.
std::shared_ptr<ExpressionPow> to_pow ( const Expression e)
friend

Casts e to shared_ptr<ExpressionPow>.

Precondition
*(e.ptr_) is of ExpressionPow.
std::shared_ptr<ExpressionSin> to_sin ( const Expression e)
friend

Casts e to shared_ptr<ExpressionSin>.

Precondition
*(e.ptr_) is of ExpressionSin.
std::shared_ptr<ExpressionSinh> to_sinh ( const Expression e)
friend

Casts e to shared_ptr<ExpressionSinh>.

Precondition
*(e.ptr_) is of ExpressionSinh.
std::shared_ptr<ExpressionSqrt> to_sqrt ( const Expression e)
friend

Casts e to shared_ptr<ExpressionSqrt>.

Precondition
*(e.ptr_) is of ExpressionSqrt.
std::shared_ptr<ExpressionTan> to_tan ( const Expression e)
friend

Casts e to shared_ptr<ExpressionTan>.

Precondition
*(e.ptr_) is of ExpressionTan.
std::shared_ptr<ExpressionTanh> to_tanh ( const Expression e)
friend

Casts e to shared_ptr<ExpressionTanh>.

Precondition
*(e.ptr_) is of ExpressionTanh.
std::shared_ptr<UnaryExpressionCell> to_unary ( const Expression e)
friend

Casts e to shared_ptr<UnaryExpressionCell>.

Precondition
*(e.ptr_) is of UnaryExpressionCell.
std::shared_ptr<ExpressionUninterpretedFunction> to_uninterpreted_function ( const Expression e)
friend

Casts e to shared_ptr<ExpressionUninterpretedFunction>.

Precondition
*(e.ptr_) is of ExpressionUninterpretedFunction.
std::shared_ptr<ExpressionVar> to_variable ( const Expression e)
friend

Casts e to shared_ptr<ExpressionVar>.

Precondition
*(e.ptr_) is of ExpressionVar.
Expression uninterpreted_function ( const std::string &  name,
const Variables vars 
)
friend

Constructs an uninterpreted-function expression with name and vars.

An uninterpreted function is an opaque function that has no other property than its name and a set of its arguments. This is useful to applications where it is good enough to provide abstract information of a function without exposing full details. Declaring sparsity of a system is a typical example.


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