Prev | Next |
signdet = opt_val_hes(x, y, fun, jac, hes)
BaseVector
must be a
SimpleVector
class.
We use
Base
to refer to the type of the elements of
BaseVector
; i.e.,
BaseVector::value_type
x
has prototype
const BaseVector& x
and its size must be equal to
n
.
It specifies the point at which we evaluating
the Jacobian @(@
V^{(1)} (x)
@)@
(and possibly the Hessian @(@
V^{(2)} (x)
@)@).
y
has prototype
const BaseVector& y
and its size must be equal to
m
.
It must be equal to @(@
Y(x)
@)@; i.e.,
it must solve the implicit equation
@[@
0 = \partial_y F ( x , y)
@]@
fun
is an object of type
Fun
which must support the member functions listed below.
CppAD will may be recording operations of the type
AD<Base>
when these member functions are called.
These member functions must not stop such a recording; e.g.,
they must not call AD<Base>::abort_recording
.
Fun::ad_vector
must be a
SimpleVector
class with elements of type
AD<Base>
; i.e.
Fun::ad_vector::value_type
is equal to
AD<Base>
.
Fun
must support the syntax
ell = fun.ell()
where
ell
has prototype
size_t ell
and is the value of @(@
\ell
@)@; i.e.,
the number of terms in the summation.
One can choose
ell
equal to one, and have
@(@
S(x,y)
@)@ the same as @(@
F(x, y)
@)@.
Each of the functions @(@
S_k (x , y)
@)@,
(in the summation defining @(@
F(x, y)
@)@)
is differentiated separately using AD.
For very large problems, breaking @(@
F(x, y)
@)@ into the sum
of separate simpler functions may reduce the amount of memory necessary for
algorithmic differentiation and there by speed up the process.
Fun
must support the syntax
s_k = fun.s(k, x, y)
The
fun.s
argument
k
has prototype
size_t k
and is between zero and
ell - 1
.
The argument
x
to
fun.s
has prototype
const Fun::ad_vector& x
and its size must be equal to
n
.
The argument
y
to
fun.s
has prototype
const Fun::ad_vector& y
and its size must be equal to
m
.
The
fun.s
result
s_k
has prototype
AD<Base> s_k
and its value must be given by @(@
s_k = S_k ( x , y )
@)@.
Fun
must support the syntax
sy_k = fun.sy(k, x, y)
The argument
k
to
fun.sy
has prototype
size_t k
The argument
x
to
fun.sy
has prototype
const Fun::ad_vector& x
and its size must be equal to
n
.
The argument
y
to
fun.sy
has prototype
const Fun::ad_vector& y
and its size must be equal to
m
.
The
fun.sy
result
sy_k
has prototype
Fun::ad_vector sy_k
its size must be equal to
m
,
and its value must be given by @(@
sy_k = \partial_y S_k ( x , y )
@)@.
jac
has prototype
BaseVector& jac
and has size
n
or zero.
The input values of its elements do not matter.
If it has size zero, it is not affected. Otherwise, on output
it contains the Jacobian of @(@
V (x)
@)@; i.e.,
for @(@
j = 0 , \ldots , n-1
@)@,
@[@
jac[ j ] = V^{(1)} (x)_j
@]@
where
x
is the first argument to opt_val_hes
.
hes
has prototype
BaseVector& hes
and has size
n * n
or zero.
The input values of its elements do not matter.
If it has size zero, it is not affected. Otherwise, on output
it contains the Hessian of @(@
V (x)
@)@; i.e.,
for @(@
i = 0 , \ldots , n-1
@)@, and
@(@
j = 0 , \ldots , n-1
@)@,
@[@
hes[ i * n + j ] = V^{(2)} (x)_{i,j}
@]@
hes
has size zero,
signdet
is not defined.
Otherwise
the return value
signdet
is the sign of the determinant for
@(@
\partial_{yy}^2 F(x , y)
@)@.
If it is zero, then the matrix is singular and
the Hessian is not computed (
hes
is not changed).