30 for(std::vector<monomialt>::iterator m_it=
monomials.begin();
34 for(std::vector<monomialt::termt>::iterator t_it=m_it->terms.begin();
35 t_it!=m_it->terms.end();
40 itype=t_it->var.type();
49 for(std::vector<monomialt>::iterator m_it=
monomials.begin();
53 int coeff=m_it->coeff;
64 for(std::vector<monomialt::termt>::iterator t_it=m_it->terms.begin();
65 t_it!=m_it->terms.end();
68 for(
unsigned int i=0; i < t_it->exp; i++)
103 if(expr.
id()==ID_symbol)
109 term.
var=symbol_expr;
111 monomial.
terms.push_back(term);
116 else if(expr.
id()==ID_plus ||
117 expr.
id()==ID_minus ||
126 if(expr.
id()==ID_minus)
131 else if(expr.
id()==ID_plus)
135 else if(expr.
id()==ID_mult)
140 else if(expr.
id()==ID_constant)
147 else if(expr.
id()==ID_typecast)
157 throw "couldn't polynomialize";
163 for(std::vector<monomialt>::iterator m_it=
monomials.begin();
167 for(std::vector<monomialt::termt>::iterator t_it=m_it->terms.begin();
168 t_it!=m_it->terms.end();
171 if(substitution.find(t_it->var)!=substitution.end())
185 std::vector<monomialt>::iterator it, jt;
186 std::vector<monomialt> new_monomials;
195 int res=it->compare(*jt);
201 new_monomial.
coeff += jt->coeff;
203 if(new_monomial.
coeff!=0)
205 new_monomials.push_back(new_monomial);
215 new_monomials.push_back(*it);
220 new_monomials.push_back(*jt);
231 new_monomials.push_back(*it);
237 new_monomials.push_back(*jt);
256 for(std::vector<monomialt>::iterator it=
monomials.begin();
266 std::vector<monomialt> my_monomials=
monomials;
269 for(std::vector<monomialt>::iterator it=my_monomials.begin();
270 it!=my_monomials.end();
273 for(std::vector<monomialt>::iterator jt=other.
monomials.begin();
279 product.
coeff=it->coeff * jt->coeff;
287 std::vector<monomialt::termt>::iterator t1, t2;
289 t1=it->terms.begin();
290 t2=jt->terms.begin();
292 while(t1!=it->terms.end() && t2 != jt->terms.end())
295 int res=t1->var.compare(t2->var);
301 term.
exp=t1->exp + t2->exp;
319 product.
terms.push_back(term);
324 while(t1!=it->terms.end())
326 product.
terms.push_back(*t1);
330 while(t2!=jt->terms.end())
332 product.
terms.push_back(*t2);
346 std::vector<termt>::iterator it, jt;
349 jt=other.
terms.begin();
353 while(it!=
terms.end() && jt != other.
terms.end())
355 unsigned int e1=it->exp;
356 unsigned int e2=it->exp;
357 int res=it->var.compare(jt->var);
371 assert(it->var==jt->var);
391 if(it==
terms.end() && jt == other.
terms.end())
396 else if(it!=
terms.end() && jt == other.
terms.end())
401 else if(it==
terms.end() && jt != other.
terms.end())
414 for(std::vector<monomialt>::iterator it=
monomials.begin();
418 if(it->contains(var))
420 maxd=std::max(maxd, it->degree());
440 for(std::vector<monomialt>::iterator it=
monomials.begin();
461 for(std::vector<termt>::iterator it=
terms.begin();
474 if(var.
id()!=ID_symbol)
480 for(std::vector<termt>::iterator it=
terms.begin();