|
realroot_doc 0.1.1
|
#include <bernstein_eenv.hpp>
Definition at line 246 of file bernstein_eenv.hpp.
| typedef eenv_base::sz_t sz_t |
Reimplemented from eenv_base.
Definition at line 248 of file bernstein_eenv.hpp.
| eenv | ( | ) | [inline] |
Definition at line 264 of file bernstein_eenv.hpp.
{};
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.
| ~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().
| 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().
| 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().
| 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().
| sz_t data_size | ( | ) | const [inline, inherited] |
Definition at line 39 of file bernstein_eenv.hpp.
References eenv_base::m_str.
Referenced by eenv::_mvrcvloop_(), eenv_base::copy(), eenv::elevation(), eenv_base::flatness(), eenv_base::hodograph(), eenv_base::lrestrict(), eenv_base::maxs(), eenv::mdiff(), eenv_base::mins(), eenv::monoms_derivative(), eenv_base::monoms_eval(), eenv::monoms_print(), mmx::bernstein::operator<<(), eenv_base::rrestrict(), eenv_base::scale(), eenv_base::sgnchg(), eenv_base::split(), eenv_base::split2(), eenv_base::toMonoms(), and eenv::vmap().
{ return m_str[-1]; };
| 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
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().
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.
| 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().
| 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 indexofvar | ( | sz_t | gv | ) | const [inline] |
Definition at line 311 of file bernstein_eenv.hpp.
| 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.
| 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().
| 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.
| 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.
| 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().
| 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.
| 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.
| 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().
| 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] |
Definition at line 38 of file bernstein_eenv.hpp.
Referenced by eenv::_mvrcvloop_(), eenv::diff(), eenv_base::monoms_eval(), eenv::monoms_print(), eenv::vmap(), and eenv::~eenv().
{ return m_nvr; };
| 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]];
};
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().
| sz_t psz | ( | ) | [inline] |
Definition at line 299 of file bernstein_eenv.hpp.
References eenv_base::m_nvr, and eenv::m_pszs.
| 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] |
| 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.
| 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.
| 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.
| 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.
{};
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] |
| 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.
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().
| 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.
| 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.
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().
| 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 )
{
Definition at line 255 of file bernstein_eenv.hpp.
Referenced by eenv::diff(), eenv::eenv(), eenv::mcrossp(), eenv::monoms_print(), and eenv::swap().
Definition at line 27 of file bernstein_eenv.hpp.
Referenced by eenv::_alloc_(), eenv_base::compute_strides(), eenv::diff(), eenv::eenv(), eenv_base::fromMonoms(), eenv_base::maxs(), eenv::mcrossp(), eenv_base::mins(), eenv::op_mul(), eenv::psz(), eenv_base::spmeval(), eenv::swap(), eenv_base::toMonoms(), eenv::vrestrict(), and eenv::~eenv().
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 27 of file bernstein_eenv.hpp.
Referenced by eenv::_mvrcvloop_(), eenv_base::compute_strides(), eenv_base::data_size(), eenv::elevation(), eenv_base::flatness(), eenv_base::hodograph(), eenv_base::lrestrict(), eenv_base::maxs(), eenv::mdiff(), eenv_base::mins(), eenv_base::monoms_eval(), eenv_base::rrestrict(), eenv_base::split(), eenv_base::split2(), eenv::stride(), eenv_base::toMonoms(), and eenv::vmap().
Definition at line 27 of file bernstein_eenv.hpp.
Referenced by eenv::_mvrcvloop_(), eenv_base::compute_strides(), eenv::diff(), eenv::eenv(), eenv::elevation(), eenv_base::flatness(), eenv_base::hodograph(), eenv_base::lrestrict(), eenv_base::maxs(), eenv::mcrossp(), eenv_base::mins(), eenv_base::monoms_eval(), eenv::monoms_print(), eenv_base::rrestrict(), eenv_base::set_szs(), eenv_base::split(), eenv_base::split2(), eenv_base::spmeval(), eenv::swap(), eenv_base::sz(), eenv_base::toMonoms(), eenv::vmap(), and eenv::~eenv().
Definition at line 253 of file bernstein_eenv.hpp.
Referenced by eenv::diff(), eenv::eenv(), eenv::mcrossp(), eenv::swap(), and eenv::var().