Speed
In some cases, the user knows how to compute derivatives of a function
y = f(x) \; {\rm where} \; f : \B{R}^n \rightarrow \B{R}^m
more efficiently than by coding it using
AD<Base>atomic_base
operations
and letting CppAD do the rest.
In this case
atomic_base<Base>
can use
the user code for
f(x)
, and its derivatives,
as
AD<Base>
atomic operations.
Reduce Memory
If the function
f(x)
is used often,
using an atomic version of
f(x)
remove the need for repeated
copies of the corresponding
AD<Base>
operations.
Virtual Functions
User defined derivatives are implemented by defining the
following virtual functions in the
atomic_base
class:
forward
,
reverse
,
for_sparse_jac
,
rev_sparse_jac
, and
rev_sparse_hes
.
These virtual functions have a default implementation
that returns
ok == false
.
The forward function,
for the case
q == 0
, must be implemented.
Otherwise, only those functions
required by the your calculations need to be implemented.
For example,
forward
for the case
q == 2
can just return
ok == false
unless you require
forward mode calculation of second derivatives.