# ModelingToolkit: variables in an expression and expression simplification

**URL:** <https://discourse.julialang.org/t/modelingtoolkit-variables-in-an-expression-and-expression-simplification/31894>\
**Category:** Modelling & Simulations\
**Created:** [December 5, 2019, 10:14am UTC](https://discourse.julialang.org/t/modelingtoolkit-variables-in-an-expression-and-expression-simplification/31894 "2019-12-05T10:14:26Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![cvanaret](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cvanaret/32/11594_2.png) [@cvanaret](https://discourse.julialang.org/u/cvanaret)\
**Post date:** [December 5, 2019, 10:14am UTC](https://discourse.julialang.org/t/modelingtoolkit-variables-in-an-expression-and-expression-simplification/31894/1 "2019-12-05T10:14:26Z")

</div>

Hi,  
I have two questions about the ModelingToolkit package:

- is there a function that determines the list of variables that occur in an expression?  
Example: x^2 + y - exp(y) contains x and y

- is there a function that simplifies an expression? After writing a linear combination of expressions in my code, a “1_x - 0_y” pops up, and I would like the second term to be simplified (otherwise, the result of my first question may be irrelevant 😅)

Thanks,

Charlie

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [December 5, 2019, 10:53am UTC](https://discourse.julialang.org/t/modelingtoolkit-variables-in-an-expression-and-expression-simplification/31894/2 "2019-12-05T10:53:27Z")

</div>

> [@cvanaret](#):
>
> is there a function that determines the list of variables that occur in an expression?  
> Example: x^2 + y - exp(y) contains x and y

No, we should add one.

> [@cvanaret](#):
>
> is there a function that simplifies an expression? After writing a linear combination of expressions in my code, a “1 _x - 0_ y” pops up, and I would like the second term to be simplified (otherwise, the result of my first question may be irrelevant 😅)

`simplify_expressions` IIRC. It’s pretty bad and we actually need Rewrite.jl integration to be completed.

---

<div class="post-metadata">

**Author:** ![cvanaret](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cvanaret/32/11594_2.png) [@cvanaret](https://discourse.julialang.org/u/cvanaret)\
**Post date:** [December 5, 2019, 11:00am UTC](https://discourse.julialang.org/t/modelingtoolkit-variables-in-an-expression-and-expression-simplification/31894/3 "2019-12-05T11:00:34Z")

</div>

Got it, thanks Chris!  
There’s a `simplified_expr`, but it doesn’t do the trick.

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [December 5, 2019, 11:07am UTC](https://discourse.julialang.org/t/modelingtoolkit-variables-in-an-expression-and-expression-simplification/31894/4 "2019-12-05T11:07:09Z")

</div>

> [@cvanaret](#):
>
> There’s a `simplified_expr` , but it doesn’t do the trick.

no, that’s different. That for producing Julia `Expr`s.

`simplify_constants`

---

<div class="post-metadata">

**Author:** ![cvanaret](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cvanaret/32/11594_2.png) [@cvanaret](https://discourse.julialang.org/u/cvanaret)\
**Post date:** [December 5, 2019, 12:03pm UTC](https://discourse.julialang.org/t/modelingtoolkit-variables-in-an-expression-and-expression-simplification/31894/5 "2019-12-05T12:03:25Z")

</div>

Yeah, this one simplifies the multiplicative constants (it returns `x - 0`).

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [December 5, 2019, 1:32pm UTC](https://discourse.julialang.org/t/modelingtoolkit-variables-in-an-expression-and-expression-simplification/31894/6 "2019-12-05T13:32:42Z")

</div>

Yeah, it needs to be better. FWIW, fixing the case you mentioned there is easy, so it might be a nice thing to add. But in general, we need a rewrite system

---

<div class="post-metadata">

**Author:** ![cvanaret](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cvanaret/32/11594_2.png) [@cvanaret](https://discourse.julialang.org/u/cvanaret)\
**Post date:** [December 17, 2019, 12:26pm UTC](https://discourse.julialang.org/t/modelingtoolkit-variables-in-an-expression-and-expression-simplification/31894/7 "2019-12-17T12:26:43Z")

</div>

Hi,

I just found out that

> ModelingToolkit.vars

does the trick. It returns a Set of all variables that appear in an expression.

Charlie
