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

```
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

```
f(2) = 4
```

do anyone have experience doing it? thank you.

Check out `Symbolics.build_function`

3 Likes

If your expressions are polynomials you can check out MultivariatePolynomials.

Jack
#4
At the end some meta programming helped.

```
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.

Have a look at this talk: JuliaCon 2019 | Keynote: Professor Steven G. Johnson It should convince you why the solution that you suggest is not a good idea Instead I recommend you to use what was suggested:

it does exactly what you want:

```
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
```

2 Likes

The call to `eval`

can be avoided with

```
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
```

2 Likes