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 a diagonal matrix
D \in \B{R}^{n \times n}
,
a vector
s \in \B{R}^m
and define the function
H(x) = D ( s^\R{T} F )^{(2)} ( x ) D
Given the sparsity for
D
and
s
,
for_hes_sparsity computes a sparsity pattern for
H(x)
.
x
Note that the sparsity pattern
H(x)
corresponds to the
operation sequence stored in
f
and does not depend on
the argument
x
.
select_domain
The argument
select_domain
has prototype
const BoolVector& select_domain
It has size
n
and specifies which components of the diagonal of
D
are non-zero; i.e.,
select_domain[j]
is true
if and only if
D_{j,j}
is possibly non-zero.
select_range
The argument
select_range
has prototype
const BoolVector& select_range
It has size
m
and specifies which components of the vector
s
are non-zero; i.e.,
select_range[i]
is true
if and only if
s_i
is possibly non-zero.
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.
Upon return
pattern_out
is a sparsity pattern for
H(x)
.
Sparsity for Entire Hessian
Suppose that
R
is the
n \times n
identity matrix.
In this case,
pattern_out
is a sparsity pattern for
(s^\R{T} F) F^{(2)} ( x )
.
Algorithm
See Algorithm II in
Computing sparse Hessians with automatic differentiation
by Andrea Walther.
Note that
s
provides the information so that
'dead ends' are not included in the sparsity pattern.
Example
The file for_hes_sparsity.cpp
contains an example and test of this operation.
Input File: include/cppad/core/for_hes_sparsity.hpp