Developer documentation

tensor_bernstein.hpp
Go to the documentation of this file.
1 #ifndef realroot_tensor_bernstein_hpp
2 #define realroot_tensor_bernstein_hpp
3 
5 
6 #define TMPL template<class C>
7 #define Polynomial bernstein<C>
8 namespace mmx {
9 
10 namespace tensor
11 {
12  template<class C>
13  struct bernstein : monomials<C>
14  {
18  typedef typename base_type::iterator iterator;
20  typedef typename base_type::size_type size_type;
21 
22  bernstein( const C& x = 0 );
23  bernstein( int v, int d): base_type(v,d) {
24  convertm2b(*this);
25  }
26  bernstein( const C& c, int v, int d): base_type(c,v,d) {
27  convertm2b(*this);
28  }
29  bernstein( const bernstein<C>& p) : base_type(p) {
30  // std::cout<<"\tcopy"<<std::endl;
31  }
32 
33  template<class X, class O>
34  bernstein( const sparse::monomial_seq<X,O>& pol ):base_type(pol) {
35  convertm2b(*this);
36  }
37 
38  bernstein( const char* str ):base_type(str) {
39  convertm2b(*this);
40  }
41 
42  template<class VECT>
43  bernstein( const char* str, const VECT& bx):base_type(str) {
44  convertm2b(*this, bx);
45  }
46 
47  template<class O, class VECT>
48  bernstein( const sparse::monomial_seq<C,O>& pol, const VECT& bx):base_type(pol) {
49  convertm2b(*this, bx);
50  }
51 
52 
53  template<class X, class O, class VECT>
54  bernstein(const sparse::monomial_seq<X,O>& mpol, const VECT& bx ):base_type(mpol) {
55  convertm2b(*this, bx);
56  }
57 
58  bernstein( const eenv & e);
59  bernstein( const eenv& e, const C& c );
60  bernstein( int nvr, const int * szs, const int * vrs = 0 );
61 
62  bernstein& operator=( const C& x );
63  C& operator[]( int i ) { return this->data[i]; };
64  C operator[]( int i ) const { return this->data[i]; };
65  bool operator==( const C& c ) const { return base_type::esz() == 1 && base_type::data[0] == c; };
66  bool operator==( const bernstein& mp ) const;
67  };
68 
69  template<class C> inline
70  unsigned size(const bernstein<C>& p) {return p.size();}
71 
72  template<class C> inline int
73  degree(const bernstein<C>& p) {return degree((const monomials<C>&)p);}
74 
75  template<class C> inline int
76  degree(const bernstein<C>& p, int v) {return degree((const monomials<C>&)p,v);}
77 
78 
79  TMPL Polynomial diff(const Polynomial& p, int v)
80  {
81  Polynomial dp(p); diff(dp,p,v); return dp;
82  }
83 
84  template<class C,class U> void coefficients(Seq<U>& r, const Polynomial& p, int v){
85 
86  }
87 
88 };
89 
90 } //namespace mmx
91 
93 
94 //======================================================================
95 namespace mmx {
96 # undef Polynomial
97 # define Polynomial tensor::bernstein<C>
98 # define TMPL template<class C>
99 
100 template<class A, class B> struct use;
101 struct operators_of;
102 
103 TMPL struct use<operators_of,Polynomial> {
104 
105  static inline void
106  add (Polynomial &r, const Polynomial &a ) {
107  tensor::add (r, a);
108  }
109  static inline void
110  add (Polynomial &r, const Polynomial &a, const Polynomial &b) {
111  tensor::add (r, a, b);
112  }
113  static inline void
114  add (Polynomial &r, const Polynomial &a, const C & b) {
115  tensor::add (r, a, b);
116  }
117  static inline void
118  add (Polynomial &r, const C & a, const Polynomial &b) {
119  tensor::add (r, b, a);
120  }
121  static inline void
122  sub (Polynomial &r, const Polynomial &a ) {
123  tensor::sub (r, a );
124  }
125  static inline void
126  sub (Polynomial &r, const Polynomial &a, const Polynomial &b) {
127  tensor::sub (r, a, b);
128  }
129  static inline void
130  sub (Polynomial &r, const C & a, const Polynomial &b) {
131  tensor::sub (r, a, b);
132  }
133  static inline void
134  sub (Polynomial &r, const Polynomial &a, const C & b) {
135  tensor::sub (r, a, b);
136  }
137  static inline void
138  mul (Polynomial &r, const Polynomial &a ) {
139  tensor::mul (r, a );
140  }
141  static inline void
142  mul (Polynomial &r, const Polynomial &a, const Polynomial &b) {
143  tensor::mul (r, a, b);
144 }
145  static inline void
146  mul (Polynomial &r, const Polynomial &a, const C & b) {
147  tensor::mul (r, a, b); }
148  static inline void
149  mul (Polynomial &r, const C & a, const Polynomial &b) {
150  tensor::mul (r, b, a);
151  }
152  static inline void
153  div (Polynomial &r, const Polynomial &a, const Polynomial &b) {
154  tensor::div (r, a, b);
155  }
156  static inline void
157  div (Polynomial &r, const Polynomial &a, const C & b) {
158  tensor::div (r, a, b);
159  }
160  // static inline void
161 // rem (Polynomial &r, const Polynomial &a, const Polynomial &b) {
162 // tensor::rem (r, b, a);
163 // }
164 };
165 # undef Polynomial
166 # undef TMPL
167 //====================================================================
168 } //namespace mmx
169 #undef TMPL
170 #undef Polynomial
171 #endif /* realroot_tensor_bernstein_hpp */
int * str()
Definition: tensor_monomials.hpp:77
#define TMPL
Definition: tensor_bernstein.hpp:98
bernstein(const bernstein< C > &p)
Definition: tensor_bernstein.hpp:29
Sequence of terms with reference counter.
Definition: Seq.hpp:28
const C & b
Definition: Interval_glue.hpp:25
const C * const_iterator
Definition: tensor_monomials.hpp:25
base_type::value_type value_type
Definition: tensor_bernstein.hpp:16
void add(bernstein< C > &mpl, const C &c)
Definition: tensor_bernstein_fcts.hpp:53
base_type::iterator iterator
Definition: tensor_bernstein.hpp:18
static void sub(Polynomial &r, const Polynomial &a, const C &b)
Definition: tensor_bernstein.hpp:134
void mul(bernstein< C > &r, const bernstein< C > &a, const bernstein< C > &b)
Definition: tensor_bernstein_fcts.hpp:142
static void add(Polynomial &r, const C &a, const Polynomial &b)
Definition: tensor_bernstein.hpp:118
bernstein(const sparse::monomial_seq< C, O > &pol, const VECT &bx)
Definition: tensor_bernstein.hpp:48
int size() const
Definition: tensor_monomials.hpp:72
static void mul(Polynomial &r, const C &a, const Polynomial &b)
Definition: tensor_bernstein.hpp:149
static void sub(Polynomial &r, const Polynomial &a, const Polynomial &b)
Definition: tensor_bernstein.hpp:126
static void sub(Polynomial &r, const Polynomial &a)
Definition: tensor_bernstein.hpp:122
C & operator[](int i)
Definition: tensor_bernstein.hpp:63
bool operator==(const C &c) const
Definition: tensor_bernstein.hpp:65
bernstein(const C &x=0)
Definition: tensor_bernstein_fcts.hpp:192
Definition: tensor_eenv.hpp:9
bernstein(const sparse::monomial_seq< X, O > &mpol, const VECT &bx)
Definition: tensor_bernstein.hpp:54
static void sub(Polynomial &r, const C &a, const Polynomial &b)
Definition: tensor_bernstein.hpp:130
base_type::const_iterator const_iterator
Definition: tensor_bernstein.hpp:19
int degree(const bernstein< C > &p)
Definition: tensor_bernstein.hpp:73
int * vrs()
Definition: tensor_monomials.hpp:76
bernstein(const C &c, int v, int d)
Definition: tensor_bernstein.hpp:26
static void div(Polynomial &r, const Polynomial &a, const C &b)
Definition: tensor_bernstein.hpp:157
C * iterator
Definition: tensor_monomials.hpp:23
polynomial< COEFF, with< MonomialTensor > > Polynomial
Definition: solver_mv_cf.cpp:23
void sub(bernstein< C > &r, const bernstein< C > &a)
Definition: tensor_bernstein_fcts.hpp:105
vector_type data
Definition: tensor_monomials.hpp:32
static void add(Polynomial &r, const Polynomial &a, const C &b)
Definition: tensor_bernstein.hpp:114
std::vector< C > vector_type
Definition: tensor_monomials.hpp:21
coeff_t value_type
Definition: tensor_monomials.hpp:29
Definition: tensor_monomials.hpp:18
Definition: polynomial.hpp:37
static void mul(Polynomial &r, const Polynomial &a, const C &b)
Definition: tensor_bernstein.hpp:146
static void mul(Polynomial &r, const Polynomial &a, const Polynomial &b)
Definition: tensor_bernstein.hpp:142
C operator[](int i) const
Definition: tensor_bernstein.hpp:64
vector_type::size_type size_type
Definition: tensor_monomials.hpp:28
base_type::vector_type vector_type
Definition: tensor_bernstein.hpp:17
int nvr() const
Definition: tensor_monomials.hpp:74
TMPL Polynomial diff(const Polynomial &p, int v)
Definition: tensor_bernstein.hpp:79
int esz() const
Definition: tensor_monomials.hpp:71
monomials< C > base_type
Definition: tensor_bernstein.hpp:15
int * szs()
Definition: tensor_monomials.hpp:75
static void div(Polynomial &r, const Polynomial &a, const Polynomial &b)
Definition: tensor_bernstein.hpp:153
const C & c
Definition: Interval_glue.hpp:45
static void mul(Polynomial &r, const Polynomial &a)
Definition: tensor_bernstein.hpp:138
void coefficients(Seq< U > &r, const Polynomial &p, int v)
Definition: tensor_bernstein.hpp:84
bernstein(const char *str)
Definition: tensor_bernstein.hpp:38
double C
Definition: solver_mv_fatarcs.cpp:16
void convertm2b(bernstein< C > &mpl)
Definition: tensor_bernstein_fcts.hpp:31
base_type::size_type size_type
Definition: tensor_bernstein.hpp:20
bernstein & operator=(const C &x)
Definition: tensor_bernstein_fcts.hpp:324
unsigned size(const bernstein< C > &p)
Definition: tensor_bernstein.hpp:70
bernstein(int v, int d)
Definition: tensor_bernstein.hpp:23
static void add(Polynomial &r, const Polynomial &a, const Polynomial &b)
Definition: tensor_bernstein.hpp:110
void div(bernstein< C > &r, const bernstein< C > &a, const C &c)
Definition: tensor_bernstein_fcts.hpp:178
Definition: array.hpp:12
Definition: tensor_bernstein.hpp:13
static void add(Polynomial &r, const Polynomial &a)
Definition: tensor_bernstein.hpp:106
bernstein(const sparse::monomial_seq< X, O > &pol)
Definition: tensor_bernstein.hpp:34
bernstein(const char *str, const VECT &bx)
Definition: tensor_bernstein.hpp:43
Home