Prev Next Index-> contents reference index search external Up-> CppAD ADFun sparsity_pattern rev_hes_sparsity CppAD-> Install Introduction AD ADFun preprocessor multi_thread utility ipopt_solve Example speed Appendix ADFun-> record_adfun drivers Forward Reverse sparsity_pattern sparse_derivative optimize abs_normal FunCheck check_for_nan sparsity_pattern-> for_jac_sparsity ForSparseJac rev_jac_sparsity RevSparseJac rev_hes_sparsity RevSparseHes for_hes_sparsity ForSparseHes dependency.cpp rc_sparsity.cpp subgraph_sparsity rev_hes_sparsity-> rev_hes_sparsity.cpp Headings-> Syntax Purpose x BoolVector SizeVector f R select_range transpose internal_bool pattern_out Sparsity for Entire Hessian Example

Reverse Mode Hessian Sparsity Patterns

Syntax
f.rev_hes_sparsity(

select_rangetransposeinternal_boolpattern_out
)

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}^{n \times \ell}$, $s \in \B{R}^m$ and define the function $$H(x) = ( s^\R{T} F )^{(2)} ( x ) R$$ Given a sparsity pattern for $R$ and for the vector $s$, rev_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 .

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.

f
The object f has prototype
Basef

R
The sparsity pattern for the matrix $R$ is specified by pattern_in in the previous call

f.for_jac_sparsity(

pattern_intransposedependencyinternal_boolpattern_out
)

select_range
The argument select_range has prototype
const
BoolVectorselect_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.

transpose
This argument has prototype
bool
transpose
See pattern_out below.

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. This must be the same as in the previous call to f.for_jac_sparsity .

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 $H(x)$ ($H(x)^\R{T}$).

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 )$.

Example
The file rev_hes_sparsity.cpp contains an example and test of this operation. It returns true if it succeeds and false otherwise.