realroot_doc 0.1.1
eenv Struct Reference

#include <bernstein_eenv.hpp>

Inheritance diagram for eenv:
eenv_base

List of all members.

Classes

Public Types

Public Member Functions

Static Public Member Functions

Public Attributes

Protected Member Functions


Detailed Description

Definition at line 246 of file bernstein_eenv.hpp.


Member Typedef Documentation

Reimplemented from eenv_base.

Definition at line 248 of file bernstein_eenv.hpp.


Constructor & Destructor Documentation

eenv ( ) [inline]

Definition at line 264 of file bernstein_eenv.hpp.

{};
eenv ( sz_t  szu,
sz_t  szv 
) [inline]

Definition at line 265 of file bernstein_eenv.hpp.

    {
      _alloc_(2);
      m_szs[0] = szu; m_szs[1] = szv;
      m_vrs[0] = 0; m_vrs[1] = 1;
      m_mxvr = 1;
      compute_strides();
      m_pszs[-1] = 0;
      for ( sz_t v = 0; v < m_nvr; v ++ )
        m_pszs[v] = m_pszs[v-1] + m_szs[v];
    };
eenv ( sz_t  nvr,
sz_t const *  szs,
sz_t const *  vrs 
) [inline]

Definition at line 277 of file bernstein_eenv.hpp.

References eenv::_alloc_(), eenv_base::compute_strides(), eenv_base::copy(), eenv::m_mxvr, eenv_base::m_nvr, eenv::m_pszs, eenv_base::m_szs, and eenv::m_vrs.

    {
      _alloc_(nvr);
      std::copy(szs,szs+m_nvr,m_szs);
      std::copy(vrs,vrs+m_nvr,m_vrs);
      compute_strides();
      m_pszs[-1] = 0;
      m_mxvr = m_vrs[0];
      for (sz_t v = 0; v < m_nvr; v ++ ) if ( m_vrs[v] > m_mxvr ) m_mxvr = m_vrs[v];
      for ( sz_t v = 0; v < m_nvr; v ++ )
        m_pszs[v] = m_pszs[v-1] + m_szs[v];
    };
~eenv ( ) [inline]

Definition at line 302 of file bernstein_eenv.hpp.

References eenv_base::m_nvr, eenv_base::m_szs, and eenv_base::nvars().

Referenced by eenv::diff().

    {
      if ( nvars() ) delete[] m_szs;
      m_nvr = 0;
    };

Member Function Documentation

void _alloc_ ( sz_t  nvr) [inline]

Definition at line 256 of file bernstein_eenv.hpp.

References eenv_base::m_nvr.

Referenced by eenv::diff(), eenv::eenv(), and eenv::mcrossp().

    {
      m_nvr  = nvr;  
      m_szs  = new sz_t[4*m_nvr+2]; 
      m_vrs  = m_szs + m_nvr;
      m_str  = m_vrs + m_nvr + 1;
      m_pszs = m_str + m_nvr + 1;
    };
static void _mvrcvloop_ ( bernstein::eenv oenv,
real_t *  dst,
bernstein::eenv aenv,
real_t *  sra,
bernstein::eenv benv,
real_t *  srb,
unsigned *  asupp = 0,
unsigned  nas = 0,
unsigned *  oasup = 0,
unsigned *  bsupp = 0,
unsigned  nbs = 0,
unsigned *  obsup = 0 
) [inline, static]

operations sous forme monomiale

Definition at line 91 of file bernstein_eenv.hpp.

References eenv_base::copy(), eenv_base::data_size(), mmx::upoldse_::horner(), eenv_base::m_str, eenv_base::m_szs, and eenv_base::nvars().

    {
      sz_t i;
      X * tmp = new X[ data_size() ];
      std::copy(data,data+data_size(),tmp);
      for ( int v = nvars()-1; v >= 0 ; v -- )
        for ( i = 0; i < data_size(); i += m_str[v-1] )
          *(tmp+i) = univariate::horner(tmp+i,m_szs[v],prm[v],m_str[v]);
      res = tmp[0];
      delete[] tmp;
    };
    
    template<typename real_t>
    real_t monoms_eval( real_t * data,  const real_t *  prm  ) const
    {
      sz_t i;
      real_t * tmp = new real_t[ data_size() ];
      std::copy(data,data+data_size(), tmp );
      for ( int v = nvars()-1; v >= 0 ; v -- )
        for ( i = 0; i < data_size(); i += m_str[v-1] )
          *(tmp+i) = upoldse::horner(tmp+i,m_szs[v],prm[v],m_str[v]);
      real_t val = tmp[0];
      delete[] tmp;
      return val;
    };
    
     
    template<typename real_t>
    void mins( real_t * _mins_, real_t const * const data, sz_t v ) const 
    {
      sz_t p,k,i,j;
      for ( p = 0, k = 0; k < m_szs[v]; k++, p += m_str[v] )
        {
          _mins_[k] = data[p];
          for ( i = 0; i < data_size(); i += m_str[v-1] )
            for ( j = i; j < i + m_str[v]; j ++ )
              if ( data[j+p] < _mins_[k] ) _mins_[k] = data[j+p];
        };
    };
    
    template<typename real_t>
    void maxs( real_t * _maxs_, real_t const * const data, sz_t v ) const 
    {
      sz_t p,k,i,j;

      for ( p = 0, k = 0; k < m_szs[v]; k++, p += m_str[v] )
        {
          _maxs_[k] = data[p];
          for ( i = 0; i < data_size(); i += m_str[v-1] )
            for ( j = i; j < i + m_str[v]; j ++ )
              if ( data[j+p] > _maxs_[k] ) _maxs_[k] = data[j+p];
        };
    };
        
    template<typename real_t>
    inline void maxs( real_t * _maxs_, real_t const  * const data ) const 
    { for ( sz_t v = 0; v < m_nvr; v ++ ) { maxs(_maxs_,data,v); _maxs_ += m_szs[v];}; };

    template<typename real_t>
    inline void mins( real_t * _mins_, real_t const  * const data ) const 
    { for ( sz_t v = 0; v < m_nvr; v ++ ) { mins(_mins_,data,v); _mins_ += m_szs[v];}; };

    template<typename real_t> 
    void split( real_t * left, real_t * right, int v, const real_t& t )
    {
      int i,j,k;
      for ( i = 0; i < data_size(); i += m_str[v-1] )
        for ( j = i; j < i + m_str[v]; j++ )
          split(left+j,right+j,m_szs[v],m_str[v],t);
    };
  
    template<typename real_t>
    void split2( real_t * left, real_t * right, int v )
    {
      int i,j;
      for ( i = 0; i < data_size(); i += m_str[v-1] )
        for ( j = i; j < i + m_str[v]; j++ )
          split2(left+j,right+j,m_szs[v],m_str[v]);
    };
    
    template<typename real_t>
    void lrestrict( real_t * data, int v, const real_t& mn )
    {
      sz_t i,j;
      for ( i = 0; i < data_size(); i += m_str[v-1] )
        for ( j = i; j < i + m_str[v]; j++ )
          brnops::lrestrict(data+j,m_szs[v],mn,m_str[v]);
    };
    
    template<typename real_t>
    void rrestrict( real_t * data, int v, const real_t& mx )
void compute_strides ( ) [inline, protected, inherited]

Definition at line 29 of file bernstein_eenv.hpp.

References eenv_base::m_nvr, eenv_base::m_str, and eenv_base::m_szs.

Referenced by eenv::eenv(), eenv::mcrossp(), and eenv_base::set_szs().

    {
      m_str[m_nvr-1] = 1;    
      for ( int i = m_nvr-2; i >= -1; i-- ) m_str[i] = m_szs[i+1]*m_str[i+1];
    };
void copy ( X *  dst,
real_t const *const  src 
) [inline, inherited]

Definition at line 53 of file bernstein_eenv.hpp.

References eenv_base::data_size().

Referenced by eenv::_mvrcvloop_(), eenv::diff(), eenv::eenv(), eenv_base::monoms_eval(), and eenv::vmap().

{ std::copy(src, src + data_size(), dst ); };
real_t density ( real_t *  src,
const real_t  prec = 1e-12,
unsigned  nsmp = 0 
) [inline]

Definition at line 9 of file bernstein_eenv.hpp.

              {
//--------------------------------------------------------------------
#ifndef _valueof_ 
#define _valueof_(x) std::cout << #x" = " << (x) << std::endl;
#endif

namespace bernstein
{
  struct eenv_base
void diff ( eenv e,
sz_t  v 
) [inline]

Definition at line 322 of file bernstein_eenv.hpp.

References eenv::_alloc_(), eenv_base::copy(), eenv::m_mxvr, eenv_base::m_nvr, eenv_base::m_szs, eenv::m_vrs, eenv_base::nvars(), eenv_base::sz(), and eenv::~eenv().

Referenced by eenv::monoms_derivative().

    {
      if ( nvars () ) this->~eenv();
      _alloc_( e->nvars() );
      std::copy( e->m_vrs, e->m_vrs+e->nvars(), m_vrs );
      m_mxvr = e->m_mxvr;
      for  ( sz_t i = 0; i < m_nvr; m_szs[i] = e->sz(i), i ++ );
      m_szs[v]--;
      compute_strides();
    };
static void elevation ( eenv out,
eenv in 
) [inline, static]

Definition at line 402 of file bernstein_eenv.hpp.

    {
      
    };
static void elevation ( eenv out,
eenv in,
real_t *  dst,
real_t *  src,
bzenv< real_t > *  bznv = bzenv<real_t>::_default_ 
) [inline, static]

Definition at line 407 of file bernstein_eenv.hpp.

References eenv_base::data_size(), eenv_base::m_str, and eenv_base::m_szs.

    {
      sz_t io = 0;
      sz_t v  = 0;
      for ( sz_t i = 0; i < in->data_size(); i += in->m_str[v-1], io += out->m_str[v-1] )
        for ( sz_t j = 0; j < in->m_str[v]; j ++ )
          bznv->elevate( dst + io + j, src + i + j , in->m_szs[v], in->m_str[v], out->m_str[v], out->m_szs[v]-in->m_szs[v] );
    };
real_t eval ( real_t *  data,
const real_t *  prm,
real_t *  chunk = 0 
) [inline, inherited]

Definition at line 56 of file bernstein_eenv.hpp.

    {
      sz_t i,j;
      real_t * tmp;
      if ( chunk ) tmp = chunk; 
      else tmp = new real_t[ data_size() ];
      std::copy(data,data+data_size(), tmp );
      for ( int v = nvars()-1; v >= 0 ; v -- )
        for ( i = 0; i <data_size(); i += m_str[v-1] )
          brnops::decasteljau(tmp+i,m_szs[v],prm[v],m_str[v]);
      real_t val = tmp[0];
      if ( !chunk ) delete[] tmp;
      return val;
    };
real_t flatness ( real_t *  data,
int  v 
) [inline, inherited]

Definition at line 233 of file bernstein_eenv.hpp.

References eenv_base::data_size(), eenv_base::m_str, eenv_base::m_szs, and mmx::vctops::max().

    {
      real_t m = 10;
      sz_t i,j;
      for ( i = 0; i < data_size(); i += m_str[v-1] )
        for ( j = i; j < i + m_str[v]; j++ )
          std::max(m,flatness(data+j,m_szs[v],m_str[v]) );
      return m;
    };
void fromMonoms ( real_t *  data,
sz_t  v,
bzenv< real_t > *  env = bzenv<real_t>::_default_ 
) [inline, inherited]

Definition at line 201 of file bernstein_eenv.hpp.

    {
      sz_t i,j;
      for ( i = 0; i < data_size(); i += m_str[v-1] )
        for ( j = i; j < i + m_str[v]; j++ )
          env->fromMonoms(data+j,m_szs[v],m_str[v]);
    };
void fromMonoms ( real_t *  data,
bzenv< real_t > *  env = bzenv<real_t>::_default_ 
) [inline, inherited]

Definition at line 209 of file bernstein_eenv.hpp.

References eenv_base::fromMonoms(), and eenv_base::m_nvr.

Referenced by eenv_base::fromMonoms().

{ for ( sz_t v = 0; v < m_nvr; fromMonoms(data,v,env), v++ ); };
void hodograph ( real_t *  dst,
real_t *  src,
int  v 
) [inline, inherited]

Definition at line 42 of file bernstein_eenv.hpp.

References eenv_base::data_size(), mmx::brnops::hodograph(), eenv_base::m_str, and eenv_base::m_szs.

    {
      int i,j;
      int k;
      int kstr = (m_szs[v]-1)*m_str[v];
      for ( k = i = 0; i < data_size(); i += m_str[v-1], k += kstr )
        for ( j = 0; j < m_str[v]; j++ )
          brnops::hodograph(dst+k+j,src+i+j,m_szs[v],m_str[v]);
    };
int indexofvar ( sz_t  gv) const [inline]

Definition at line 311 of file bernstein_eenv.hpp.

    {
      //      if ( gv < m_vrs[0] ||  gv > m_vrs[m_nvr-1] ) return -1;
      // remplacer par dichotomie ?
      for ( sz_t v = 0; v < m_nvr; v ++ )
        if ( m_vrs[v] == gv ) return v;
      return -1;
    };
void lrestrict ( real_t *  data,
int  v,
const real_t &  mn 
) [inline, inherited]

Definition at line 173 of file bernstein_eenv.hpp.

References eenv_base::data_size(), mmx::brnops::lrestrict(), eenv_base::m_str, and eenv_base::m_szs.

    {
      sz_t i,j;
      for ( i = 0; i < data_size(); i += m_str[v-1] )
        for ( j = i; j < i + m_str[v]; j++ )
          brnops::lrestrict(data+j,m_szs[v],mn,m_str[v]);
    };
void maxs ( real_t *  _maxs_,
real_t const *const  data 
) const [inline, inherited]

Definition at line 145 of file bernstein_eenv.hpp.

References eenv_base::m_nvr, eenv_base::m_szs, and eenv_base::maxs().

Referenced by eenv_base::maxs().

    { for ( sz_t v = 0; v < m_nvr; v ++ ) { maxs(_maxs_,data,v); _maxs_ += m_szs[v];}; };
void maxs ( real_t *  _maxs_,
real_t const *const  data,
sz_t  v 
) const [inline, inherited]

Definition at line 131 of file bernstein_eenv.hpp.

References eenv_base::data_size(), eenv_base::m_str, and eenv_base::m_szs.

    {
      sz_t p,k,i,j;

      for ( p = 0, k = 0; k < m_szs[v]; k++, p += m_str[v] )
        {
          _maxs_[k] = data[p];
          for ( i = 0; i < data_size(); i += m_str[v-1] )
            for ( j = i; j < i + m_str[v]; j ++ )
              if ( data[j+p] > _maxs_[k] ) _maxs_[k] = data[j+p];
        };
    };
static void mcrossp ( eenv oenv,
real_t **  dst,
eenv aenv,
real_t **  src_a,
eenv benv,
real_t **  src_b,
bool  clear = true,
unsigned *  asupp = 0,
unsigned  nas = 0,
unsigned *  oasup = 0,
unsigned *  bsupp = 0,
unsigned  nbs = 0,
unsigned *  obsup = 0 
) [inline, static]

Definition at line 266 of file bernstein_eenv.hpp.

References eenv::_alloc_(), eenv_base::compute_strides(), eenv::m_mxvr, eenv_base::m_nvr, eenv::m_pszs, eenv_base::m_szs, and eenv::m_vrs.

    {
      _alloc_(2);
      m_szs[0] = szu; m_szs[1] = szv;
      m_vrs[0] = 0; m_vrs[1] = 1;
      m_mxvr = 1;
      compute_strides();
      m_pszs[-1] = 0;
      for ( sz_t v = 0; v < m_nvr; v ++ )
        m_pszs[v] = m_pszs[v-1] + m_szs[v];
    };
    
    eenv( sz_t nvr, sz_t const * szs, sz_t const * vrs )
    {
      _alloc_(nvr);
      std::copy(szs,szs+m_nvr,m_szs);
      std::copy(vrs,vrs+m_nvr,m_vrs);
      compute_strides();
      m_pszs[-1] = 0;
      m_mxvr = m_vrs[0];
      for (sz_t v = 0; v < m_nvr; v ++ ) if ( m_vrs[v] > m_mxvr ) m_mxvr = m_vrs[v];
      for ( sz_t v = 0; v < m_nvr; v ++ )
        m_pszs[v] = m_pszs[v-1] + m_szs[v];
    };
static void mcrossp ( eenv res,
eenv a,
eenv b,
real_t **  dst,
real_t **  src_a,
real_t **  src_b 
) [inline, static]

Definition at line 314 of file bernstein_eenv.hpp.

    {
static void mdiff ( eenv res,
eenv a,
real_t *  dst,
real_t const *const  src,
int  v 
) [inline, static]

Definition at line 334 of file bernstein_eenv.hpp.

References eenv_base::data_size(), mmx::brnops::diff(), eenv_base::m_str, and eenv_base::sz().

Referenced by eenv::monoms_derivative().

    {
      sz_t is = 0;
      for ( sz_t i = 0; i < res->data_size(); i += res->m_str[v-1], is += a->m_str[v-1] )
        for ( sz_t j = 0; j < a->m_str[v]; j ++ )
          upoldse::diff(dst+i+j,src+is+j,a->sz(v),a->m_str[v]);
    };
static void mdotp ( eenv oenv,
real_t *  dst,
eenv aenv,
real_t **  src_a,
eenv benv,
real_t **  src_b,
int  n,
bool  clear = true,
unsigned *  asupp = 0,
unsigned  nas = 0,
unsigned *  oasup = 0,
unsigned *  bsupp = 0,
unsigned  nbs = 0,
unsigned *  obsup = 0 
) [inline, static]

Definition at line 329 of file bernstein_eenv.hpp.

    {
      sz_t is = 0;
      for ( sz_t i = 0; i < res->data_size(); i += res->m_str[v-1], is += a->m_str[v-1] )
        for ( sz_t j = 0; j < a->m_str[v]; j ++ )
          upoldse::diff(dst+i+j,src+is+j,a->sz(v),a->m_str[v]);
    };
    
    template<typename real_t>
    static void monoms_derivative(eenv * res, eenv * a, real_t ** dst, real_t ** src, int v, int n = 1 )
    {
      res->diff(a,v);
      for ( int c = 0; c < n; c ++ )
        {
void meval ( X &  res,
real_t *  data,
const X *  prm 
) const [inline, inherited]

Definition at line 90 of file bernstein_eenv.hpp.

    {
      sz_t i;
      X * tmp = new X[ data_size() ];
      std::copy(data,data+data_size(),tmp);
      for ( int v = nvars()-1; v >= 0 ; v -- )
        for ( i = 0; i < data_size(); i += m_str[v-1] )
          *(tmp+i) = univariate::horner(tmp+i,m_szs[v],prm[v],m_str[v]);
      res = tmp[0];
      delete[] tmp;
    };
void mins ( real_t *  _mins_,
real_t const *const  data 
) const [inline, inherited]

Definition at line 149 of file bernstein_eenv.hpp.

References eenv_base::m_nvr, eenv_base::m_szs, and eenv_base::mins().

Referenced by eenv_base::mins().

    { for ( sz_t v = 0; v < m_nvr; v ++ ) { mins(_mins_,data,v); _mins_ += m_szs[v];}; };
void mins ( real_t *  _mins_,
real_t const *const  data,
sz_t  v 
) const [inline, inherited]

Definition at line 118 of file bernstein_eenv.hpp.

References eenv_base::data_size(), eenv_base::m_str, and eenv_base::m_szs.

    {
      sz_t p,k,i,j;
      for ( p = 0, k = 0; k < m_szs[v]; k++, p += m_str[v] )
        {
          _mins_[k] = data[p];
          for ( i = 0; i < data_size(); i += m_str[v-1] )
            for ( j = i; j < i + m_str[v]; j ++ )
              if ( data[j+p] < _mins_[k] ) _mins_[k] = data[j+p];
        };
    };
static void mmul ( eenv oenv,
real_t *  dst,
eenv aenv,
real_t *  src_a,
eenv benv,
real_t *  src_b,
bool  clear = true,
unsigned *  asupp = 0,
unsigned  nas = 0,
unsigned *  oasupp = 0,
unsigned *  bsupp = 0,
unsigned  nbs = 0,
unsigned *  obsupp = 0 
) [inline, static]

Definition at line 232 of file bernstein_eenv.hpp.

    {
      real_t m = 10;
      sz_t i,j;
      for ( i = 0; i < data_size(); i += m_str[v-1] )
        for ( j = i; j < i + m_str[v]; j++ )
static void monoms_crossprod ( eenv res,
eenv a,
eenv b,
real_t **  dst,
real_t **  src_a,
real_t **  src_b 
) [inline, static]

Definition at line 318 of file bernstein_eenv.hpp.

    {
      if ( nvars () ) this->~eenv();
      _alloc_( e->nvars() );
static void monoms_derivative ( eenv res,
eenv a,
real_t **  dst,
real_t **  src,
int  v,
int  n = 1 
) [inline, static]

Definition at line 343 of file bernstein_eenv.hpp.

References eenv_base::data_size(), eenv::diff(), and eenv::mdiff().

    {
      res->diff(a,v);
      for ( int c = 0; c < n; c ++ )
        {
          dst[c] = new real_t[ res->data_size() ];
          mdiff( res, a, dst[c], src[c], v );
        };
    };
static void monoms_dotprod ( eenv res,
eenv a,
eenv b,
real_t *&  dst,
real_t **  src_a,
real_t **  src_b,
int  n 
) [inline, static]

Definition at line 350 of file bernstein_eenv.hpp.

real_t monoms_eval ( real_t *  data,
const real_t *  prm 
) const [inline, inherited]

Definition at line 103 of file bernstein_eenv.hpp.

References eenv_base::copy(), eenv_base::data_size(), mmx::upoldse_::horner(), eenv_base::m_str, eenv_base::m_szs, and eenv_base::nvars().

    {
      sz_t i;
      real_t * tmp = new real_t[ data_size() ];
      std::copy(data,data+data_size(), tmp );
      for ( int v = nvars()-1; v >= 0 ; v -- )
        for ( i = 0; i < data_size(); i += m_str[v-1] )
          *(tmp+i) = upoldse::horner(tmp+i,m_szs[v],prm[v],m_str[v]);
      real_t val = tmp[0];
      delete[] tmp;
      return val;
    };
static void monoms_multiply ( bernstein::eenv res,
bernstein::eenv a,
bernstein::eenv b,
real_t *  dst,
real_t *  src_a,
real_t *  src_b 
) [inline, static]

Definition at line 207 of file bernstein_eenv.hpp.

                                                                                          { for ( sz_t v = 0; v < m_nvr; fromMonoms(data,v,env), v++ ); };
static void monoms_multiply_loop ( eenv o,
eenv a,
eenv b,
real_t *  dst,
real_t *  src_a,
real_t *  src_b 
) [inline, static]

Definition at line 203 of file bernstein_eenv.hpp.

void monoms_print ( std::ostream &  o,
real_t *  src 
) [inline]

Definition at line 373 of file bernstein_eenv.hpp.

References eenv_base::data_size(), mmx::vct::fill(), eenv::m_mxvr, eenv_base::m_szs, eenv_base::nvars(), eenv::print_monom(), and eenv::var().

    {
      unsigned i;
      unsigned mcount = 0;
      int c;
      sz_t add[m_mxvr+1];
      std::fill(add,add+m_mxvr+1,0);
      bool first = true;
      for ( i = 0; i < data_size(); i ++ )
        {
          bool b = print_monom(o,src[i],add,first);
          if ( first && b ) first = false;
          mcount += b;
          c = nvars()-1;
          add[var(c)]++;
          while ( c >0 && (add[var(c)] == m_szs[c])) 
            { 
              add[var(c)] = 0;  
              c--; 
              add[var(c)]++; 
            };
        }
      if ( mcount == 0 ) o << "0";
    };
static void msimplify ( eenv ienv,
real_t *  data 
) [inline, static]

Definition at line 8 of file bernstein_eenv.hpp.

              {
//--------------------------------------------------------------------
#ifndef _valueof_ 
#define _valueof_(x) std::cout << #x" = " << (x) << std::endl;
#endif

namespace bernstein
{
  struct eenv_base
  {
    typedef int  sz_t;
    sz_t  m_nvr, * m_szs, * m_str;
  protected:
    inline void compute_strides()
    {
      m_str[m_nvr-1] = 1;    
      for ( int i = m_nvr-2; i >= -1; i-- ) m_str[i] = m_szs[i+1]*m_str[i+1];
    };
  public:
    eenv_base( sz_t nvr = 0 ) { m_nvr = nvr; };
    inline void   set_szs( sz_t * szs ) { m_szs = szs; compute_strides();  };    
    inline sz_t sz( sz_t v  ) const { return m_szs[v]; };
    inline sz_t nvars()     const { return m_nvr; };
    inline sz_t data_size() const { return m_str[-1]; };

    template<typename real_t>
    void hodograph( real_t * dst, real_t * src, int v  )
sz_t nvars ( ) const [inline, inherited]
static void oaddress ( bernstein::eenv oenv,
unsigned *  osupp,
bernstein::eenv ienv,
unsigned *  isupp = 0,
unsigned  nsp = 0 
) [inline, static]

Definition at line 67 of file bernstein_eenv.hpp.

    {
      sz_t v, lg, d;
      unsigned i,add,o;
      lg = 0;
      for ( v = 0; v < m_nvr; v ++ ) if ( m_szs[v] > m_szs[lg] ) lg = v;
      X powers [m_nvr][m_szs[lg]];
      X acc;
      for ( v = 0; v < m_nvr; v ++ )
        for ( powers[v][0] = 1.0, d = 1; d < m_szs[v]; powers[v][d] = prm[v]*powers[v][d-1], d ++ );
      res = 0;
      for ( i = 0; i < nsupp; res += acc, i ++ )
        for ( add = supp[i], acc = src[add], v = m_nvr-1; add; add /= m_szs[v], v -- )
          acc *= powers[v][add%m_szs[v]];
    };
void op_mul ( eenv a,
eenv b 
) [inline]

Definition at line 38 of file bernstein_eenv.hpp.

References eenv_base::m_nvr.

                                  { return m_nvr; };
    inline sz_t data_size() const { return m_str[-1]; };

    template<typename real_t>
    void hodograph( real_t * dst, real_t * src, int v  )
    {
      int i,j;
      int k;
      int kstr = (m_szs[v]-1)*m_str[v];
      for ( k = i = 0; i < data_size(); i += m_str[v-1], k += kstr )
        for ( j = 0; j < m_str[v]; j++ )
          brnops::hodograph(dst+k+j,src+i+j,m_szs[v],m_str[v]);
    };
    
    template<typename X, typename real_t>
    void copy( X * dst, real_t const * const src ) { std::copy(src, src + data_size(), dst ); };
static void pmmul ( eenv oenv,
real_t **  dst,
eenv aenv,
real_t **  src_a,
eenv benv,
real_t **  src_b,
int  n,
bool  clear = true,
unsigned *  asupp = 0,
unsigned  nas = 0,
unsigned *  oasup = 0,
unsigned *  bsupp = 0,
unsigned  nbs = 0,
unsigned *  obsup = 0 
) [inline, static]

Definition at line 213 of file bernstein_eenv.hpp.

    {
      sz_t i,j;
      for ( i = 0; i < data_size(); i += m_str[v-1] )
        for ( j = i; j < i + m_str[v]; j++ )
          env->toMonoms(data+j,m_szs[v],m_str[v]);
    };
    template< typename real_t >  /* conversion complete */
    inline void toMonoms(  real_t * data, bzenv<real_t> * env = bzenv<real_t>::_default_ ) { for ( sz_t v = 0; v < m_nvr; toMonoms(data,v,env), v ++ ); };
    
//     template< typename real_t >
//     void mshift( real_t * data, real_t * prm )
//     {
//       sz_t i,j;
//       for ( i = 0; i < data_size(); i += m_str[v-1] )
//      for ( j = i; j < i + m_str[v]; j++ )
//        upoldse::shift(data+j,m_szs[v],m_str[v],prm[v]);
bool print_monom ( std::ostream &  o,
const real_t &  c,
sz_t add,
bool  first 
) [inline]

Definition at line 357 of file bernstein_eenv.hpp.

Referenced by eenv::monoms_print().

    {
      if ( c ) 
        {
          if ( c < 0 )  o << "-";
          else 
            if ( ! first ) o << "+";
          o << std::abs(c);
          for ( sz_t v = 0; v < nvars(); v ++ )
            if ( add[var(v)] ) o << "*x" << var(v) << "^" << add[var(v)];
          return true;
        };
      return false;
    };
sz_t psft ( sz_t  v) [inline]

Definition at line 300 of file bernstein_eenv.hpp.

References eenv::m_pszs.

{ return m_pszs[v-1];}
sz_t psz ( ) [inline]

Definition at line 299 of file bernstein_eenv.hpp.

References eenv_base::m_nvr, and eenv::m_pszs.

{ return m_pszs[m_nvr-1]; };
void rrestrict ( real_t *  data,
int  v,
const real_t &  mx 
) [inline, inherited]

Definition at line 182 of file bernstein_eenv.hpp.

References eenv_base::data_size(), eenv_base::m_str, eenv_base::m_szs, and mmx::brnops::rrestrict().

    {
      int i,j;
      for ( i = 0; i < data_size(); i += m_str[v-1] )
        for ( j = i; j < i + m_str[v]; j++ )
          brnops::rrestrict(data+j,m_szs[v],mx,m_str[v]);
    };
static void rvbinoms ( bernstein::eenv ienv,
real_t *  bcff,
unsigned *  isupp = 0,
unsigned  nsp = 0,
bernstein::bzenv< real_t > *  bznv = bzenv<real_t>::_default_ 
) [inline, static]

operations sous forme de bernstein

Definition at line 361 of file bernstein_eenv.hpp.

    {
      unsigned i;
void scale ( real_t *  data) [inline, inherited]

Definition at line 194 of file bernstein_eenv.hpp.

References eenv_base::data_size().

{ vctops::scale(data,data_size()); };
void set_szs ( sz_t szs) [inline, inherited]

Definition at line 36 of file bernstein_eenv.hpp.

References eenv_base::compute_strides(), and eenv_base::m_szs.

{ m_szs = szs; compute_strides();  };    
bool sgnchg ( real_t *  data) [inline, inherited]

Definition at line 191 of file bernstein_eenv.hpp.

References eenv_base::data_size().

{ return vctops::sgnchg(data,data_size()); };
void split ( real_t *  left,
real_t *  right,
int  v,
const real_t &  t 
) [inline, inherited]

algorithmes de de Casteljau

Definition at line 155 of file bernstein_eenv.hpp.

References eenv_base::data_size(), eenv_base::m_str, and eenv_base::m_szs.

    {
      int i,j,k;
      for ( i = 0; i < data_size(); i += m_str[v-1] )
        for ( j = i; j < i + m_str[v]; j++ )
          split(left+j,right+j,m_szs[v],m_str[v],t);
    };
void split2 ( real_t *  left,
real_t *  right,
int  v 
) [inline, inherited]

Definition at line 164 of file bernstein_eenv.hpp.

References eenv_base::data_size(), eenv_base::m_str, and eenv_base::m_szs.

    {
      int i,j;
      for ( i = 0; i < data_size(); i += m_str[v-1] )
        for ( j = i; j < i + m_str[v]; j++ )
          split2(left+j,right+j,m_szs[v],m_str[v]);
    };
void spmeval ( X &  res,
real_t *  src,
X *  prm,
unsigned *  supp,
unsigned  nsupp 
) const [inline, inherited]

Definition at line 72 of file bernstein_eenv.hpp.

References mmx::add(), eenv_base::m_nvr, and eenv_base::m_szs.

    {
      sz_t v, lg, d;
      unsigned i,add,o;
      lg = 0;
      for ( v = 0; v < m_nvr; v ++ ) if ( m_szs[v] > m_szs[lg] ) lg = v;
      X powers [m_nvr][m_szs[lg]];
      X acc;
      for ( v = 0; v < m_nvr; v ++ )
        for ( powers[v][0] = 1.0, d = 1; d < m_szs[v]; powers[v][d] = prm[v]*powers[v][d-1], d ++ );
      res = 0;
      for ( i = 0; i < nsupp; res += acc, i ++ )
        for ( add = supp[i], acc = src[add], v = m_nvr-1; add; add /= m_szs[v], v -- )
          acc *= powers[v][add%m_szs[v]];
    };
static void spmmul ( eenv oenv,
real_t **  dst,
eenv aenv,
real_t **  src_a,
eenv benv,
real_t **  src_b,
int  n,
bool  clear = true,
bool  stats = false 
) [inline, static]

Definition at line 241 of file bernstein_eenv.hpp.

              : public eenv_base
  {
    typedef eenv_base::sz_t sz_t;
    struct add
    {
      
    };
    sz_t * m_vrs;
    sz_t * m_pszs;
    sz_t   m_mxvr;
    void _alloc_( sz_t nvr )
static void spmmul ( eenv oenv,
real_t *  dst,
eenv aenv,
real_t *  src_a,
eenv benv,
real_t *  src_b,
bool  clear = true,
bool  stats = false 
) [inline, static]

Definition at line 259 of file bernstein_eenv.hpp.

          {};
sz_t stride ( sz_t  v) const [inline]

Definition at line 308 of file bernstein_eenv.hpp.

References eenv_base::m_str.

{ return m_str[v]; };
unsigned support ( unsigned *  supp,
real_t *  src,
const real_t &  prec = 1e-6 
) [inline]

Definition at line 28 of file bernstein_eenv.hpp.

           :
    inline void compute_strides()
    {
      m_str[m_nvr-1] = 1;    
      for ( int i = m_nvr-2; i >= -1; i-- ) m_str[i] = m_szs[i+1]*m_str[i+1];
    };
  public:
    eenv_base( sz_t nvr = 0 ) { m_nvr = nvr; };
void swap ( eenv e) [inline]

Definition at line 290 of file bernstein_eenv.hpp.

References eenv::m_mxvr, eenv_base::m_nvr, eenv::m_pszs, eenv_base::m_szs, and eenv::m_vrs.

    {
      std::swap(m_nvr,e_m.hpp_nvr);
      std::swap(m_szs,e_m.hpp_szs);
      std::swap(m_vrs,e_m.hpp_vrs);
      std::swap(m_pszs,e_m.hpp_pszs);
      std::swap(m_mxvr,e_m.hpp_mxvr);
    };
sz_t sz ( sz_t  v) const [inline, inherited]

Definition at line 37 of file bernstein_eenv.hpp.

References eenv_base::m_szs.

Referenced by eenv::diff(), and eenv::mdiff().

{ return m_szs[v]; };
void toMonoms ( real_t *  data,
bzenv< real_t > *  env = bzenv<real_t>::_default_ 
) [inline, inherited]

Definition at line 221 of file bernstein_eenv.hpp.

References eenv_base::m_nvr, and eenv_base::toMonoms().

Referenced by eenv_base::toMonoms().

{ for ( sz_t v = 0; v < m_nvr; toMonoms(data,v,env), v ++ ); };
void toMonoms ( real_t *  data,
sz_t  v,
bzenv< real_t > *  env = bzenv<real_t>::_default_ 
) [inline, inherited]

Definition at line 213 of file bernstein_eenv.hpp.

References eenv_base::data_size(), eenv_base::m_str, and eenv_base::m_szs.

    {
      sz_t i,j;
      for ( i = 0; i < data_size(); i += m_str[v-1] )
        for ( j = i; j < i + m_str[v]; j++ )
          env->toMonoms(data+j,m_szs[v],m_str[v]);
    };
static void v0restrict ( real_t *  rs,
bernstein::eenv em,
const real_t &  l 
) [inline, static]

Definition at line 8 of file bernstein_eenv.hpp.

              {
//--------------------------------------------------------------------
#ifndef _valueof_ 
#define _valueof_(x) std::cout << #x" = " << (x) << std::endl;
#endif

namespace bernstein
{
static void v0restrict ( real_t *  rs,
real_t *  ms,
bernstein::eenv em,
const real_t &  l 
) [inline, static]

Definition at line 26 of file bernstein_eenv.hpp.

           :
    inline void compute_strides()
    {
      m_str[m_nvr-1] = 1;    
      for ( int i = m_nvr-2; i >= -1; i-- ) m_str[i] = m_szs[i+1]*m_str[i+1];
sz_t var ( sz_t  v) const [inline]

Definition at line 309 of file bernstein_eenv.hpp.

References eenv::m_vrs.

Referenced by eenv::monoms_print().

{ return m_vrs[v]; };
static void vmap ( sz_t vmap,
bernstein::eenv o,
bernstein::eenv i 
) [inline, static]

Definition at line 56 of file bernstein_eenv.hpp.

References eenv_base::copy(), eenv_base::data_size(), mmx::brnops::decasteljau(), eenv_base::m_str, eenv_base::m_szs, and eenv_base::nvars().

    {
      sz_t i,j;
      real_t * tmp;
      if ( chunk ) tmp = chunk; 
      else tmp = new real_t[ data_size() ];
      std::copy(data,data+data_size(), tmp );
      for ( int v = nvars()-1; v >= 0 ; v -- )
        for ( i = 0; i <data_size(); i += m_str[v-1] )
          brnops::decasteljau(tmp+i,m_szs[v],prm[v],m_str[v]);
static void vrestrict ( bernstein::eenv oenv,
bernstein::eenv ienv,
X *&  dst,
real_t *  src,
sz_t  v,
const X &  prm 
) [inline, static]

Definition at line 35 of file bernstein_eenv.hpp.

References eenv_base::m_nvr.

                              { m_nvr = nvr; };
    inline void   set_szs( sz_t * szs ) { m_szs = szs; compute_strides();  };    
    inline sz_t sz( sz_t v  ) const { return m_szs[v]; };
    inline sz_t nvars()     const { return m_nvr; };
    inline sz_t data_size() const { return m_str[-1]; };

    template<typename real_t>
    void hodograph( real_t * dst, real_t * src, int v  )
    {
      int i,j;
      int k;
      int kstr = (m_szs[v]-1)*m_str[v];
      for ( k = i = 0; i < data_size(); i += m_str[v-1], k += kstr )
        for ( j = 0; j < m_str[v]; j++ )
          brnops::hodograph(dst+k+j,src+i+j,m_szs[v],m_str[v]);
    };
    
    template<typename X, typename real_t>
    void copy( X * dst, real_t const * const src ) { std::copy(src, src + data_size(), dst ); };
    
    template<typename real_t>
    real_t eval( real_t * data,  const real_t *  prm, real_t * chunk =  0 )
    {

Member Data Documentation

Definition at line 254 of file bernstein_eenv.hpp.

Referenced by eenv::eenv(), eenv::mcrossp(), eenv::psft(), eenv::psz(), and eenv::swap().

Definition at line 253 of file bernstein_eenv.hpp.

Referenced by eenv::diff(), eenv::eenv(), eenv::mcrossp(), eenv::swap(), and eenv::var().


The documentation for this struct was generated from the following files: