I have created a symbolic expression using the SymPy package (https://github.com/jverzani/SymPy.jl). I want to now find the roots of that expression using the Roots package
[UPDATE: The discussion below has been superseded in many cases by the recently introduced lambdify
function. The call lambdify(expr)
creates a julia function that does not call back into SymPy to evaluate, so should be much faster. It should work for most, but certainly not all, expressions.]
It is a two step process:
convert(Function, expr)
will return a function of the free variables, x
, in your case. However, the function values are still symbolic and can't be used with fzeros
. The inputs can be guessed, but the type of the return value is another story. However, coercing to float will work in this case:
fzeros(x -> float(convert(Function, expr)), -10, 10)
(You could also do this with a -> float(replace(expr, x, a))
.)
For this simple example solve(expr)
will also work, but in general, the findroot
function in SymPy
is not exposed, so numeric root solving via SymPy
isn't a workaround without some effort by the end-users.