DFunctions
The DFunction
type stores the first and second derivatives of a given input function which is not only convenient but can enhance performance significantly. At this point, the DFunction
type requires the given function to be out-of-place, however, this will likely be extended to in-place functions in the future.
Once constructed, a DFunction
object D
can be evaluated at x
via the syntax EvalF(D,x)
, EvaldF(D,x)
and EvalddF(D,x)
.
In order to construct the appropriate derivatives, the input and output dimensions of a given function F
are assessed and the appropriate operators (GetGrad(), GetJac()
and so on) called.
By default, DFunction()
attempts to construct the derivatives symbolically, however, this can be specified via the ADmode
keyword:
using DerivableFunctions
D = DFunction(x->[x^7 - sin(x), tanh(x)]; ADmode=Val(:ReverseDiff))
EvalF(D, 5.), EvaldF(D, 5.), EvalddF(D, 5.)
using Symbolics; @variables y
EvalF(D, y), EvaldF(D, y), EvalddF(D, y)
(Symbolics.Num[y^7 - sin(y), tanh(y)], Symbolics.Num[7(y^6) - cos(y); 1 - (tanh(y)^2)], Symbolics.Num[42(y^5) + sin(y); -2(1 - (tanh(y)^2))*tanh(y)])