![]() |
Prev | Next | sparse_evaluate.cpp | Headings |
# include <cppad/speed/sparse_evaluate.hpp>
# include <cppad/speed/uniform_01.hpp>
# include <cppad/cppad.hpp>
bool sparse_evaluate(void)
{ using CppAD::NearEqual;
using CppAD::AD;
bool ok = true;
size_t n = 3;
size_t ell = 5;
CppAD::vector<size_t> i(ell);
CppAD::vector<size_t> j(ell);
CppAD::vector<double> x(n);
CppAD::vector<double> ym(n);
CppAD::vector< AD<double> > X(n);
CppAD::vector< AD<double> > Ym(1);
// choose x
size_t k;
for(k = 0; k < n; k++)
{ x[k] = double(k + 1);
X[k] = x[k];
}
// choose i, j
for(k = 0; k < ell; k++)
{ i[k] = k % n;
j[k] = (ell - k) % n;
}
// declare independent variables
Independent(X);
// evaluate function
size_t m = 0;
CppAD::sparse_evaluate(X, i, j, m, Ym);
// evaluate derivative
m = 1;
CppAD::sparse_evaluate(x, i, j, m, ym);
// use AD to evaluate derivative
CppAD::ADFun<double> F(X, Ym);
CppAD::vector<double> dy(n);
dy = F.Jacobian(x);
for(k = 0; k < n; k++)
ok &= NearEqual(ym[k], dy[k] , 1e-10, 1e-10);
return ok;
}