# Convert Symbolic expression to a function

**URL:** <https://discourse.julialang.org/t/convert-symbolic-expression-to-a-function/80225>\
**Category:** General Usage\
**Tags:** symbolics, symbolic-utils\
**Created:** [April 28, 2022, 6:55pm UTC](https://discourse.julialang.org/t/convert-symbolic-expression-to-a-function/80225 "2022-04-28T18:55:07Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jack](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jack/32/17406_2.png) [@Jack](https://discourse.julialang.org/u/Jack)\
**Post date:** [April 28, 2022, 6:55pm UTC](https://discourse.julialang.org/t/convert-symbolic-expression-to-a-function/80225/1 "2022-04-28T18:55:07Z")

</div>

Greetings. I am trying to convert the a very simple example of the following

```julia
using SymbolicUtils
@syms x
f = 2*x

```

the `f` into a function that would evaluate at a concrete number of x, so ideally it’s a function that has

```julia
f(2) = 4

```

do anyone have experience doing it? thank you.

---

<div class="post-metadata">

**Author:** ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)\
**Post date:** [April 28, 2022, 6:56pm UTC](https://discourse.julialang.org/t/convert-symbolic-expression-to-a-function/80225/2 "2022-04-28T18:56:32Z")

</div>

Check out `Symbolics.build_function`

---

<div class="post-metadata">

**Author:** ![moeddel](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/moeddel/32/18641_2.png) [@moeddel](https://discourse.julialang.org/u/moeddel)\
**Post date:** [April 28, 2022, 7:10pm UTC](https://discourse.julialang.org/t/convert-symbolic-expression-to-a-function/80225/3 "2022-04-28T19:10:34Z")

</div>

If your expressions are polynomials you can check out [MultivariatePolynomials](https://github.com/JuliaAlgebra/MultivariatePolynomials.jl).

---

<div class="post-metadata">

**Author:** ![Jack](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jack/32/17406_2.png) [@Jack](https://discourse.julialang.org/u/Jack)\
**Post date:** [April 29, 2022, 6:18am UTC](https://discourse.julialang.org/t/convert-symbolic-expression-to-a-function/80225/4 "2022-04-29T06:18:11Z")

</div>

At the end some meta programming helped.

```julia
eqn_str = "2*x1"
expression = Meta.parse(eqn_str)
eqn_f = @eval begin
    f(x1) = $expression
end

```

and we would have  
`eon_f(4)` equals 8.

---

<div class="post-metadata">

**Author:** ![fgerick](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fgerick/32/13228_2.png) [@fgerick](https://discourse.julialang.org/u/fgerick)\
**Post date:** [April 29, 2022, 8:34am UTC](https://discourse.julialang.org/t/convert-symbolic-expression-to-a-function/80225/5 "2022-04-29T08:34:17Z")

</div>

Have a look at this talk: [JuliaCon 2019 | Keynote: Professor Steven G. Johnson](https://youtu.be/mSgXWpvQEHE) It should convince you why the solution that you suggest is not a good idea 🙂 Instead I recommend you to use what was suggested:

> [@baggepinnen](#):
>
> Check out `Symbolics.build_function`

it does exactly what you want:

```julia
julia> using Symbolics

julia> @syms x
(x,)

julia> expression = 2*x
2x

julia> fexp=build_function(expression,x)
:(function (x,)
      #= /Users/felixger/.julia/packages/SymbolicUtils/kZD5O/src/code.jl:282 =#
      #= /Users/felixger/.julia/packages/SymbolicUtils/kZD5O/src/code.jl:283 =#
      (*)(2, x)
  end)

julia> f = eval(fexp)
#1 (generic function with 1 method)

julia> f(2)
4

```

---

<div class="post-metadata">

**Author:** ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)\
**Post date:** [April 29, 2022, 8:57am UTC](https://discourse.julialang.org/t/convert-symbolic-expression-to-a-function/80225/6 "2022-04-29T08:57:13Z")

</div>

The call to `eval` can be avoided with

```julia
julia> f=build_function(expression,x, expression=Val{false})
RuntimeGeneratedFunction(#=in Symbolics=#, #=using Symbolics=#, :((x,)->begin
          #= /home/fredrikb/.julia/packages/SymbolicUtils/v2ZkM/src/code.jl:349 =#
          #= /home/fredrikb/.julia/packages/SymbolicUtils/v2ZkM/src/code.jl:350 =#
          #= /home/fredrikb/.julia/packages/SymbolicUtils/v2ZkM/src/code.jl:351 =#
          (*)(2, x)
      end))

julia> f(2)
4

```
