Expression UExprPoly::eval(const Expression &x) const { Expression ans = 0; for (const auto &p : get_poly().get_dict()) { Expression temp; temp = pow_ex(x, Expression(p.first)); ans += p.second * temp; } return ans; }
Expression UnivariatePolynomial::eval(const Expression &x) const { Expression ans = 0; for (const auto &p : dict_) { Expression temp; temp = pow_ex(x, Expression(p.first)); ans += p.second * temp; } return ans; }
Expression MExprPoly::eval( std::map<RCP<const Basic>, Expression, RCPBasicKeyLess> &vals) const { // TODO : handle missing values Expression ans(0); for (auto bucket : poly_.dict_) { Expression term = bucket.second; unsigned int whichvar = 0; for (auto sym : vars_) { term *= pow_ex(vals.find(sym)->second, bucket.first[whichvar]); whichvar++; } ans += term; } return ans; }