\(\newcommand{\W}[1]{ \; #1 \; }\) \(\newcommand{\R}[1]{ {\rm #1} }\) \(\newcommand{\B}[1]{ {\bf #1} }\) \(\newcommand{\D}[2]{ \frac{\partial #1}{\partial #2} }\) \(\newcommand{\DD}[3]{ \frac{\partial^2 #1}{\partial #2 \partial #3} }\) \(\newcommand{\Dpow}[2]{ \frac{\partial^{#1}}{\partial {#2}^{#1}} }\) \(\newcommand{\dpow}[2]{ \frac{ {\rm d}^{#1}}{{\rm d}\, {#2}^{#1}} }\)
atomic_two¶
View page sourceDefining Atomic Functions: Second Generation¶
Deprecated 2019-01-01¶
Using the atomic_base
class has been deprecated.
Use atomic_three instead.
Syntax¶
forward
( p , q , vx , vy , tx , ty )reverse
( q , tx , ty , px , py )for_sparse_jac
( q , r , s , x )rev_sparse_jac
( q , r , s , x )for_sparse_hes
( vx , r , s , h , x )rev_sparse_hes
( vx , s , t , q , r , u , v , x )Base
>:: clear ()See Also¶
Purpose¶
Speed¶
In some cases, the user knows how to compute derivatives of a function
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.
Examples¶
See atomic_two_example .
Contents¶
Name |
Title |
---|---|
atomic_two_ctor |
|
atomic_two_option |
|
atomic_two_afun |
|
atomic_two_forward |
|
atomic_two_reverse |
|
atomic_two_for_sparse_jac |
|
atomic_two_rev_sparse_jac |
|
atomic_two_for_sparse_hes |
|
atomic_two_rev_sparse_hes |
|
atomic_two_clear |