Borderbasix

polspecial.hpp
Go to the documentation of this file.
1 template<typename mon, typename T,typename Base>
2 mon choice_naif(const pol<mon,T> & p, const Base &b)
3 {
4  list<mon> tmp;
5  mon m;
6  int maxdeg=-1;
7  //int maxtmpdeg=0;
8  for(int i=0;i<p.size;i++)
9  {
10  if (!Iszero(p.nf[i]))
11  {
12  mon tmpmon;
13  int2mon(i,tmpmon);
14  if(tmpmon.GetDegree()>maxdeg)
15  {
16  tmp.erase(tmp.begin(),tmp.end());
17  maxdeg=tmpmon.GetDegree();
18  }
19  if(tmpmon.GetDegree()==maxdeg)
20  {
21  tmpmon.SetCoeff(p.nf[i]);
22  tmp.push_back(tmpmon);
23  }
24  }
25  }
26  m=tmp.front();
27  for(typename list<mon>::iterator itertmp=tmp.begin();itertmp!=tmp.end();itertmp++)
28  {
29  if(m.GetCoeff()<itertmp->GetCoeff()) {m=*itertmp;};
30  }
31  // cout<<"monom choisi "<<m<<endl;
32  return m;
33 }
34 
35 template<typename mon, typename T,typename Base>
36 mon choice_grevlex(const pol<mon,T> & p,const Base &b)
37 {
38  list<mon> tmp;
39  mon m;
40  int maxdeg=-1;
41  //int maxtmpdeg=0;
42  for(int i=0;i<p.size;i++)
43  {
44  if (!Iszero(p.nf[i]))
45  {
46  mon tmpmon;
47  int2mon(i,tmpmon);
48  if(tmpmon.GetDegree()>maxdeg)
49  {
50  tmp.erase(tmp.begin(),tmp.end());
51  maxdeg=tmpmon.GetDegree();
52  }
53  if(tmpmon.GetDegree()==maxdeg)
54  {
55  tmpmon.SetCoeff(p.nf[i]);
56  tmp.push_back(tmpmon);
57  }
58  }
59  }
60  m=tmp.front();
61  for(typename list<mon>::iterator itertmp=tmp.begin();itertmp!=tmp.end();itertmp++)
62  {
63  if(my_ord(*itertmp,m)<0) {m=*itertmp;};
64  }
65  // cout<<"monom choisi "<<m<<endl;
66  return m;
67 }
68 
69 template<typename mon, typename T,typename Base>
70 mon choice_dlex(const pol<mon,T> & p,const Base &b)
71 {
72  list<mon> tmp;
73  mon m;
74  int maxdeg=-1;
75  //int maxtmpdeg=0;
76  for(int i=0;i<p.size;i++)
77  {
78  if (!Iszero(p.nf[i]))
79  {
80  mon tmpmon;
81  int2mon(i,tmpmon);
82  if(tmpmon.GetDegree()>maxdeg)
83  {
84  tmp.erase(tmp.begin(),tmp.end());
85  maxdeg=tmpmon.GetDegree();
86  }
87  if(tmpmon.GetDegree()==maxdeg)
88  {
89  tmpmon.SetCoeff(p.nf[i]);
90  tmp.push_back(tmpmon);
91  }
92  }
93  }
94  m=tmp.front();
95  for(typename list<mon>::iterator itertmp=tmp.begin();itertmp!=tmp.end();itertmp++)
96  {
97  if(my_ord(*itertmp,m)>0) {m=*itertmp;};
98  }
99  // cout<<"monom choisi "<<m<<endl;
100  return m;
101 }
102 
103 
104 template<typename mon, typename T,typename Base>
105 mon choice_mac(const pol<mon,T> & p,const Base &b)
106 {
107  list<mon> tmp;
108  mon m;
109  int maxdeg=-1;
110  int maxtmpdeg=0;
111  for(int i=0;i<p.size;i++)
112  {
113  if (!Iszero(p.nf[i]))
114  {
115  mon tmpmon;
116  int2mon(i,tmpmon);
117  if(tmpmon.GetDegree()>maxdeg)
118  {
119  tmp.erase(tmp.begin(),tmp.end());
120  maxdeg=tmpmon.GetDegree();
121  }
122  if(tmpmon.GetDegree()==maxdeg)
123  {
124  tmpmon.SetCoeff(p.nf[i]);
125  tmp.push_back(tmpmon);
126  }
127  }
128  }
129  m=tmp.front();
130  for(typename list<mon>::iterator itertmp=tmp.begin();itertmp!=tmp.end();itertmp++)
131  {
132  //cout<<"monomes regarde "<<*itertmp<<" Lavr "<<lvar(itertmp->rep)<<endl;
133  for(int i=0;i<=lvar(itertmp->rep);i++)
134  {
135  if(itertmp->GetDegree(i)>=maxtmpdeg)
136  {
137  maxtmpdeg=itertmp->GetDegree(i);
138  m=*itertmp;
139  }
140  }
141  }
142  return m;
143 }
144 
145 
146 template<typename mon, typename T,typename Base>
147 mon choice_mpq(const pol<mon,T> & p,const Base &b)
148 {
149  int i,degp=Degree(p);
150  int mini=INT_MAX;
151  mon tmpmon;
152  mon stockmon;
153  for(i=0;i<p.size;i++)
154  if(!Iszero(p.nf[i]))
155  {
156  int2mon(i,tmpmon);
157  if(tmpmon.GetDegree()==degp)
158  {
159  if(mpz_size(mpq_numref(&(p.nf[i].rep())))+
160  mpz_size(mpq_denref(&(p.nf[i].rep())))<mini)
161  {
162  mini=mpz_size(mpq_numref(&(p.nf[i].rep())))+
163  mpz_size(mpq_denref(&(p.nf[i].rep())));
164  //cout<<"newmax "<<max<<endl;
165  //cout<<" les monomes "<<*iter<<endl;
166  stockmon=tmpmon*p.nf[i];
167  }
168  }
169  }
170  //cout<<"je retourne "<<stockmon<<endl;
171  return stockmon;
172 }
173 
174 template<typename mon, typename T, typename Base>
175 mon choice_fall(const pol<mon,T> & p, const Base &b)
176 {
177  int i;
178  int maxi=-1;
179  mon tmpmon;
180  mon stockmon;
181  mon res=choice_mac(p,b);
182  typename Base::const_iterator iterb;
183  list<mon> tmplist;
184  int degp=Degree(p);
185 
186  for(i=0;i<p.size;i++)
187  if(!Iszero(p.nf[i]))
188  {
189  int2mon(i,tmpmon);
190  if(tmpmon.GetDegree()==degp)
191  tmplist.push_back(tmpmon*p.nf[i]);
192  //cout<<" k "<<i<<endl;
193  }
194  for(typename list<mon>::iterator iterlist=tmplist.begin()
195  ;iterlist!=tmplist.end();iterlist++)
196  {
197  for(iterb=b.begin();iterb!=b.end();iterb++)
198  {
199  int isgood=0;
200  for(int i=0;i<iterb->taille1;i++)
201  if(isdivisible(iterb->accept[i],*iterlist,b))
202  {isgood=1;break;}
203  for(int i=0;i<iterb->taille2;i++)
204  if(isdivisible(iterb->refuse[i],*iterlist,b))
205  {isgood=0;break;}
206  if(isgood)
207  {
208 
209  for(int i=0;i<iterb->taille2;i++)
210  {
211  mon m=lcm(*iterlist,iterb->refuse[i]);
212  int dist=0;
213  for(int j=0;j<iterb->taille2;j++)
214  if ((j!=i) && (isdivisible(iterb->refuse[j],m,b)))
215  isgood=0;
216  if(isgood)
217  {
218  for(int j=0;j<b.nbvar();j++)
219  if(m.GetDegree(j)>iterb->refuse[i].GetDegree(j))
220  dist+=m.GetDegree(j)-iterb->refuse[i].GetDegree(j);
221  if(dist>maxi)
222  {
223  res=*iterlist;
224  maxi=dist;
225  }
226  }
227  }
228  }
229 
230  }
231  }
232  //cout<<"le pol "<<invconv<Poly>(p)<<endl<<"le mon choisi "<<res<<endl;
233  return res;
234 }
235 
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
mon choice_mac(const pol< mon, T > &p, const Base &b)
Definition: polspecial.hpp:105
C GetCoeff() const
Definition: Monom.hpp:67
Definition: pol.hpp:6
int my_ord(const mon &m1, const mon &m2)
Definition: ord.hpp:2
list< predicat >::const_iterator const_iterator
Definition: types.hpp:21
int nbvar()
Definition: types.hpp:37
MSKconetypee MSKrealt MSKint32t MSKint32t j
Definition: mosek.h:2421
mon choice_mpq(const pol< mon, T > &p, const Base &b)
Definition: polspecial.hpp:147
void int2mon(const int &i, mon &res)
Definition: placemon.hpp:288
dynamicexp< X, E >::degree_t Degree(const dynamicexp< X, E > &t)
Definition: dynamicexp.hpp:91
iterator end()
Definition: types.hpp:30
Definition: types.hpp:14
exponent_t GetDegree() const
Definition: Monom.hpp:70
mon choice_grevlex(const pol< mon, T > &p, const Base &b)
Definition: polspecial.hpp:36
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
int Iszero(const Scl< MPQ > &c)
Definition: Iszero.hpp:14
mon lcm(const mon &m1, const mon &m2)
Definition: corealgo.hpp:43
int size
Definition: pol.hpp:10
mon choice_fall(const pol< mon, T > &p, const Base &b)
Definition: polspecial.hpp:175
iterator begin()
Definition: types.hpp:25
mon choice_dlex(const pol< mon, T > &p, const Base &b)
Definition: polspecial.hpp:70
void SetCoeff(const C &c)
Definition: Monom.hpp:68
Multivariate monomials.
Definition: Monom.hpp:21
T * nf
Definition: pol.hpp:12
mon choice_naif(const pol< mon, T > &p, const Base &b)
Definition: polspecial.hpp:2
Home  |  Download & InstallContributions