I wonder why is (the title).
My results is like this. Did I use its API correctly?
julia> using Symbolics
julia> @variables p[1:10]
1-element Vector{Symbolics.Arr{Num, 1}}:
p[1:10]
julia> f = bobj(e, p) # some scalar function
-1.5log(7 + p[4]) - 1.5log(5 + p[3]) - 1.5log(3 - p[9]) - 1.5log(3 - p[7]) - 1.5log(7 + p[1]) - 1.5log(8 - p[2]) - 1.5log(9 - p[4]) - 1.5log(9 - p[1]) - 1.5log(3 + p[8]) - 1.5log(6 + p[6]) - 1.5log(6 - p[3]) - 1.5log(6 - p[6]) - 1.5log(5 - p[8]) - 1.5log(5 + p[9]) - 1.5log(3 + p[7]) - 1.5log(5 + p[5]) - 1.5log(5 + p[2]) - 1.5log(5 - p[5]) - 1.5log(6 + p[10]) - 1.5log(6 - p[10]) - 0.08p[1]*p[6] + 0.09p[1]*p[7] + 0.07p[1]*p[8] - 0.02p[10]*p[3] - 0.07p[10]*p[4] - 0.02p[10]*p[5] - 0.03p[2]*p[7] - 0.07p[2]*p[8] - 0.04p[2]*p[9] + 0.02p[3]*p[8] + 0.06p[3]*p[9] + 0.08p[4]*p[9]
julia> Symbolics.jacobian(Symbolics.gradient(f, p), p)
10×10 OffsetArray(::Matrix{Num}, 1:10, 1:10) with eltype Num with indices 1:10×1:10:
1.5 / ((7 + p[1])^2) + 1.5 / ((9 - p[1])^2) 0 … 0 0
0 1.5 / ((8 - p[2])^2) + 1.5 / ((5 + p[2])^2) -0.04 0
0 0 0.06 -0.02
0 0 0.08 -0.07
0 0 0 -0.02
-0.08 0 … 0 0
0.09 -0.03 0 0
0.07 -0.07 0 0
0 -0.04 1.5 / ((3 - p[9])^2) + 1.5 / ((5 + p[9])^2) 0
0 0 0 1.5 / ((6 + p[10])^2) + 1.5 / ((6 - p[10])^2)
julia> Symbolics.hessian(f, p)
10×10 Matrix{Num}:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
(If you need the source code, I’ll append then.) It was already in the post (though a bit lengthy).