\(\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}} }\)
subgraph_reverse¶
View page sourceReverse Mode Using Subgraphs¶
Syntax¶
subgraph_reverse
( select_domain )subgraph_reverse
( q , ell , col , dw )clear_subgraph
()Purpose¶
We use \(F : \B{R}^n \rightarrow \B{R}^m\) to denote the AD Function corresponding to f . Reverse mode computes the derivative of the Forward mode Taylor coefficients with respect to the domain variable \(x\).
Notation¶
We use the reverse mode Notation with the following change: the vector w^(k) is defined
BaseVector¶
The type BaseVector must be a SimpleVector class with elements of type Base . The routine CheckSimpleVector will generate an error message if this is not the case.
BoolVector¶
The type BoolVector is a SimpleVector class with
elements of type
bool
.
SizeVector¶
The type SizeVector is a SimpleVector class with
elements of type
size_t
.
select_domain¶
The argument select_domain has prototype
const
BoolVector & select_domain
It has size \(n\) and specifies which independent variables
to include in future subgraph_reverse
calculations.
If select_domain [ j ] is false,
it is assumed that \(u^{(k)}_j = 0\) for \(k > 0\); i.e.,
the j-th component of the Taylor coefficient for \(x\),
with order greater that zero, are zero; see
u^(k) .
q¶
The argument q has prototype
size_t
q
and specifies the number of Taylor coefficient orders to be differentiated.
ell¶
The argument ell has prototype
size_t
ell
and specifies the dependent variable index that we are computing the derivatives for; i.e. \(\ell\). This index can only be used once per, and after, a call that selects the independent variables using select_domain .
col¶
This argument col has prototype
SizeVector col
The input size and value of its elements do not matter.
The col . resize
member function is used to change its size
to the number the number of possible non-zero derivative components.
For each c ,
true
and the derivative with respect to the j-th independent variable is possibly non-zero where j = col [ c ] .
dw¶
The argument dw has prototype
Vector dw
Its input size and value does not matter. Upon return, it is a vector with size \(n \times q\). For \(c = 0 , \ldots , %col%.size()-1\), and \(k = 0, \ldots , q-1\),
is the derivative of the specified Taylor coefficients w.r.t the j-th independent variable where j = col [ c ] . Note that this corresponds to the reverse_any convention when w has size m * q .
clear_subgraph¶
Calling this routine will free memory that holds information between calls to subgraph calculations so that it does not need to be recalculated. (This memory is automatically freed when f is deleted.) You cannot free this memory between calls that select the domain and corresponding calls that compute reverse mode derivatives. Some of this information is also used by subgraph_sparsity .
Example¶
The file subgraph_reverse.cpp contains an example and test of this operation.