#ifndef EXACTCONSTRAINTSATISFACTION_HH #define EXACTCONSTRAINTSATISFACTION_HH #include #include #include #include #include class COMISODLLEXPORT ExactConstraintSatisfaction { public: ExactConstraintSatisfaction(); typedef Eigen::SparseVector::InnerIterator iteratorV; typedef Eigen::SparseVector sparseVec; typedef Eigen::SparseMatrix SP_Matrix_C; typedef Eigen::SparseMatrix SP_Matrix_R; //-----------------------helpfull methods--------------------------------- void print_matrix(const Eigen::SparseMatrix A); void print_vector(Eigen::VectorXi b); int gcd(const int a, const int b); int gcd_row(const Eigen::SparseVector row, const int b); int lcm(const int a, const int b); int lcm_list(const std::list D); void swap_rows(Eigen::SparseMatrix& mat, int row1, int row2); void eliminate_row(Eigen::SparseMatrix& mat, int row1, int row2); int largest_exponent(const Eigen::SparseMatrix& A, const Eigen::VectorXd& x); int index_pivot(const sparseVec row); double F_delta(double x); double get_delta(); //--------------------matrix transformation------------------------------- void IREF_Gaussian(Eigen::SparseMatrix& A, Eigen::VectorXi& b, const Eigen::VectorXd x); 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