Prev Next quadratic_ok.hpp Headings

Source: quadratic_ok
# ifndef CPPAD_SPARSE_QUAD_INCLUDED
# define CPPAD_SPARSE_QUAD_INCLUDED
# include <cppad/near_equal.hpp>
namespace CppAD {
     inline bool quadratic_ok(
          const size_t                 n  ,
          const CppAD::vector<size_t> &i  , 
          const CppAD::vector<size_t> &j  , 
          const CppAD::vector<double> &x  ,
          const size_t                 m  ,
          const CppAD::vector<double> &fm )
     {    bool ok = true;
          using CppAD::NearEqual;

          size_t k, size = 1;
          for(k = 0; k < m; k++)
               size *= n;

          CppAD::vector<double> check(size);
          for(k = 0; k < size; k++)
               check[k] = 0.;

          size_t ell = i.size();
          for(k = 0; k < ell; k++)
          {    
               switch(m)
               {    case 0:
                    check[0] += x[i[k]] * x[j[k]];
                    break;

                    case 1:
                    check[i[k]] += x[j[k]];
                    check[j[k]] += x[i[k]];
                    break;

                    case 2:
                    check[i[k] * n + j[k]] += 1.;
                    check[j[k] * n + i[k]] += 1.;
                    break;
               }
          }
               
          for(k = 0; k < size; k++)
               ok &= NearEqual(fm[k], check[k], 1e-10, 1e-10);
          
          return ok;
     }
}
# endif

Input File: omh/quadratic_ok.omh