1 #ifndef ALREADY_pol2bisspecial
2 #define ALREADY_pol2bisspecial
4 #define LEVELSELECT 1e-6
13 template<
typename mon,
typename T,
typename Base ,
typename monomial_server>
30 tmp.erase(tmp.begin(),tmp.end());
36 tmp.push_back(tmpmon);
46 template<
typename mon,
typename T,
typename Base,
typename monomial_server>
63 tmp.erase(tmp.begin(),tmp.end());
69 tmp.push_back(tmpmon);
75 for(
typename list<mon>::iterator itertmp=tmp.begin();itertmp!=tmp.end();itertmp++)
77 if(m.
GetCoeff()<itertmp->GetCoeff()) {m=*itertmp;};
83 template<
typename mon,
typename T,
typename Base,
typename monomial_server>
102 tmp.erase(tmp.begin(),tmp.end());
108 tmp.push_back(tmpmon);
114 for(
typename list<mon>::iterator itertmp=tmp.begin();itertmp!=tmp.end();itertmp++)
116 if(
my_ord(*itertmp,m)<0) {m=*itertmp;};
122 template<
typename mon,
typename T,
typename Base,
typename monomial_server>
139 tmp.erase(tmp.begin(),tmp.end());
145 tmp.push_back(tmpmon);
151 for(
typename list<mon>::iterator itertmp=tmp.begin();itertmp!=tmp.end();itertmp++)
153 if(
my_ord(*itertmp,m)>0) {m=*itertmp;};
160 template<
typename mon,
typename T,
typename Base,
typename monomial_server>
177 tmp.erase(tmp.begin(),tmp.end());
183 tmp.push_back(tmpmon);
189 for(
typename list<mon>::iterator itertmp=tmp.begin();itertmp!=tmp.end();itertmp++)
192 for(
int i=0;
i<=
lvar(itertmp->rep);
i++)
194 if(itertmp->GetDegree(
i)>=maxtmpdeg)
205 template<
typename mon,
typename T,
typename Base,
typename monomial_server>
220 __mpz_struct *numref,*denref;
221 numref=mpq_numref(&(p.
nf[
k].rep()));
222 denref=mpq_denref(&(p.
nf[
k].rep()));
224 mpz_size(denref)<mini)
226 mini=mpz_size(mpq_numref(&(p.
nf[
k].rep())))+
227 mpz_size(mpq_denref(&(p.
nf[
k].rep())));
230 stockmon=tmpmon*p.
nf[
k];
239 template<
typename mon,
typename T,
typename Base,
typename monomial_server>
251 cout<<
"Degree(p) "<<degp<<endl;
260 tmplist.push_back(tmpmon*p.
nf[k]);
264 for(
typename list<mon>::iterator iterlist=tmplist.begin()
265 ;iterlist!=tmplist.end();iterlist++)
267 for(iterb=b.
begin();iterb!=b.
end();iterb++)
270 for(
int i=0;i<iterb->taille1;i++)
273 for(
int i=0;i<iterb->taille2;i++)
279 for(
int i=0;i<iterb->taille2;i++)
281 mon m=
lcm(*iterlist,iterb->refuse[i]);
283 for(
int j=0;
j<iterb->taille2;
j++)
303 cout<<
"le pol "<<invconv<Poly>(p)<<endl<<
"le mon choisi "<<res<<endl;
309 template<
typename mon,
typename T,
int alpha,
typename Base,
typename monomial_server>
315 template<
typename mon,
typename T,
typename Base,
typename monomial_server>
335 tmplist.push_back(tmpmon*p.
nf[k]);
339 for(
typename list<mon>::iterator iterlist=tmplist.begin()
340 ;iterlist!=tmplist.end();iterlist++)
342 if(maxcoeff<iterlist->GetCoeff())
343 maxcoeff=iterlist->GetCoeff();
344 if(maxcoeff<-1*iterlist->GetCoeff())
345 maxcoeff=-1*iterlist->GetCoeff();
348 for(
typename list<mon>::iterator iterlist=tmplist.begin()
349 ;iterlist!=tmplist.end();iterlist++)
351 if((iterlist->GetCoeff()<0?-1*iterlist->GetCoeff():iterlist->GetCoeff())
355 for(iterb=b.
begin();iterb!=b.
end();iterb++)
358 for(
int i=0;i<iterb->taille1;i++)
361 for(
int i=0;i<iterb->taille2;i++)
367 for(
int i=0;i<iterb->taille2;i++)
369 mon m=
lcm(*iterlist,iterb->refuse[i]);
371 for(
int j=0;
j<iterb->taille2;
j++)
395 template <
typename T,
typename mono,
typename workspace>
399 typedef list<polbis<mono,T> > typPk;
400 typedef typename typPk::value_type elem_typ;
401 typedef typename elem_typ::monom_t
mon;
402 typedef typename elem_typ::coeff_t coeff;
404 vector<polbis<mono,T> > tmpPk;
405 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
406 tmpPk.push_back(*iter);
407 Pk.erase(Pk.begin(),Pk.end());
409 for(
int i=u.ncol-1;
i>=0;
i--)
413 for (
int j=(t=(
i==(u.ncol-1))?(u.nnz-1):(u.colptr[
i+1]-1))
414 ;(
j>=(u.colptr)[
i]);
j--)
417 mult_coeff=((T*)u.nzval)[
j];
420 if(
Iszero(mult_coeff))
continue;
421 mult_coeff=((coeff)1)/mult_coeff;
422 for (
int j=(t=(
i==(u.ncol-1))?(u.nnz-1):(u.colptr[
i+1]-1))
423 ;(
j>=(u.colptr)[
i]);
j--)
448 (coeff)(((coeff)(1)/((coeff*)u.nzval)[
j]));
452 if(((T*)u.nzval)[
j]!=(coeff)0)
458 tmpPk[
i],((coeff)(((coeff*)u.nzval)[j]*mult_coeff))
466 typename list<polbis<mono, T> >::iterator iterPk=Pk.begin();
468 ;iter!=tmpPk.end();iter++)
474 template <
typename T,
typename mono,
typename workspace>
478 typedef list<polbis<mono,T> > typPk;
479 typedef typename typPk::value_type elem_typ;
480 typedef typename elem_typ::monom_t
mon;
481 typedef typename elem_typ::coeff_t coeff;
483 vector<polbis<mono,T> > tmpPk;
484 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
485 tmpPk.push_back(*iter);
486 Pk.erase(Pk.begin(),Pk.end());
488 for(
int i=u.ncol-1;
i>=0;
i--)
491 for (
int j=(t=(
i==(u.ncol-1))?(u.nnz-1):(u.colptr[
i+1]-1))
492 ;(
j>=(u.colptr)[
i]);
j--)
495 mult_coeff=((T*)u.nzval)[
j];
497 if(
Iszero(mult_coeff))
continue;
498 mult_coeff=((coeff)1)/mult_coeff;
500 for (
int j=(t=(
i==(u.ncol-1))?(u.nnz-1):(u.colptr[
i+1]-1))
501 ;(
j>=(u.colptr)[
i]);
j--)
504 if(((T*)u.nzval)[
j]!=(coeff)0)
507 tmpPk[
i],((coeff*)u.nzval)[j]
512 typename list<polbis<mono, T> >::iterator iterPk=Pk.begin();
514 ;iter!=tmpPk.end();iter++)
519 template <
typename T,
typename mono,
typename workspace>
523 typedef list<polbis<mono,T> > typPk;
524 typedef typename typPk::value_type elem_typ;
525 typedef typename elem_typ::monom_t
mon;
526 typedef typename elem_typ::coeff_t coeff;
532 vector<polbis<mono,T> > tmpPk;
533 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
534 tmpPk.push_back(*iter);
535 Pk.erase(Pk.begin(),Pk.end());
537 for(
int i=0;
i<l.ncol;
i++)
541 for (;(j<l.nnz-1)&&(j<(l.colptr)[
i+1]-1);j+=2)
546 ,tmpPk[
i],(((coeff*)l.nzval)[j+1]));
549 if (
i==l.rowind[j+1])
552 ,tmpPk[
i],(((coeff*)l.nzval)[j]));
558 my_plus2(tmpPk[l.rowind[j]],tmpPk[l.rowind[j+1]]
559 ,tmpPk[
i],(((coeff*)l.nzval)[j])
560 ,(((coeff*)l.nzval)[j+1]));
567 for (;(j<l.nnz)&&(j<(l.colptr)[
i+1]);j++)
582 if((((coeff*)l.nzval)[j])!=(coeff)0)
591 ,tmpPk[
i],(((coeff*)l.nzval)[j]),&w);
598 typename list<polbis<mono, T> >::iterator iterPk=Pk.begin();
600 ;iter!=tmpPk.end();iter++,iterPk++)
607 template<
typename typmat ,
typename T,
typename mono,
typename workspace>
608 list<polbis<mono,T> > &
613 typedef list< polbis<mono,T> > typPk;
615 LUdecomp(S,&L,&U,&Pr,&Pc);
625 template<
typename typmat ,
typename T,
typename mono,
typename workspace>
626 list<polbis<mono,T> > &
632 typedef list< polbis<mono,T> > typPk;
634 std::vector< polbis<mono,T> > localPk(TildePk.size());
635 copy(TildePk.begin(),TildePk.end(),localPk.begin());
639 LUdecomp(S,&L,&U,&Pr,&Pc);
664 copy(localPk.begin(),localPk.end(),TildePk.begin());
670 #endif //ALREADY_pol2bisspecial
void int2mon(const int &i, mon &res)
Definition: placemon3.hpp:664
Definition: workspace.hpp:11
void my_plus2(pol &res1, pol &res2, const pol &nf, const coeff &toto1, const coeff &toto2)
Definition: corealgo.hpp:377
list< polbis< mono, T > > & Solve(typmat &S, std::list< polbis< mono, T > > &TildePk, int **pr, int **pc, workspace &w)
Definition: pol2bisspecial.hpp:609
void my_plus(pol &res, const pol &nf, const coeff toto)
Definition: corealgo.hpp:543
int isdivisible(const mon &m1, const mon &m2, int nbvar)
Definition: isdivisible.hpp:5
int lvar(const dynamicexp< X, E > &A)
Definition: dynamicexp.hpp:178
T * nf
Definition: pol2bis.hpp:17
C GetCoeff() const
Definition: Monom.hpp:67
int my_ord(const mon &m1, const mon &m2)
Definition: ord.hpp:2
void inverse(int *&, int)
list< predicat >::const_iterator const_iterator
Definition: types.hpp:21
#define LEVELSELECT
Definition: pol2bisspecial.hpp:4
mon choice_naif(const polbis< mon, T > &p, const Base &b, monomial_server &serv)
Definition: pol2bisspecial.hpp:14
int nbvar()
Definition: types.hpp:37
mon choice_grevlex(const polbis< mon, T > &p, const Base &b, monomial_server &serv)
Definition: pol2bisspecial.hpp:84
MSKconetypee MSKrealt MSKint32t MSKint32t j
Definition: mosek.h:2421
MSKint32t k
Definition: mosek.h:2713
C coeff_t
Definition: Monom.hpp:26
Definition: placemon3.hpp:14
dynamicexp< X, E >::degree_t Degree(const dynamicexp< X, E > &t)
Definition: dynamicexp.hpp:91
iterator end()
Definition: types.hpp:30
list< polbis< mono, T > > & SolveL(const harewell< T > &l, list< polbis< mono, T > > &Pk, workspace &w)
Definition: pol2bisspecial.hpp:520
Mon mon
Definition: solver_bb_floating.cpp:136
exponent_t GetDegree() const
Definition: Monom.hpp:70
mon choice_num(const polbis< mon, T > &p, const Base &b, monomial_server &serv)
Definition: pol2bisspecial.hpp:47
mon choice_fall(const polbis< mon, T > &p, const Base &b, monomial_server &serv)
Definition: pol2bisspecial.hpp:240
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
mon choice_mac(const polbis< mon, T > &p, const Base &b, monomial_server &serv)
Definition: pol2bisspecial.hpp:161
int Iszero(const Scl< MPQ > &c)
Definition: Iszero.hpp:14
mon choice_dlex(const polbis< mon, T > &p, const Base &b, monomial_server &serv)
Definition: pol2bisspecial.hpp:123
list< polbis< mono, T > > & SolveU(const harewell< T > &u, list< polbis< mono, T > > &Pk, workspace &w)
Definition: pol2bisspecial.hpp:475
mon lcm(const mon &m1, const mon &m2)
Definition: corealgo.hpp:43
mon choice_fall_num(const polbis< mon, Z< alpha, T > > &pol, const Base &b, monomial_server &serv)
Definition: pol2bisspecial.hpp:310
iterator begin()
Definition: types.hpp:25
Definition: pol2bis.hpp:12
void SetCoeff(const C &c)
Definition: Monom.hpp:68
Multivariate monomials.
Definition: Monom.hpp:21
unsigned char * nfind
Definition: pol2bis.hpp:18
list< polbis< mono, T > > & SolveUold(const harewell< T > &u, list< polbis< mono, T > > &Pk, workspace &w)
Definition: pol2bisspecial.hpp:396
int sizenf
Definition: pol2bis.hpp:19
mon choice_mpq(const polbis< mon, T > &p, const Base &b, monomial_server &serv)
Definition: pol2bisspecial.hpp:206