I want to compute some Jacobian matrix and get the numerical value.
However, if I registered the user-defined function, I can’t get the result.
For example, before @register
:
using ModelingToolkit
@parameters t
D = Differential(t)
@variables x(t)
f(x) = tanh(x)
julia> A = [f(x)]
1-element Vector{Num}:
tanh(x(t))
julia> jac = Symbolics.jacobian(A, [x])
1×1 Matrix{Num}:
1 - (tanh(x(t))^2)
julia> Symbolics.substitute.(jac, [x => 1])
1×1 Matrix{Num}:
0.41997434161402614
# the value above is what I want to get
After @register
:
julia> @register f(x)
julia> A = [f(x)]
1-element Vector{Num}:
f(x(t))
julia> jac = Symbolics.jacobian(A, [x])
1×1 Matrix{Num}:
Differential(x(t))(f(x(t)))
julia> Symbolics.substitute.(jac, [x => 1])
1×1 Matrix{Num}:
Differential(x(t))(0.7615941559557649)
It seems that Symbolics.expand_derivatives
is ineffective?
julia> Symbolics.expand_derivatives.(jac)
1×1 Matrix{Num}:
Differential(x(t))(f(x(t)))
I didn’t find much information in the documentation, did I miss something?
Or how can I compute the derivative?