Purpose
We use @(@
F : \B{R}^n \rightarrow \B{R}^m
@)@ to denote the
AD function
corresponding to
the operation sequence stored in
f
.
Fix @(@
R \in \B{R}^{\ell \times m}
@)@ and define the function
@[@
J(x) = R * F^{(1)} ( x )
@]@
Given the sparsity pattern
for @(@
R
@)@,
rev_jac_sparsity computes a sparsity pattern for @(@
J(x)
@)@.
x
Note that the sparsity pattern @(@
J(x)
@)@ corresponds to the
operation sequence stored in
f
and does not depend on
the argument
x
.
(The operation sequence may contain
CondExp
and VecAD
operations.)
pattern_in
The argument
pattern_in
has prototype
const sparse_rc<SizeVector>& pattern_in
see sparse_rc
.
If
transpose
it is false (true),
pattern_in
is a sparsity pattern for @(@
R
@)@ (@(@
R^\R{T}
@)@).
internal_bool
If this is true, calculations are done with sets represented by a vector
of boolean values. Otherwise, a vector of sets of integers is used.
pattern_out
This argument has prototype
sparse_rc<SizeVector>& pattern_out
This input value of
pattern_out
does not matter.
If
transpose
it is false (true),
upon return
pattern_out
is a sparsity pattern for
@(@
J(x)
@)@ (@(@
J(x)^\R{T}
@)@).
If
dependency
is true,
pattern_out
is a
dependency pattern
instead of sparsity pattern.
Sparsity for Entire Jacobian
Suppose that
@(@
R
@)@ is the @(@
m \times m
@)@ identity matrix.
In this case,
pattern_out
is a sparsity pattern for
@(@
F^{(1)} ( x )
@)@ ( @(@
F^{(1)} (x)^\R{T}
@)@ )
if
transpose
is false (true).
Example
The file
rev_jac_sparsity.cpp
contains an example and test of this operation.
It returns true if it succeeds and false otherwise.
Input File: cppad/core/rev_jac_sparsity.hpp