我想用 Symbolics.jl
做一些符号运算,然后把得到的表达式转换为函数,再后续使用。不过我用 build_function
生成函数后,速度只有直接定义函数的四分之一。请问这一点如何优化?谢谢大家!
下面是例子:
using Symbolics
using BenchmarkTools
@variables x y
f(x,y) = x^2 + sin(x+y)
D = Differential(x)
expr = expand_derivatives(D(f(x,y))) # 输出:2x + cos(x + y)
# 由表达式生成函数
f_expr = build_function(expr, x, y, expression = Val{false})
# 直接定义函数
f_defn(x, y) = 2x + cos(x + y)
# benchmark
@btime for x in rand(100), y in rand(100)
f_expr(x, y)
end
# 输出:239.600 μs (30101 allocations: 557.12 KiB)
@btime for x in rand(100), y in rand(100)
f_defn(x, y)
end
# 输出:60.300 μs (101 allocations: 88.38 KiB)