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.

References eenv_base::m_nvr.

00035 { 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::diff(), eenv::eenv(), and eenv_base::set_szs().

00030     {
00031       m_str[m_nvr-1] = 1;    
00032       for ( int i = m_nvr-2; i >= -1; i-- ) m_str[i] = m_szs[i+1]*m_str[i+1];
00033     };

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::diff(), eenv::eenv(), eenv_base::eval(), eenv_base::meval(), and eenv_base::monoms_eval().

00053 { std::copy(src, src + data_size(), dst ); };

sz_t data_size (  )  const [inline]
real_t eval ( real_t *  data,
const real_t *  prm,
real_t *  chunk = 0 
) [inline]

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().

00057     {
00058       sz_t i,j;
00059       real_t * tmp;
00060       if ( chunk ) tmp = chunk; 
00061       else tmp = new real_t[ data_size() ];
00062       std::copy(data,data+data_size(), tmp );
00063       for ( int v = nvars()-1; v >= 0 ; v -- )
00064         for ( i = 0; i <data_size(); i += m_str[v-1] )
00065           brnops::decasteljau(tmp+i,m_szs[v],prm[v],m_str[v]);
00066       real_t val = tmp[0];
00067       if ( !chunk ) delete[] tmp;
00068       return val;
00069     };

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().

00234     {
00235       real_t m = 10;
00236       sz_t i,j;
00237       for ( i = 0; i < data_size(); i += m_str[v-1] )
00238         for ( j = i; j < i + m_str[v]; j++ )
00239           std::max(m,flatness(data+j,m_szs[v],m_str[v]) );
00240       return m;
00241     };

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().

00209 { for ( sz_t v = 0; v < m_nvr; fromMonoms(data,v,env), v++ ); };

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.

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

00202     {
00203       sz_t i,j;
00204       for ( i = 0; i < data_size(); i += m_str[v-1] )
00205         for ( j = i; j < i + m_str[v]; j++ )
00206           env->fromMonoms(data+j,m_szs[v],m_str[v]);
00207     };

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.

00043     {
00044       int i,j;
00045       int k;
00046       int kstr = (m_szs[v]-1)*m_str[v];
00047       for ( k = i = 0; i < data_size(); i += m_str[v-1], k += kstr )
00048         for ( j = 0; j < m_str[v]; j++ )
00049           brnops::hodograph(dst+k+j,src+i+j,m_szs[v],m_str[v]);
00050     };

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.

00174     {
00175       sz_t i,j;
00176       for ( i = 0; i < data_size(); i += m_str[v-1] )
00177         for ( j = i; j < i + m_str[v]; j++ )
00178           brnops::lrestrict(data+j,m_szs[v],mn,m_str[v]);
00179     };

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().

00146     { 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]

Definition at line 131 of file bernstein_eenv.hpp.

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

00132     {
00133       sz_t p,k,i,j;
00134 
00135       for ( p = 0, k = 0; k < m_szs[v]; k++, p += m_str[v] )
00136         {
00137           _maxs_[k] = data[p];
00138           for ( i = 0; i < data_size(); i += m_str[v-1] )
00139             for ( j = i; j < i + m_str[v]; j ++ )
00140               if ( data[j+p] > _maxs_[k] ) _maxs_[k] = data[j+p];
00141         };
00142     };

void meval ( X &  res,
real_t *  data,
const X *  prm 
) const [inline]

Definition at line 90 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().

00091     {
00092       sz_t i;
00093       X * tmp = new X[ data_size() ];
00094       std::copy(data,data+data_size(),tmp);
00095       for ( int v = nvars()-1; v >= 0 ; v -- )
00096         for ( i = 0; i < data_size(); i += m_str[v-1] )
00097           *(tmp+i) = univariate::horner(tmp+i,m_szs[v],prm[v],m_str[v]);
00098       res = tmp[0];
00099       delete[] tmp;
00100     };

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().

00150     { 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]

Definition at line 118 of file bernstein_eenv.hpp.

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

00119     {
00120       sz_t p,k,i,j;
00121       for ( p = 0, k = 0; k < m_szs[v]; k++, p += m_str[v] )
00122         {
00123           _mins_[k] = data[p];
00124           for ( i = 0; i < data_size(); i += m_str[v-1] )
00125             for ( j = i; j < i + m_str[v]; j ++ )
00126               if ( data[j+p] < _mins_[k] ) _mins_[k] = data[j+p];
00127         };
00128     };

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().

00104     {
00105       sz_t i;
00106       real_t * tmp = new real_t[ data_size() ];
00107       std::copy(data,data+data_size(), tmp );
00108       for ( int v = nvars()-1; v >= 0 ; v -- )
00109         for ( i = 0; i < data_size(); i += m_str[v-1] )
00110           *(tmp+i) = upoldse::horner(tmp+i,m_szs[v],prm[v],m_str[v]);
00111       real_t val = tmp[0];
00112       delete[] tmp;
00113       return val;
00114     };

sz_t nvars (  )  const [inline]

Definition at line 38 of file bernstein_eenv.hpp.

References eenv_base::m_nvr.

Referenced by eenv::density(), eenv::diff(), eenv_base::eval(), eenv_base::meval(), eenv_base::monoms_eval(), and eenv::~eenv().

00038 { return m_nvr; };

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().

00183     {
00184       int i,j;
00185       for ( i = 0; i < data_size(); i += m_str[v-1] )
00186         for ( j = i; j < i + m_str[v]; j++ )
00187           brnops::rrestrict(data+j,m_szs[v],mx,m_str[v]);
00188     };

void scale ( real_t *  data  )  [inline]

Definition at line 194 of file bernstein_eenv.hpp.

References eenv_base::data_size().

00194 { 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.

00036 { 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().

00191 { 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.

00156     {
00157       int i,j,k;
00158       for ( i = 0; i < data_size(); i += m_str[v-1] )
00159         for ( j = i; j < i + m_str[v]; j++ )
00160           split(left+j,right+j,m_szs[v],m_str[v],t);
00161     };

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.

00165     {
00166       int i,j;
00167       for ( i = 0; i < data_size(); i += m_str[v-1] )
00168         for ( j = i; j < i + m_str[v]; j++ )
00169           split2(left+j,right+j,m_szs[v],m_str[v]);
00170     };

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.

00073     {
00074       sz_t v, lg, d;
00075       unsigned i,add,o;
00076       lg = 0;
00077       for ( v = 0; v < m_nvr; v ++ ) if ( m_szs[v] > m_szs[lg] ) lg = v;
00078       X powers [m_nvr][m_szs[lg]];
00079       X acc;
00080       for ( v = 0; v < m_nvr; v ++ )
00081         for ( powers[v][0] = 1.0, d = 1; d < m_szs[v]; powers[v][d] = prm[v]*powers[v][d-1], d ++ );
00082       res = 0;
00083       for ( i = 0; i < nsupp; res += acc, i ++ )
00084         for ( add = supp[i], acc = src[add], v = m_nvr-1; add; add /= m_szs[v], v -- )
00085           acc *= powers[v][add%m_szs[v]];
00086     };

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().

00037 { 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().

00221 { 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.

00214     {
00215       sz_t i,j;
00216       for ( i = 0; i < data_size(); i += m_str[v-1] )
00217         for ( j = i; j < i + m_str[v]; j++ )
00218           env->toMonoms(data+j,m_szs[v],m_str[v]);
00219     };


Member Data Documentation


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

Generated on 6 Dec 2012 for realroot by  doxygen 1.6.1