MyVect<T> GauSid<T>::operator () (MyVect<MyVect<T>> &vectr) { mult = 0; MyVect<T> vect_to_return (vectr.size ()); vect_to_return = 0; for (int i = 0; i < vectr.size () - 1; i++) { for (int k = 1; k < vectr.size (); k++) { if (i == k) { continue;//skips comparing MyVect object to itself } else if (isMult (vectr[i], vectr[k])) { vect_to_return[i] = 1; vect_to_return[k] = mult; //return vect_to_return; } } } for (int i = 2; i < vectr.size (); i++) { MyVect <MyVect<T>> gsTest, gsTest2 (vectr.size ()); MyVect<T> temp (i), tempAlso (vectr.size ()), sum (vectr.size ()); temp = 0; sum = 0; for (int k = 0; k < i + 1; k++) { gsTest.insert (vectr[k], k); } tempAlso = iteration (gsTest); if (tempAlso != temp) { for (int i = 0; i < tempAlso.size (); i++) { sum = sum + (vectr[i] * tempAlso[i]); } if (sum == vectr[tempAlso.size ()]) { return tempAlso; } } } //Does not converge or remaing ewlements after Gauss Seidel don't sum up; return vect_to_return; }
// store the rational representation of exp into rat, according to the // most recently generated model. static bool ExpModelRational(const CVC3::Expr &exp, CVC3::Rational &rat) { // usual case, the expression is already an integer. it would be nice if // this was the 'always' case (except with assignments for function symbols, // which shouldn't get here), but it is not. if (exp.isRational()) { rat = exp.getRational(); return true; } if (isPlus(exp)) { if (!ExpModelRational(exp[0], rat)) return false; for (int i = 1; i < exp.arity(); i++) { CVC3::Rational crat; if (!ExpModelRational(exp[i], crat)) return false; rat += crat; } return true; } if (isMult(exp)) { if (!ExpModelRational(exp[0], rat)) return false; for (int i = 1; i < exp.arity(); i++) { CVC3::Rational crat; if (!ExpModelRational(exp[i], crat)) return false; rat *= crat; } return true; } // see if this is a key in the model we generated. for (long i = 0; i < model_size; i++) { if (model_vars[i] == ToExp(exp)) return ExpModelRational(FromExp(model_vals[i]), rat); } // printf("ERROR: Unknown expression from model: %s\n", // exp.toString().c_str()); return false; }