----------------------------------------- lines 6-84 of file: speed/sacado/poly.cpp ----------------------------------------- {xrst_begin sacado_poly.cpp} Sacado Speed: Second Derivative of a Polynomial ############################################### Specifications ************** See :ref:`link_poly-name` . Implementation ************** {xrst_spell_off} {xrst_code cpp} */ // suppress conversion warnings before other includes # include // # include # include # include # include // list of possible options # include extern std::map global_option; bool link_poly( size_t size , size_t repeat , CppAD::vector &a , // coefficients of polynomial CppAD::vector &z , // polynomial argument value CppAD::vector &ddp ) // second derivative w.r.t z { if( global_option["atomic"] ) return false; if( global_option["memory"] || global_option["onetape"] || global_option["optimize"] ) return false; // ----------------------------------------------------- // setup typedef Sacado::Tay::Taylor ADScalar; CppAD::vector A(size); size_t i; // temporary index ADScalar Z; // domain space AD value ADScalar P; // range space AD value int order = 2; // order of Taylor coefficients Z.resize(order+1, false); P.resize(order+1, false); // choose the polynomial coefficients CppAD::uniform_01(size, a); // AD copy of the polynomial coefficients for(i = 0; i < size; i++) A[i] = a[i]; // ------------------------------------------------------ while(repeat--) { // get the next argument value CppAD::uniform_01(1, z); // independent variable value Z.fastAccessCoeff(0) = z[0]; // argument value Z.fastAccessCoeff(1) = 1.; // first order coefficient Z.fastAccessCoeff(2) = 0.; // second order coefficient // AD computation of the dependent variable P = CppAD::Poly(0, A, Z); // second derivative is twice second order Taylor coefficient ddp[0] = 2. * P.fastAccessCoeff(2); } // ------------------------------------------------------ return true; } /* {xrst_code} {xrst_spell_on} {xrst_end sacado_poly.cpp}