![]() |
Prev | Next | sparse_jac_pattern_xam.m | Headings |
function ok = sparse_jac_pattern_xam() % % load the Cppad Swig library m_cppad % % initialize return variable ok = true; % ----------------------------------------------------------------------- % number of dependent and independent variables n = 3; % % create the independent variables ax x = m_cppad.vec_double(n); for i = [ 0 :(n -1) ] x(i) = i + 2.0; end ax = m_cppad.independent(x); % % create dependent variables ay with ay[i] = ax[j] % where i = mod(j + 1, n) ay = m_cppad.vec_a_double(n); for j = [ 0 :(n -1) ] i = j+1; if( i >= n ) i = i - n; end ay_i = ax(j); ay(i) = ay_i; end % % define af corresponding to f(x) af = m_cppad.a_fun(ax, ay); % % sparsity pattern for identity matrix pat_in = m_cppad.sparse_rc(); pat_in.resize(n, n, n); for k = [ 0 :(n-1) ] pat_in.put(k, k, k); end % % loop over forward and reverse mode for mode = [ 0 :(2-1) ] pat_out = m_cppad.sparse_rc(); if( mode == 0 ) af.for_jac_sparsity(pat_in, pat_out); end if( mode == 1 ) af.rev_jac_sparsity(pat_in, pat_out); end % % check that result is sparsity pattern for Jacobian ok = ok && n == pat_out.nnz(); col_major = pat_out.col_major(); row = pat_out.row(); col = pat_out.col(); for k = [ 0 :(n-1) ] ell = col_major(k); r = row(ell); c = col(ell); i = c+1; if( i >= n ) i = i - n; end ok = ok && c == k; ok = ok && r == i; end end % return; end