Borderbasix

basisutil.hpp
Go to the documentation of this file.
1 #ifndef ALREADY_basisutil
2 #define ALREADY_basisutil
3 
4 template<typename Base,typename typdump, typename monomial_server>
5 int countpoint(const Base &b,const typdump & dump, monomial_server &serv)
6 {
7  typedef typename typdump::value_type::pol_t pol;
8  typedef typename pol::monom_t mon;
9  int maxdeg=-1;
10  list<mon> current;
11  list<mon> stockmon;
12  //cout<<"countmon "<<endl;
13  current.push_back(mon(1));
14  stockmon.push_back(mon(1));
15 #if 0
16  {
17  typename typdump::const_iterator iter;
18  for(iter=dump.begin();
19  iter!=dump.end();iter++);
20  maxdeg=(--iter)->k;
21  }
22 #endif
23  //on a le degre max
24  //le quotient est connexe a 1 donc on par t
25  //de 1 et on decrit le reste en multipliant par les variables
26  for(int i=-2;i!=maxdeg;i=maxdeg,maxdeg=stockmon.size())
27  {
28 
29  list<mon> tmpcurrent=current;
30  //my_merge(stockmon,current);
31  current.erase(current.begin(),current.end());
32  for(int i=0;i<b.nbvar();i++)
33  {
34  for(typename list<mon>::iterator iter=tmpcurrent.begin();
35  iter!=tmpcurrent.end();iter++)
36  current.push_back((*iter)*mon(i,1));
37  }
38  //maintenant on tri;
39  for(typename list<mon>::iterator iter=current.begin();iter!=current.end();iter++)
40  if((IsinB(*iter,b))&&(!member(stockmon,*iter)))
41  {
42  serv.mon2int(*iter);//pour etre sur que l'on a la place
43  //pour tous les monomes du quotient
44  stockmon.push_back(*iter);
45  }
46  else
47  {
48  current.erase(iter--);
49  }
50  }
51  return stockmon.size();
52 }
53 
54 template<typename Base,typename typdump,typename typMk>
55 void MonomialBase(const Base &b,const typdump & dump,typMk & res)
56 {
57  typedef typename typdump::value_type::pol_t pol;
58  typedef typename pol::monom_t mon;
59  int maxdeg=0;
60  list<mon> current;
61  // list<mon> stockmon;
62  current.push_back(mon(1));
63  res.push_back(mon(1));
64  {
65  typename typdump::const_iterator iter;
66  for(iter=dump.begin();
67  iter!=dump.end();iter++);
68  maxdeg=(--iter)->k;
69  }
70  //on a le degre max
71  //le quotient est connexe a 1 donc on par t
72  //de 1 et on decrit le reste en multipliant par les variables
73  for(int i=0;i<maxdeg;i++)
74  {
75  list<mon> tmpcurrent=current;
76  //my_merge(stockmon,current);
77  current.erase(current.begin(),current.end());
78  for(int i=0;i<b.nbvar();i++)
79  {
80  for(typename list<mon>::iterator iter=tmpcurrent.begin();
81  iter!=tmpcurrent.end();iter++)
82  current.push_back((*iter)*mon(i,1));
83  }
84  //maintenant on tri;
85  for(typename list<mon>::iterator iter=current.begin();iter!=current.end();iter++)
86  if((IsinB(*iter,b))&&(!member(res,*iter)))
87  {
88  res.push_back(*iter);
89  }
90  else
91  {
92  current.erase(iter--);
93  }
94  }
95  return;
96 }
97 
98 #ifdef DENSE
99 
100 template<typename Base,typename typdump>
101 int countpoint(const Base &b,const typdump & dump)
102 {
103  typedef typename typdump::value_type::pol_t pol;
104  typedef typename pol::monom_t mon;
105  int maxdeg=-1;
106  list<mon> current;
107  list<mon> stockmon;
108  cout<<"countmon "<<endl;
109  current.push_back(mon(1));
110  stockmon.push_back(mon(1));
111 #if 0
112  {
113  typename typdump::const_iterator iter;
114  for(iter=dump.begin();
115  iter!=dump.end();iter++);
116  maxdeg=(--iter)->k;
117  }
118 #endif
119  //on a le degre max
120  //le quotient est connexe a 1 donc on par t
121  //de 1 et on decrit le reste en multipliant par les variables
122  for(int i=-2;i!=maxdeg;i=maxdeg,maxdeg=stockmon.size())
123  {
124 
125  list<mon> tmpcurrent=current;
126  //my_merge(stockmon,current);
127  current.erase(current.begin(),current.end());
128  for(int i=0;i<b.nbvar();i++)
129  {
130  for(typename list<mon>::iterator iter=tmpcurrent.begin();
131  iter!=tmpcurrent.end();iter++)
132  current.push_back((*iter)*mon(i,1));
133  }
134  //maintenant on tri;
135  for(typename list<mon>::iterator iter=current.begin();iter!=current.end();iter++)
136  if((IsinB(*iter,b))&&(!member(stockmon,*iter)))
137  {
138  mon2int(*iter);//pour etre sur que l'on a la place
139  //pour tous les monomes du quotient
140  stockmon.push_back(*iter);
141  }
142  else
143  {
144  current.erase(iter--);
145  }
146  }
147  return stockmon.size();
148 }
149 
150 #endif
151 
152 #endif //ALREADY_basisutil
int mon2int(const mon &mm)
Definition: placemon3.hpp:679
int countpoint(const Base &b, const typdump &dump, monomial_server &serv)
Definition: basisutil.hpp:5
int member(const typMk &tmpMk, const typename typMk::value_type mon)
Definition: corealgo.hpp:1391
int nbvar()
Definition: types.hpp:37
int mon2int(const mon &mm)
Definition: placemon.hpp:294
MSKint32t k
Definition: mosek.h:2713
Definition: placemon3.hpp:14
int IsinB(const mon &m, const Base &b)
Definition: IsinB3.hpp:68
Mon mon
Definition: solver_bb_floating.cpp:136
Definition: types.hpp:14
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
#define pol
Definition: pol2ter.hpp:3
Multivariate monomials.
Definition: Monom.hpp:21
void MonomialBase(const Base &b, const typdump &dump, typMk &res)
Definition: basisutil.hpp:55
Home  |  Download & InstallContributions