\(\newcommand{\W}[1]{ \; #1 \; }\) \(\newcommand{\R}[1]{ {\rm #1} }\) \(\newcommand{\B}[1]{ {\bf #1} }\) \(\newcommand{\D}[2]{ \frac{\partial #1}{\partial #2} }\) \(\newcommand{\DD}[3]{ \frac{\partial^2 #1}{\partial #2 \partial #3} }\) \(\newcommand{\Dpow}[2]{ \frac{\partial^{#1}}{\partial {#2}^{#1}} }\) \(\newcommand{\dpow}[2]{ \frac{ {\rm d}^{#1}}{{\rm d}\, {#2}^{#1}} }\)
link_sparse_jacobian¶
View page sourceSpeed Testing Sparse Jacobians¶
Prototype¶
extern bool link_sparse_jacobian(
const std::string& job ,
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
for some \(k\) between zero and K = row . size
() -1
.
All the other terms of the Jacobian are zero.
Sparsity Pattern¶
The combination of row and col determine the sparsity pattern for the Jacobian that is differentiated. The calculation of this sparsity pattern, if necessary to compute the Jacobian, is intended to be part of the timing for this test.
job¶
See the standard link specifications for job .
size¶
See the standard link specifications for size . In addition, size is referred to as \(n\) below, is the dimension of the domain space for \(f(x)\).
repeat¶
See the standard link specifications for repeat .
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\),
n_color¶
The input value of n_color does not matter. On output,
it has value zero or 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
.
If this routine returns an non-zero n_color for
any job value, the non-zero value will be reported for this test.
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)\).