extern bool link_sparse_jacobian(
size_t size ,
size_t repeat ,
size_t m ,
const CppAD::vector<size_t>& row ,
const CppAD::vector<size_t>& col ,
CppAD::vector<double>& x ,
CppAD::vector<double>& jacobian ,
size_t& n_color
);
Method
Given a range space dimension
m
the row index vector @(@
row
@)@, and column index vector @(@
col
@)@,
a corresponding function @(@
f : \B{R}^n \rightarrow \B{R}^m
@)@
is defined by sparse_jac_fun
.
The non-zero entries in the Jacobian of this function have the form
@[@
\D{f[row[k]]}{x[col[k]]]}
@]@
for some @(@
k
@)@ between zero and
K = row.size()-1
.
All the other terms of the Jacobian are zero.
size
The argument
size
, referred to as @(@
n
@)@ below,
is the dimension of the domain space for @(@
f(x)
@)@.
repeat
The argument
repeat
is the number of times
to repeat the test
(with a different value for
x
corresponding to
each repetition).
m
Is the dimension of the range space for the function @(@
f(x)
@)@.
row
The size of the vector
row
defines the value @(@
K
@)@.
The input value of its elements does not matter.
On output,
all the elements of
row
are between zero and @(@
m-1
@)@.
col
The argument
col
is a vector with size @(@
K
@)@.
The input value of its elements does not matter.
On output,
all the elements of
col
are between zero and @(@
n-1
@)@.
Row Major
The indices
row
and
col
are in row major order; i.e.,
for each
k < row.size()-2 row[k] <= row[k+1]
and if
row[k] == row[k+1]
then
col[k] < col[k+1]
x
The argument
x
has prototype
CppAD::vector<double>& x
and its size is @(@
n
@)@; i.e.,
x.size() == size
.
The input value of the elements of
x
does not matter.
On output, it has been set to the
argument value for which the function,
or its derivative, is being evaluated and placed in
jacobian
.
The value of this vector need not change with each repetition.
jacobian
The argument
jacobian
has prototype
CppAD::vector<double>& jacobian
and its size is
K
.
The input value of its elements does not matter.
The output value of its elements is the Jacobian of the function @(@
f(x)
@)@.
To be more specific, for
@(@
k = 0 , \ldots , K - 1
@)@,
@[@
\D{f[ \R{row}[k] ]}{x[ \R{col}[k] ]} (x) = \R{jacobian} [k]
@]@
n_color
The input value of
n_color
does not matter. On output,
it is the value n_sweep
corresponding
to the evaluation of
jacobian
.
This is also the number of colors corresponding to the
coloring method
,
which can be set to colpack
,
and is otherwise cppad.
double
In the case where
package
is double,
only the first @(@
m
@)@
elements of
jacobian
are used and they are set to
the value of @(@
f(x)
@)@.
Input File: speed/src/link_sparse_jacobian.cpp