double SQPInternal::quad_form(const std::vector<double>& x, const DMatrix& A){ // Assert dimensions casadi_assert(x.size()==A.size1() && x.size()==A.size2()); // Access the internal data of A const std::vector<int> &A_rowind = A.rowind(); const std::vector<int> &A_col = A.col(); const std::vector<double> &A_data = A.data(); // Return value double ret=0; // Loop over the rows of A for(int i=0; i<x.size(); ++i){ // Loop over the nonzeros of A for(int el=A_rowind[i]; el<A_rowind[i+1]; ++el){ // Get column int j = A_col[el]; // Add contribution ret += x[i]*A_data[el]*x[j]; } } return ret; }
inline /** \brief . */ const DVectorSlice col(const DMatrix& gm, BLAS_Cpp::Transp trans, size_type j) { return (trans == BLAS_Cpp::no_trans) ? gm.col(j) : gm.row(j); }
inline /** \brief . */ DVectorSlice row(DMatrix& gm, BLAS_Cpp::Transp trans, size_type i) { return (trans == BLAS_Cpp::no_trans) ? gm.row(i) : gm.col(i); }