类似func(a,x)=a[1]*x^2+a[2]x这种函数,有方便的包得到它的导数函数吗?(比如对这个函数就应该得到 2a[1]*x)在Matlab中很方便,diff(func(a,x), x)就行。我试了SymEngine.jl好像不行。
1 个赞
using SymEngine
func(a, x) = a[1] * x ^ 2 + a[2]* x
@vars x
a = symbols.(["a_1", "a_2"])
diff(func(a, x), x) # a_2 + 2*x*a_1
1 个赞
多谢多谢,请问怎么把得到的结果转成可计算的表达式呢?结果是SymEngine.Base类型的。最好再变成函数类型:g(a,x)=a[1]+2*a[2]*x
如果不需要具体的导函数表达式而只需要算出一个值的话,实际上利用各种自动微分工具就可以做到了,比如说
julia> using Zygote
julia> f(a, x) = a[1] * x ^ 2 + a[2]* x
f (generic function with 1 method)
julia> gradient(f, [2, 4], 3)
([9.0, 3.0], 16.0)
julia> df(a, x) = gradient(f, a, x)
df (generic function with 1 method)
julia> df([2, 4], 3)
([9.0, 3.0], 16.0)
julia> using SymEngine
julia> func(a, x) = a[1] * x ^ 2 + a[2]* x
func (generic function with 1 method)
julia> @vars x
(x,)
julia> a = symbols.(["a_1", "a_2"])
2-element Vector{Basic}:
a_1
a_2
julia> diff(func(a, x), x) # a_2 + 2*x*a_1
a_2 + 2*x*a_1
julia> df = lambdify(diff(func(a, x), x))
#36 (generic function with 1 method)
julia> df(2, 4, 3)
16
2 个赞
多谢多谢,第二个正是我想要的