Prev Next sparse_hes_xam.m Headings

@(@\newcommand{\B}[1]{ {\bf #1} } \newcommand{\R}[1]{ {\rm #1} }@)@
Octave: Hessian Sparsity Patterns: Example and Test
function ok = sparse_hes_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);
     %
     % ay[i] = j * ax[j] * ax[i]
     % 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
          aj = m_cppad.a_double(j);
          ax_j = ax(j);
          ax_i = ax(i);
          ay(i) = aj * ax_j * ax_i;
     end
     %
     % define af corresponding to f(x)
     af = m_cppad.a_fun(ax, ay);
     %
     % Set select_d (domain) to all true,
     % initial select_r (range) to all false
     % initialize r to all zeros
     select_d = m_cppad.vec_bool(n);
     select_r = m_cppad.vec_bool(n);
     r = m_cppad.vec_double(n);
     for i = [ 0 :(n-1) ]
          select_d(i) = true;
          select_r(i) = false;
          r(i) = 0.0;
     end
     %
     % only select component n-1 of the range function
     % f_0 (x) = (n-1) * x_{n-1} * x_0
     select_r(0) = true;
     r(0) = 1.0;
     %
     % sparisty pattern for Hessian
     pattern = m_cppad.sparse_rc();
     af.for_hes_sparsity(select_d, select_r, pattern);
     %
     % compute all possibly non-zero entries in Hessian
     % (should only compute lower triangle becuase matrix is symmetric)
     subset = m_cppad.sparse_rcv(pattern);
     %
     % work space used to save time for multiple calls
     work = m_cppad.sparse_hes_work();
     %
     af.sparse_hes(subset, x, r, pattern, work);
     %
     % check that result is sparsity pattern for Hessian of f_0 (x)
     ok = ok && subset.nnz() == 2 ;
     row = subset.row();
     col = subset.col();
     val = subset.val();
     for k = [ 0 :(2-1) ]
          i = row(k);
          j = col(k);
          v = val(k);
          if( i <= j  )
               ok = ok && i == 0;
               ok = ok && j == n-1;
          end
          if( i >= j  )
               ok = ok && i == n-1;
               ok = ok && j == 0;
          end
          ok = ok && v == n-1;
     end
     %
     return;
end

Input File: build/lib/example/octave/sparse_hes_xam.m