Developer documentation

polynomial_bernstein_glue.hpp
Go to the documentation of this file.
1 #ifndef realroot_ring_bernstein_glue_hpp
2 #define realroot_ring_bernstein_glue_hpp
3 #include <basix/mmx_syntax.hpp>
4 #include <numerix/kernel.hpp>
5 #include <realroot/Seq.hpp>
10 #define TMPL template <class C>
11 #define RING ring<C,Bernstein>
12 #define POLYNOMIAL polynomial<C, with<Bernstein> >
13 //======================================================================
14 namespace mmx {
15  DECLARE_CLASS(Bernstein,"Bernstein")
16 
17  TMPL unsigned hash(const RING& p){ return 1;}
18  TMPL unsigned exact_hash(const RING& p){ return 1;}
19  TMPL unsigned soft_hash(const RING& p){ return 1;}
20 
21  TMPL bool exact_eq(const RING& p, const RING& q){ return true;}
22  TMPL bool exact_neq(const RING& p, const RING& q){ return false;}
23 
24  TMPL bool operator ==(const RING& p, const RING& q){ return true;}
25  TMPL bool operator !=(const RING& p, const RING& q){ return false;}
26 
27  TMPL syntactic flatten(const RING& rg) {
28  syntactic CF= flatten(scalar_set<C>());
29  vector<syntactic> Lv; Lv <<CF;
30  for(int i=0;i<rg.nbvar();i++) {
31  Lv<<syntactic(RING::var[i].data());
32  }
33  Lv<<syntactic("Bernstein");
34  return apply (GEN_ACCESS, Lv);
35  }
36 
37  TMPL RING
38  ring_bernstein_string(const scalar_set<C>& rg, const vector<string>& s) {
39  string v;
40  for(nat i=0;i<N(s);i++) v <<" "<<s[i];
41  return RING(as_charp(v));
42  }
43 
44  TMPL RING
46  typedef ring<C, Bernstein > Ring;
47  std::string v;
48  for(int i=0; i<r.nbvar(); i++) {
49  v += Ring::var[i];
50  if(i<r.nbvar()-1) v +=" ";
51  }
52  return RING(v.data());;
53  }
54 
55  TMPL RING
57  std::string v;
58  for(int i=0; i<r.nbvar(); i++) {
60  if(i<r.nbvar()-1) v +=" ";
61  }
62  return RING(v.data());;
63  }
64 
65 
66  TMPL RING
67  ring_bernstein_generic(const scalar_set<C>& rg, const Bernstein& b, const vector<generic>& s) {
68  string v;
69  for(nat i=0;i<N(s);i++) v <<" "<<as_mmx(s[i]);
70  return RING(as_charp(v));
71  }
72 
73  TMPL RING
74  ring_bernstein_extend_generic(const RING& R, const vector<generic>& s) {
75  int nv= RING::nbvar();
76  for(nat j=0;j<N(s);j++)
77  R[nv+j] = POLYNOMIAL( as_charp(as_mmx(s[j])) );
78  return R;
79  }
80 
81  TMPL syntactic flatten(const POLYNOMIAL& p) {
82  syntactic r(0);
83  POLYNOMIAL tmp(p);
84  tensor::convertb2m(tmp.rep());
85  print_flatten(r,tmp.rep(),RING::vars());
86  return r;
87  }
88 
90  polynomial_bernstein(const RING& r, const C& c) {
91  return POLYNOMIAL(c);
92  }
93 
95  polynomial_bernstein(const RING& r, const C& c, const int& d, const int& v) {
96  return POLYNOMIAL(c,d,v);
97  }
98 
100  polynomial_bernstein(const RING& r, const string& s) {
101  return POLYNOMIAL(as_charp(s));
102  }
103 
105  polynomial_bernstein(const RING& r, const generic& s) {
106  return POLYNOMIAL(as_charp(as_mmx(s)));
107  }
108 
111  POLYNOMIAL r;
112  convert(r.rep(), f.rep());
113  return r;
114  }
115 
116  TMPL polynomial<C, with<Sparse,DegRevLex> >
119  convert(r.rep(), f.rep());
120  return r;
121  }
122 
123  TMPL polynomial<C, with<MonomialTensor> >
126  convert(r.rep(), f.rep());
127  return r;
128  }
129 
130  TMPL vector<generic>
132  Seq<POLYNOMIAL> l = coefficients(f,v);
133  vector<generic> r;
134  for(unsigned i=0; i< l.size(); i++)
135  r<< as<generic>(l[i]);
136  return r;
137  }
138 
139  TMPL vector<generic>
141  vector<generic> r;
142  for(unsigned i=0; i< p.size();i++)
143  r<< as<generic>(p[i]);
144  return r;
145  }
146 } //namespace mmx
147 //======================================================================
148 #undef TMPL
149 #undef RING
150 #undef POLYNOMIAL
151 #endif //realroot_polynomial_bernstein_glue_hpp
void print_flatten(SYNTAX &out, const monomials< C > &mpl, const variables &Var=monom< C >::var)
Definition: tensor_monomials_fcts.hpp:332
bool operator==(const extended< NT > &lhs, const extended< NT > &rhs)
Definition: extended.hpp:88
Sequence of terms with reference counter.
Definition: Seq.hpp:28
const C & b
Definition: Interval_glue.hpp:25
Definition: polynomial_bernstein.hpp:44
TMPL bool exact_neq(const Monomial &v1, const Monomial &v2)
Definition: monomial_glue.hpp:24
#define TMPL
Definition: polynomial_bernstein_glue.hpp:10
TMPL int N(const MONOMIAL &v)
Definition: monomial_glue.hpp:60
#define RING
Definition: polynomial_bernstein_glue.hpp:11
Ring of polynomials.
Definition: ring.hpp:48
TMPL POLYNOMIAL polynomial_bernstein_of(const polynomial< C, with< Sparse, DegRevLex > > &f)
Definition: polynomial_bernstein_glue.hpp:110
TMPL unsigned exact_hash(const Monomial &m)
Definition: monomial_glue.hpp:32
TMPL unsigned hash(const Monomial &v)
Definition: monomial_glue.hpp:26
size_type size() const
Definition: Seq.hpp:166
static int nbvar()
Definition: ring.hpp:60
TMPL RING ring_bernstein_of(const ring< C, Sparse, DegRevLex > &r)
Definition: polynomial_bernstein_glue.hpp:56
TMPL POLYNOMIAL polynomial_bernstein(const RING &r, const C &c)
Definition: polynomial_bernstein_glue.hpp:90
TMPL polynomial< C, with< Sparse, DegRevLex > > polynomial_sparse_of(const POLYNOMIAL &f)
Definition: polynomial_bernstein_glue.hpp:117
TMPL vector< generic > polynomial_bernstein_coefficients(const POLYNOMIAL &f, const int &v)
Definition: polynomial_bernstein_glue.hpp:131
TMPL RING ring_bernstein_extend_generic(const RING &R, const vector< generic > &s)
Definition: polynomial_bernstein_glue.hpp:74
TMPL POLYNOMIAL
Definition: polynomial_operators.hpp:148
TMPL syntactic flatten(const MONOMIAL &v)
Definition: monomial_glue.hpp:36
Definition: polynomial.hpp:37
char * as_charp(const scalar< MPZ > &b)
Definition: scalar_integer.hpp:444
TMPL bool exact_eq(const Monomial &v1, const Monomial &v2)
Definition: monomial_glue.hpp:23
#define DECLARE_CLASS(X, S)
Definition: declare_glue.hpp:4
TMPL RING ring_tensor_of(const ring< C, Bernstein > &r)
Definition: polynomial_bernstein_glue.hpp:45
const C & c
Definition: Interval_glue.hpp:45
TMPL RING ring_bernstein_generic(const scalar_set< C > &rg, const Bernstein &b, const vector< generic > &s)
Definition: polynomial_bernstein_glue.hpp:67
double C
Definition: solver_mv_fatarcs.cpp:16
bool operator!=(const extended< NT > &lhs, const extended< NT > &rhs)
Definition: extended.hpp:95
TMPL int nbvar(const Polynomial &mp)
Definition: polynomial_fcts.hpp:43
void convert(scalar< MPF > &n, char *s)
Definition: scalar_floating.hpp:433
void convertb2m(monomials< C > &mpl)
Definition: tensor_bernstein_fcts.hpp:26
Definition: polynomial_bernstein.hpp:29
TMPL RING ring_bernstein_string(const scalar_set< C > &rg, const vector< string > &s)
Definition: polynomial_bernstein_glue.hpp:38
TMPL unsigned soft_hash(const Monomial &m)
Definition: monomial_glue.hpp:33
Definition: array.hpp:12
static int nbvar()
Definition: polynomial_bernstein.hpp:58
Definition: polynomial.hpp:40
TMPL polynomial< C, with< MonomialTensor > > polynomial_tensor_of(const POLYNOMIAL &f)
Definition: polynomial_bernstein_glue.hpp:124
TMPL Seq< typename ring< C, Bernstein >::Polynomial > coefficients(const typename ring< C, Bernstein >::Polynomial &pol, int v)
Definition: polynomial_bernstein.hpp:74
Home