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.