Prev Next sparse_rcv.cpp Headings

@(@\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}} }@)@
sparse_rcv: Example and Test
# include <cppad/utility/sparse_rcv.hpp>
# include <vector>

bool sparse_rcv(void)
{     bool ok = true;
     typedef std::vector<size_t> SizeVector;
     typedef std::vector<double> ValueVector;

     // sparsity pattern for a 5 by 5 diagonal matrix
     size_t nr  = 5;
     size_t nc  = 5;
     size_t nnz = 5;
     CppAD::sparse_rc<SizeVector> pattern(nr, nc, nnz);
     for(size_t k = 0; k < nnz; k++)
     {     size_t r = nnz - k - 1; // reverse or column-major order
          size_t c = nnz - k - 1;
          pattern.set(k, r, c);
     }

     // sparse matrix
     CppAD::sparse_rcv<SizeVector, ValueVector> matrix(pattern);
     for(size_t k = 0; k < nnz; k++)
     {     double v = double(k);
          matrix.set(nnz - k - 1, v);
     }

     // row, column, and value vectors
     const SizeVector&  row( matrix.row() );
     const SizeVector&  col( matrix.row() );
     const ValueVector& val( matrix.val() );
     SizeVector col_major = matrix.col_major();

     // check row,  column, and value
     for(size_t k = 0; k < nnz; k++)
     {     ok &= row[ col_major[k] ] == k;
          ok &= col[ col_major[k] ] == k;
          ok &= val[ col_major[k] ] == double(k);
     }

     // create an empty matrix
     CppAD::sparse_rcv<SizeVector, ValueVector> target;
     ok &= target.nnz() == 0;
     ok &= target.nr()  == 0;
     ok &= target.nc()  == 0;

     // now use it as the target for an assignment statement
     target = matrix;
     ok    &= target.nr()  == matrix.nr();
     ok    &= target.nc()  == matrix.nc();
     ok    &= target.nnz() == matrix.nnz();
     for(size_t k = 0; k < nnz; k++)
     {     ok &= target.row()[k] == row[k];
          ok &= target.col()[k] == col[k];
          ok &= target.val()[k] == val[k];
     }
     return ok;
}

Input File: example/utility/sparse_rcv.cpp