realroot_doc 0.1.1
eenv_base Struct Reference

#include <bernstein_eenv.hpp>

Inheritance diagram for eenv_base:
eenv

List of all members.

Public Types

Public Member Functions

Public Attributes

Protected Member Functions


Detailed Description

Definition at line 24 of file bernstein_eenv.hpp.


Member Typedef Documentation

typedef int sz_t

Reimplemented in eenv.

Definition at line 26 of file bernstein_eenv.hpp.


Constructor & Destructor Documentation

eenv_base ( sz_t  nvr = 0) [inline]

Definition at line 35 of file bernstein_eenv.hpp.

{ m_nvr = nvr; };

Member Function Documentation

void compute_strides ( ) [inline, protected]

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]

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 eval ( real_t *  data,
const real_t *  prm,
real_t *  chunk = 0 
) [inline]

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]

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]

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]

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]

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]);
    };
void lrestrict ( real_t *  data,
int  v,
const real_t &  mn 
) [inline]

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,
sz_t  v 
) const [inline]

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];
        };
    };
void maxs ( real_t *  _maxs_,
real_t const *const  data 
) const [inline]

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 meval ( X &  res,
real_t *  data,
const X *  prm 
) const [inline]

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,
sz_t  v 
) const [inline]

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];
        };
    };
void mins ( real_t *  _mins_,
real_t const *const  data 
) const [inline]

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];}; };
real_t monoms_eval ( real_t *  data,
const real_t *  prm 
) const [inline]

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;
    };
sz_t nvars ( ) const [inline]
void rrestrict ( real_t *  data,
int  v,
const real_t &  mx 
) [inline]

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]);
    };
void scale ( real_t *  data) [inline]

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]

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]

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]

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]

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]

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]];
    };
sz_t sz ( sz_t  v) const [inline]

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]

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]

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]);
    };

Member Data Documentation


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