Developer documentation

polynomial_tensor.hpp
Go to the documentation of this file.
1 #ifndef realroot_polynomial_tensor_hpp
2 #define realroot_polynomial_tensor_hpp
3 
14 //====================================================================
15 #include <realroot/Seq.hpp>
16 #include <realroot/monomial.hpp>
18 #include <realroot/polynomial.hpp>
19 #include <realroot/ring.hpp>
20 
21 #define TMPL template<class C>
22 #define RING ring<C, MonomialTensor >
23 #define POLYNOMIAL polynomial<C, with<MonomialTensor> >
24 //====================================================================
25 namespace mmx {
26 
27  template<class A, class B> struct use;
28  template<class C, class V> struct polynomial;
29  template<class C, class V> struct with;
30 
31  struct MonomialTensor {};
32 
33  template<class C>
35  typedef C Scalar;
36  typedef monom<C> Monomial;
39 
41  typedef Ring variable_t;
42 
43 
44  };
45 
47  template<class C>
48  struct ring<C, MonomialTensor> {
49  typedef C Scalar;
50  typedef monom<C> Monomial;
53 
56  typedef self_t variable_t;
57 
58  ring(const char* s) {var = variables(s); }
59 
60  static variables var;
61  static variables& vars () { return var;}
62  static int nbvar() { return var.nbvar(); }
63 
64  Polynomial operator[](int i) const {
65  return Polynomial((C)1,1,i);
66  }
67  };
68 
69  template<class C> struct ring_of;
70  template<class C> struct ring_of<polynomial<C,with<MonomialTensor> > > {
72  } ;
73 
74  template<class C> variables ring<C, MonomialTensor >::var;
75 
76  //====================================================================
77  TMPL inline Seq<POLYNOMIAL>
78  coefficients(const POLYNOMIAL & f, const int & v ) {
79  int N = degree(f,v)+1;
80  Seq<POLYNOMIAL> r(N);
81  typename POLYNOMIAL::Monomial m;
82  for(int i=0;i<N; i++) {
83  r[i]=POLYNOMIAL(0);
84  }
85  return r;
86  }
87 
88  TMPL inline Seq<C>
89  coefficients(const POLYNOMIAL & f) {
90  Seq<C> r;
91  for(int i=0;i<f.size(); i++) {
92  r<<f[i];
93  }
94  return r;
95  }
96 
97  namespace let {
98  template<class C, class D> inline void
100  const polynomial<C, with<MonomialTensor> >& q){
101  //int d = q.size();
103 
104  const int * vr=q.rep().vrs();
105  const int * sz=q.rep().szs();
106  for (int i=0; i< q.nbvar();i++)
107  p += polynomial< D, with<MonomialTensor> >(D(1),sz[i]-1,vr[i]);
108  for(unsigned i=0;i<q.size();i++) p[i]= as<D>(q[i]);
109  }
110  }
111 } //namespace mmx
112 //====================================================================
113 # undef TMPL
114 # undef RING
115 # undef POLYNOMIAL
116 //====================================================================
117 # endif // realroot_polynom_mdse_hpp
ring(const char *s)
Definition: polynomial_tensor.hpp:58
Sequence of terms with reference counter.
Definition: Seq.hpp:28
Tensor ring of polynomials in the monomial basis.
Definition: polynomial_tensor.hpp:48
dynamic_exp< E >::degree_t degree(const dynamic_exp< E > &t)
Definition: dynamicexp.hpp:191
tensor::monomials< C > rep_t
Definition: polynomial_tensor.hpp:54
ring< C, MonomialTensor > self_t
Definition: polynomial_tensor.hpp:55
Definition: polynomial_tensor.hpp:31
monom< C > Monomial
Definition: polynomial_tensor.hpp:50
#define Monomial
Definition: monomial.hpp:56
TMPL int N(const MONOMIAL &v)
Definition: monomial_glue.hpp:60
ring< C, MonomialTensor > Ring
Definition: polynomial_tensor.hpp:52
Ring of polynomials.
Definition: ring.hpp:48
static variables & vars()
Definition: polynomial_tensor.hpp:61
Definition: polynomial.hpp:43
C Scalar
Definition: polynomial_tensor.hpp:49
static variables var
Definition: polynomial_tensor.hpp:60
polynomial< C, with< MonomialTensor > > Polynomial
Definition: polynomial_tensor.hpp:51
static variables var
Definition: ring.hpp:62
#define TMPL
Definition: polynomial_tensor.hpp:21
self_t variable_t
Definition: polynomial_tensor.hpp:56
Definition: polynomial.hpp:34
Definition: tensor_monomials.hpp:18
TMPL POLYNOMIAL
Definition: polynomial_operators.hpp:148
ring< C, MonomialTensor > Ring
Definition: polynomial_tensor.hpp:38
Definition: polynomial.hpp:37
polynomial< C, with< B, O > > Polynomial
Definition: ring.hpp:50
int nbvar() const
Definition: variables.hpp:90
Generic ring class.
Definition: polynomial_bernstein.hpp:66
polynomial< C, with< MonomialTensor > > Polynomial
Definition: polynomial_tensor.hpp:37
monom< C > Monomial
Definition: polynomial_tensor.hpp:36
double C
Definition: solver_mv_fatarcs.cpp:16
static int nbvar()
Definition: polynomial_tensor.hpp:62
void assign(A &a, const B &b)
Generic definition of the assignement function.
Definition: assign.hpp:97
Monomial class.
Definition: monomial.hpp:62
tensor::monomials< C > rep_t
Definition: polynomial_tensor.hpp:40
Polynomial operator[](int i) const
Definition: polynomial_tensor.hpp:64
Definition: array.hpp:12
Definition: variables.hpp:65
Definition: polynomial.hpp:40
ring< C, MonomialTensor > Ring
Definition: polynomial_tensor.hpp:71
TMPL Seq< typename ring< C, Bernstein >::Polynomial > coefficients(const typename ring< C, Bernstein >::Polynomial &pol, int v)
Definition: polynomial_bernstein.hpp:74
Home