![]() |
Prev | Next |
h = f.RevSparseHes(q, s)
h = f.RevSparseHes(q, s, transpose)
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
\begin{array}{rcl}
H(x)
& = & \partial_x \left[ \partial_u S * F[ x + R * u ] \right]_{u=0}
\\
& = & R^\R{T} * (S * F)^{(2)} ( x )
\\
H(x)^\R{T}
& = & (S * F)^{(2)} ( x ) * R
\end{array}
Given a
sparsity pattern
for the matrix
R
and the vector
S
,
RevSparseHes
returns a sparsity pattern for the
H(x)
.
f
has prototype
const ADFun<Base> f
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
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
has prototype
bool transpose
The default value false
is used when
transpose
is not present.
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
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
has prototype
SetVector& h
(see SetVector
below).
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)
.
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
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
.
k
-th
elementary vector
; i.e.
S_j = \left\{ \begin{array}{ll}
1 & {\rm if} \; j = k
\\
0 & {\rm otherwise}
\end{array} \right.
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}
.
RevSparseHes
to compute the sparsity pattern for a subset of the Hessian.