Developer documentation

bernstein_bzenv.hpp
Go to the documentation of this file.
1 /********************************************************************
2  * This file is part of the source code of the realroot library.
3  * Author(s): J.P. Pavone, GALAAD, INRIA
4  * $Id: bzenv.hpp,v 1.1 2005/07/11 10:03:55 jppavone Exp $
5  ********************************************************************/
6 #ifndef realroot_SOLVE_SBDSLV_BERNSTEIN_BZENV_H
7 #define realroot_SOLVE_SBDSLV_BERNSTEIN_BZENV_H
8 //--------------------------------------------------------------------
11 //====================================================================
12 namespace mmx {
13 //--------------------------------------------------------------------
14 namespace bernstein
15 {
16  template<class X>
17  struct bzenv
18  {
19  typedef int size_t;
21  static bzenv * const _default_ ;//= (bzenv*)(&(binomials<X>::_default_));
22 
23  bzenv( int n = 100 ) : m_bins(n) {};
24 
26  template< typename T >
27  void scale( T * bzc, size_t sz, int st = 1 )
28  {
29  X * bins = m_bins.get(sz-1);
30  int p = 0;
31  for ( size_t i = 0; i < sz; i++, p += st ) bzc[p] *= bins[i];
32  };
33 
35  template< typename T >
36  void uscale( T * bzc, size_t sz, int st = 1 )
37  {
38  X * bins = m_bins.get(sz-1);
39  int p = 0;
40  for ( int i = 0; i < sz; i++, p+= st ) bzc[p] /= bins[i];
41  };
42 
43 
44  /* degree elevation in scaled bernstein basis */
45  template < typename T >
46  void scaled_elevate( T * dst, T * src, size_t sz, int sts, int stdst, size_t n )
47  {
48  X * bins = m_bins.get(n);
49  vctops::convolution( dst, src, bins, sz, n+1, sts, 1, stdst );
50  };
51 
52  /* degree elevation in bernstein basis */
53  template < typename T >
54  void elevate( T * dst, T * src, size_t sz, int sts, int stdst, size_t n )
55  {
56  scale(src,sz,sts);
57  scaled_elevate(dst,src,sz,sts,stdst,n);
58  uscale(src,sz,sts);
59  uscale(dst,sz+n,stdst);
60  };
61 
62  /* bernstein basis -> monomial basis conversion */
63  template< typename T >
64  void toMonoms ( T * bzc, size_t sz, int st = 1 )
65  {
66  int i,k;
67  for ( i = st; i != sz*st; i += st )
68  for ( k = (sz-1)*st; k != i-st; k -= st )
69  bzc[k] -= bzc[k-st];
70  scale(bzc,sz,st);
71  };
72 
73  /* monomials basis -> bernstein basis conversion */
74  template< typename T > inline
75  void fromMonomsToScaled( T * bzc, size_t sz, int st )
76  {
77  T tmp[sz];
78  int i,k,p,l;
79  X * bin;
80  for ( p = 0, i = 0; i < sz; i++, p += st )
81  { tmp[i] = bzc[p]; bzc[p] = 0; };
82  for ( p = 0, i = 0; i < sz; i++, p += st )
83  {
84  bin = m_bins.get( sz-i-1 );
85  for ( l = p, k = 0; k < sz-i; k++, l += st )
86  bzc[l] += tmp[i]*bin[k];
87  };
88  };
89 
90  template< typename T > inline
91  void fromMonoms( T * bzc, size_t sz, int st = 1 )
92  {
93  fromMonomsToScaled( bzc, sz, st );
94  uscale(bzc,sz,st);
95  };
96  X * get( size_t i ) { return m_bins.get(i); };
97  const X& binomial( size_t n, size_t i ) { return m_bins.binomial(n,i); };
98  };
99  template<class X>
100  bzenv<X> * const bzenv<X>::_default_ = (bzenv<X>*)(&(binomials<X>::_default_));
101 };
102 //--------------------------------------------------------------------
103 } //namespace mmx
104 /********************************************************************/
105 #endif //
void fromMonoms(T *bzc, size_t sz, int st=1)
Definition: bernstein_bzenv.hpp:91
TMPL X
Definition: polynomial_operators.hpp:148
void fromMonomsToScaled(T *bzc, size_t sz, int st)
Definition: bernstein_bzenv.hpp:75
void scaled_elevate(T *dst, T *src, size_t sz, int sts, int stdst, size_t n)
Definition: bernstein_bzenv.hpp:46
int size_t
Definition: bernstein_bzenv.hpp:19
const X & binomial(size_t n, size_t i)
Definition: bernstein_bzenv.hpp:97
static bzenv *const _default_
Definition: bernstein_bzenv.hpp:21
T * get(unsigned i)
Definition: bernstein_binomials.hpp:33
binomials< X > m_bins
Definition: bernstein_bzenv.hpp:20
void convolution(U *dst, Y const *a, Z const *b, unsigned sza, unsigned szb, int sta=1, int stb=1, int stout=1)
Definition: loops_vctops.hpp:220
const T & binomial(unsigned n, unsigned i)
Definition: bernstein_binomials.hpp:45
void toMonoms(T *bzc, size_t sz, int st=1)
Definition: bernstein_bzenv.hpp:64
void scale(T *bzc, size_t sz, int st=1)
Definition: bernstein_bzenv.hpp:27
Definition: binomials.hpp:68
bzenv(int n=100)
Definition: bernstein_bzenv.hpp:23
void elevate(T *dst, T *src, size_t sz, int sts, int stdst, size_t n)
Definition: bernstein_bzenv.hpp:54
Definition: bernstein_bzenv.hpp:17
void uscale(T *bzc, size_t sz, int st=1)
Definition: bernstein_bzenv.hpp:36
Definition: array.hpp:12
Home