Prev Next objective

@(@\newcommand{\B}[1]{{\bf #1}} \newcommand{\R}[1]{{\rm #1}}@)@
Computes the Control Objective Function

Syntax
F = control::objective(delta_tqxy)

Prototype

template <class Scalar> Scalar
objective(
     const Scalar&         delta_t ,
     const VECTOR(Scalar)& q       ,
     const MATRIX(Scalar)& x       ,
     const MATRIX(Scalar)& y       )

Definition
The objective @(@ F : \B{R}^{2 \times J} \times \B{R}^{4 \times J} \rightarrow \B{R} @)@ is defined by @[@ F (x, y) = \frac{1}{2} \sum_{i=0}^3 q_i y_{i,J-1}^2 + \frac{\Delta t}{4} \left( x_{0,0}^2 + x_{1,0}^2 + x_{0,J-1}^2 + x_{1,J-1}^2 + 2 \sum_{j=1}^{J-2} \left( x_{0,j}^2 + x_{1,j}^2 \right) \right) @]@

Example

bool test_control_objective(void)
{    bool ok = true;
     double eps99   = 99.0 * std::numeric_limits<double>::epsilon();
     //
     VECTOR(double) q(4);
     MATRIX(double) x(2, 3);
     MATRIX(double) y(4, 3);
     for(size_t i = 0; i < 4; i++)
     {    q[i] = double(i + 1);
          for(size_t j = 0; j < 3; j++)
          {    y(i, j) = double(i + j + 1);
               if( i < 2 )
                    x(i, j) = double(j - i + 2);
          }
     }
     double delta_t = 0.5;
     double F = control::objective(delta_t, q, x, y);
     //
     double check =  x(0,0) * x(0,0) + x(1,0) * x(1,0);
     check       +=  2.0 * ( x(0,1) * x(0,1) + x(1,1) * x(1,1) );
     check       +=  x(0,2) * x(0,2) + x(1,2) * x(1,2);
     check       *= delta_t / 4.0;
     for(size_t i = 0; i < 4; i++)
          check += q[i] * y(i,2) * y(i, 2) / 2.0;
     ok &= CppAD::NearEqual(F, check, eps99, eps99);
     //
     return ok;
}

Input File: src/control.hpp