\(\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}} }\)
RevSparseHes¶
View page sourceHessian Sparsity Pattern: Reverse Mode¶
Syntax¶
RevSparseHes
( q , s )RevSparseHes
( q , s , transpose )Purpose¶
We use \(F : \B{R}^n \rightarrow \B{R}^m\) to denote the AD Function corresponding to f . For a fixed matrix \(R \in \B{R}^{n \times q}\) and a fixed vector \(S \in \B{R}^{1 \times m}\), we define
Given a
Sparsity Pattern
for the matrix \(R\) and the vector \(S\),
RevSparseHes
returns a sparsity pattern for the \(H(x)\).
f¶
The object f has prototype
const ADFun
< Base > f
x¶
If the operation sequence in f is Independent of the independent variables in \(x \in \B{R}^n\), the sparsity pattern is valid for all values of (even if it has CondExp or VecAD operations).
q¶
The argument q has prototype
size_t
q
It specifies the number of columns in \(R \in \B{R}^{n \times q}\) and the number of rows in \(H(x) \in \B{R}^{q \times n}\). It must be the same value as in the previous ForSparseJac call
f .
ForSparseJac
( q , r , r_transpose )
Note that if r_transpose is true, r in the call above corresponding to \(R^\R{T} \in \B{R}^{q \times n}\)
transpose¶
The argument transpose has prototype
bool
transpose
The default value false
is used when transpose is not present.
r¶
The matrix \(R\) is specified by the previous call
f .
ForSparseJac
( q , r , transpose )
see r . The type of the elements of SetVector must be the same as the type of the elements of r .
s¶
The argument s has prototype
const
SetVector & s
(see SetVector below)
If it has elements of type bool
,
its size is \(m\).
If it has elements of type std::set<size_t>
,
its size is one and all the elements of s [0]
are between zero and \(m - 1\).
It specifies a
Sparsity Pattern
for the vector S .
h¶
The result h has prototype
SetVector & h
(see SetVector below).
transpose false¶
If h has elements of type bool
,
its size is \(q * n\).
If it has elements of type std::set<size_t>
,
its size is \(q\) and all the set elements are between
zero and n -1
inclusive.
It specifies a
Sparsity Pattern
for the matrix \(H(x)\).
transpose true¶
If h has elements of type bool
,
its size is \(n * q\).
If it has elements of type std::set<size_t>
,
its size is \(n\) and all the set elements are between
zero and q -1
inclusive.
It specifies a
Sparsity Pattern
for the matrix \(H(x)^\R{T}\).
SetVector¶
The type SetVector must be a SimpleVector class with
elements of type
bool
or std::set<size_t>
;
see Sparsity Pattern for a discussion
of the difference.
The type of the elements of
SetVector must be the
same as the type of the elements of r .
Entire Sparsity Pattern¶
Suppose that \(q = n\) and \(R \in \B{R}^{n \times n}\) is the \(n \times n\) identity matrix. Further suppose that the \(S\) is the k-th Elementary Vector ; i.e.
In this case, the corresponding value h is a sparsity pattern for the Hessian matrix \(F_k^{(2)} (x) \in \B{R}^{n \times n}\).
Example¶
The file
rev_sparse_hes.cpp
contains an example and test of this operation.
The file
sparsity_sub.cpp
contains an example and test of using RevSparseHes
to compute the sparsity pattern for a subset of the Hessian.