|
Prev | Next | a_fun_optimize_xam.cpp | Headings |
# include <cstdio>
# include <string>
# include <cppad/swig/cppad_swig.hpp>
bool a_fun_optimize_xam(void) {
using cppad_swig::a_double;
using cppad_swig::vec_bool;
using cppad_swig::vec_int;
using cppad_swig::vec_double;
using cppad_swig::vec_a_double;
using cppad_swig::a_fun;
using cppad_swig::sparse_rc;
using cppad_swig::sparse_rcv;
using cppad_swig::sparse_jac_work;
using cppad_swig::sparse_hes_work;
using std::string;
//
// initialize return variable
bool ok = true;
//------------------------------------------------------------------------
int n_ind = 1; // number of independent variables
int n_dep = 1; // number of dependent variables
int n_var = 1; // phantom variable at address 0
int n_op = 1; // special operator at beginning
//
// dimension some vectors
vec_double x = cppad_swig::vec_double(n_ind);
vec_a_double ay = cppad_swig::vec_a_double(n_dep);
//
// independent variables
x[0] = 1.0;
vec_a_double ax = cppad_swig::independent(x);
n_var = n_var + n_ind; // one for each indpendent
n_op = n_op + n_ind;
//
// accumulate summation
a_double ax0 = ax[0];
a_double csum = cppad_swig::a_double(0.0);
csum = ax0 + ax0 + ax0 + ax0;
n_var = n_var + 3; // one per + operator
n_op = n_op + 3;
//
// define f(x) = y_0 = csum
ay[0] = csum;
a_fun af = cppad_swig::a_fun(ax, ay);
n_op = n_op + 1; // speical operator at end
//
// check number of variables and operators
ok = ok && af.size_var() == n_var;
ok = ok && af.size_op() == n_op;
//
// optimize
af.optimize();
//
// number of variables and operators has decreased by two
ok = ok && af.size_var() == n_var-2;
ok = ok && af.size_op() == n_op-2;
//
return( ok );
}