SX SXFunctionInternal::hess(int iind, int oind) { casadi_assert_message(output(oind).numel() == 1, "Function must be scalar"); SX g = grad(iind, oind); g.makeDense(); if (verbose()) userOut() << "SXFunctionInternal::hess: calculating gradient done " << endl; // Create function Dict opts; opts["verbose"] = getOption("verbose"); SXFunction gfcn("gfcn", make_vector(inputv_.at(iind)), make_vector(g), opts); // Calculate jacobian of gradient if (verbose()) { userOut() << "SXFunctionInternal::hess: calculating Jacobian " << endl; } SX ret = gfcn.jac(0, 0, false, true); if (verbose()) { userOut() << "SXFunctionInternal::hess: calculating Jacobian done" << endl; } // Return jacobian of the gradient return ret; }
USING_NAMESPACE_ACADO void ffcn_model( double *x, double *f, void *user_data ){ int i; double *xd = new double[NXD]; double *xa = new double[NXA]; double *u = new double[ NU]; double *p = new double[ NP]; for( i = 0; i < NXD; i++ ) xd[i] = x[ 1+i ]; for( i = 0; i < NXA; i++ ) xa[i] = x[ NXD+1+i ]; for( i = 0; i < NU; i++ ) u[i] = x[ NXA+NXD+1+i ]; for( i = 0; i < NP; i++ ) p[i] = x[ NXA+NXD+NU+1+i ]; ffcn( &x[0], xd, xa, u, p, f ); gfcn( &x[0], xd, xa, u, p, &(f[NXD]) ); delete[] xd; delete[] xa; delete[] u; delete[] p; }