有没有包可以得到一个函数的导数?

类似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 个赞

多谢多谢,第二个正是我想要的