| Prev | Next |  |  |  |  |  |  |

Reverse Mode Using Subgraphs
Syntax
`f.subgraph_reverse(select_domain)
` `f.subgraph_reverse(q, ell, col, dw)
`
Purpose
We use F : B n → B 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 w i ( k ) = { 1 if k = q -1 and i = ℓ 0 otherwise
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 the calculation. If `select_domain[j]` is false, it is assumed that u j ( k ) = 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. ℓ . 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` , `
select_domain[ col[c] ] == true
col[c+1] >= col[c]
` 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 × q . For c = 0 , … , , and k = 0 , … , q -1 , dw [ j * q + k ] = W ( 1 ) ( x ) j , k 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` .
Example
The file subgraph_reverse.cpp contains an example and test of this operation. It returns true if it succeeds and false otherwise.

Input File: cppad/core/subgraph_reverse.hpp