Prev | Next |
n_color = f.sparse_jac_for(
group_max, x, subset, pattern, coloring, work
)
n_color = f.sparse_jac_rev(
x, subset, pattern, coloring, work
)
f
.
Here
n
is the domain
size,
and
m
is the range
size, or
f
.
The syntax above takes advantage of sparsity when computing the Jacobian
@[@
J(x) = F^{(1)} (x)
@]@
In the sparse case, this should be faster and take less memory than
Jacobian
.
We use the notation @(@
J_{i,j} (x)
@)@ to denote the partial of
@(@
F_i (x)
@)@ with respect to @(@
x_j
@)@.
SizeVector
is a SimpleVector
class with
elements of type
size_t
.
BaseVector
is a SimpleVector
class with
elements of type
size_t
.
ADFun<Base> f
Note that the Taylor coefficients stored in
f
are affected
by this operation; see
uses forward
below.
size_t group_max
and must be greater than zero.
It specifies the maximum number of colors to group during
a single forward sweep.
If a single color is in a group,
a single direction for of first order forward mode
forward_one
is used for each color.
If multiple colors are in a group,
the multiple direction for of first order forward mode
forward_dir
is used with one direction for each color.
This uses separate memory for each direction (more memory),
but my be significantly faster.
const BaseVector& x
and its size is
n
.
It specifies the point at which to evaluate the Jacobian
@(@
J(x)
@)@.
sparse_rcv<SizeVector, BaseVector>& subset
Its row size is
subset.nr() == m
,
and its column size is
subset.nc() == n
.
It specifies which elements of the Jacobian are computed.
The input value of its value vector
subset.val()
does not matter.
Upon return it contains the value of the corresponding elements
of the Jacobian.
All of the row, column pairs in
subset
must also appear in
pattern
; i.e., they must be possibly non-zero.
const sparse_rc<SizeVector>& pattern
Its row size is
pattern.nr() == m
,
and its column size is
pattern.nc() == n
.
It is a sparsity pattern for the Jacobian @(@
J(x)
@)@.
This argument is not used (and need not satisfy any conditions),
when work
is non-empty.
const std::string& coloring
This value only matters when work is empty; i.e.,
after the
work
constructor or
work.clear()
.
coloring
to colpack
.
This uses a general purpose coloring algorithm that is part of Colpack.
sparse_jac_work& work
We refer to its initial value,
and its value after
work.clear()
, as empty.
If it is empty, information is stored in
work
.
This can be used to reduce computation when
a future call is for the same object
f
,
the same member function sparse_jac_for
or sparse_jac_rev
,
and the same subset of the Jacobian.
In fact, it can be used with a different
f
and a different
subset
provided that Jacobian sparsity pattern
for
f
and the sparsity pattern in
subset
are the same.
If any of these values change, use
work.clear()
to
empty this structure.
n_color
has prototype
size_t n_color
If sparse_jac_for
(sparse_jac_rev
) is used,
n_color
is the number of first order forward directions
used to compute the requested Jacobian values.
It is also the number of colors determined by the coloring method
mentioned above.
This is proportional to the total computational work,
not counting the zero order forward sweep,
or combining multiple columns (rows) into a single sweep.
Note that if
group_max == 1
,
or if we are using sparse_jac_rev
,
n_color
is equal to the number of sweeps.
f
contains the corresponding
Taylor coefficients
.
After a call to sparse_jac_forward
or sparse_jac_rev
,
the zero order coefficients correspond to
f.Forward(0, x)
All the other forward mode coefficients are unspecified.
sparse_jac_for
and sparse_jac_rev
.
They return true
, if they succeed, and false
otherwise.