atomic_three_jac_sparsity

View page source

Atomic Function Jacobian Sparsity Patterns

Syntax

ok = afun . jac_sparsity (
      parameter_x , type_x , dependency , select_x , select_y , pattern_out
)

Prototype

template <class Base>
bool atomic_three<Base>::jac_sparsity(
   const vector<Base>&                     parameter_x  ,
   const vector<ad_type_enum>&             type_x       ,
   bool                                    dependency   ,
   const vector<bool>&                     select_x     ,
   const vector<bool>&                     select_y     ,
   sparse_rc< vector<size_t> >&            pattern_out  )

Implementation

This function must be defined if afun is used to define an ADFun object f , and Jacobian sparsity patterns are computed for f . (Computing Hessian sparsity patterns and optimizing requires Jacobian sparsity patterns.)

Base

See Base .

parameter_x

See parameter_x .

type_x

See type_x .

dependency

If dependency is true, then pattern_out is a Dependency Pattern for this atomic function. Otherwise it is a Sparsity Pattern for the derivative of the atomic function.

select_x

This argument has size equal to the number of arguments to this atomic function; i.e. the size of ax . It specifies which domain components are included in the calculation of pattern_out . If select_x [ j ] is false, then there will be no indices k such that

pattern_out . col ()[ k ] == j

.

select_y

This argument has size equal to the number of results to this atomic function; i.e. the size of ay . It specifies which range components are included in the calculation of pattern_out . If select_y [ i ] is false, then there will be no indices k such that

pattern_out . row ()[ k ] == i

.

pattern_out

This input value of pattern_out does not matter. Upon return it is a dependency or sparsity pattern for the Jacobian of \(g(x)\), the function corresponding to afun ; dependency above. To be specific, there are non-negative indices i , j , k such that

      pattern_out . row ()[ k ] == i
      pattern_out . col ()[ k ] == j

if and only if select_x [ j ] is true, select_y [ j ] is true, and \(g_i(x)\) depends on the value of \(x_j\) (and the partial of \(g_i(x)\) with respect to \(x_j\) is possibly non-zero).

ok

If this calculation succeeded, ok is true. Otherwise it is false.

Examples

The file atomic_three_jac_sparsity.cpp contains an example and test that uses this routine.