#ifndef EXACTCONSTRAINTSATISFACTION_HH #define EXACTCONSTRAINTSATISFACTION_HH #include #include #include #include #include class COMISODLLEXPORT ExactConstraintSatisfaction { public: ExactConstraintSatisfaction(); typedef Eigen::SparseVector::InnerIterator iteratorV; typedef Eigen::SparseVector sparsVec; //-----------------------helpfull methods--------------------------------- void printMatrix(Eigen::SparseMatrix A); void printVector(Eigen::VectorXi b); int gcd(const int a, const int b); int gcdRow(const Eigen::SparseMatrix::RowXpr row, const int b); int lcm(const int a, const int b); int lcm_list(const std::list D); void swapRows(Eigen::SparseMatrix& A, Eigen::VectorXi& b, int row1, int row2); int largestExponent(const Eigen::SparseMatrix& A, const Eigen::VectorXd& x); int indexPivot(const Eigen::SparseMatrix& A, int row); double F_delta(double x); double get_delta(); //--------------------matrix transformation------------------------------- void IREF_Gaussian(Eigen::SparseMatrix& A, Eigen::VectorXi& b); void IRREF_Jordan(Eigen::SparseMatrix& A, Eigen::VectorXi& b); //-------------------Evaluation-------------------------------------------- void evaluation(Eigen::SparseMatrix& A, Eigen::VectorXi& b, Eigen::VectorXd& x); double makeDiv(const std::list& D, double x); double safeDot(const std::list>& S); private: //-----------------------helpfull variables------------------------------- int number_pivots_ = 0; //number of rows with a pivot; int largest_exponent_ = 0; double delta_ = 0; }; #endif // EXACTCONSTRAINTSATISFACTION_HH