realroot_doc 0.1.1
|
namespace for representation of polynomials as dense tensor product. More...
namespace for representation of polynomials as dense tensor product.
typedef tensor::eenv eenv |
Definition at line 12 of file tensor_convert.hpp.
void mmx::tensor::add | ( | bernstein< C > & | mpl, |
const C & | c | ||
) |
Definition at line 53 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), monomials< C >::esz(), and scadd().
Referenced by add(), convert(), and sub().
{ vct::scadd (mpl.begin (), c, mpl.esz (), 1); };
void mmx::tensor::add | ( | bernstein< C > & | r, |
const bernstein< C > & | a, | ||
const C & | c | ||
) |
Definition at line 59 of file tensor_bernstein_fcts.hpp.
References add(), monomials< C >::begin(), monomials< C >::env, monomials< C >::esz(), and scadd().
{ if (r.env != a.env) add (r = a, c); else vct::scadd (r.begin (), a.begin (), c, r.esz (), 1); };
void mmx::tensor::add | ( | bernstein< C > & | r, |
const C & | c, | ||
const bernstein< C > & | a | ||
) |
void mmx::tensor::add | ( | bernstein< C > & | r, |
const bernstein< C > & | a | ||
) |
Definition at line 81 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), eenv::common(), monomials< C >::env, monomials< C >::esz(), mmx::vctops::padd(), and rewrite().
void mmx::tensor::add | ( | bernstein< C > & | r, |
const bernstein< C > & | a, | ||
const bernstein< C > & | b | ||
) |
void mmx::tensor::add | ( | monomials< X > & | r, |
const monomials< X > & | a, | ||
const C & | c | ||
) | [inline] |
void mmx::tensor::add | ( | monomials< C > & | a, |
const C & | x | ||
) | [inline] |
Definition at line 191 of file tensor_monomials_fcts.hpp.
{ a[0] += x; }
void mmx::tensor::add | ( | monomials< C > & | r, |
const C & | c, | ||
const monomials< C > & | a | ||
) |
void mmx::tensor::add | ( | monomials< C > & | r, |
const monomials< C > & | a | ||
) | [inline] |
Definition at line 201 of file tensor_monomials_fcts.hpp.
References eenv::common(), monomials< C >::env, extend(), and waddm().
void mmx::tensor::add | ( | monomials< C > & | r, |
const monomials< C > & | a, | ||
const monomials< C > & | b | ||
) | [inline] |
Definition at line 208 of file tensor_monomials_fcts.hpp.
References add(), monomials< C >::begin(), eenv::common(), monomials< C >::env, monomials< C >::esz(), mmx::vct::icopy(), mmx::vct::ipadd(), mmx::max(), eenv::oaddress(), and realloc().
{ if ( &r == &a ) { add(r,b); return; }; if ( &r == &b ) { add(r,a); return; }; realloc(r,eenv::common(a.env,b.env)); unsigned *oadd = new unsigned[std::max(a.esz (),b.esz())]; eenv::oaddress (r.env, oadd,a.env, 0, 0); vct::icopy(r.begin(),oadd,a.esz(),a.begin()); eenv::oaddress(r.env,oadd,b.env,0,0); vct::ipadd (r.begin (), oadd,b.esz (), b.begin ()); };
void mmx::tensor::assign | ( | monomials< C > & | monoms, |
const bernstein< C > & | controls | ||
) |
Definition at line 267 of file tensor_bernstein_fcts.hpp.
References convertb2m().
Referenced by approx(), hevalm(), levalb(), and mpolfill().
{ monoms = controls; tensor::convertb2m(monoms); };
static void mmx::tensor::bdiff | ( | C * | dst, |
const eenv & | a, | ||
C const *const | src, | ||
int | v | ||
) | [static] |
Definition at line 360 of file tensor_eenv_loops.hpp.
References eenv::str(), eenv::sz(), and eenv::szs().
Referenced by diff().
{ const int ssz = a.sz (); const int * sszs = a.szs(); const int * sstr = a.str(); int rst = sstr[v-1]-sstr[v]; // unsigned i; C * ed; const C * es; for ( ed = dst, es = src; es < src+ssz; ed += rst, es += sstr[v-1] ) { C * fd; const C * fs; for ( fs = es, fd = ed; fs < es + sstr[v]; fs++, fd ++ ) { C * dp; const C * p; for ( p = fs, dp = fd; p < fs+rst; p += sstr[v], dp += sstr[v] ) *dp = (*(p+sstr[v])-*p)*(sszs[v]-1); }; }; }
void mmx::tensor::binoms | ( | C * | data, |
const eenv & | env, | ||
binomials< C > & | binms | ||
) |
Definition at line 170 of file tensor_eenv_loops.hpp.
References mmx::vct::copy(), eenv::nvr(), mmx::vct::pmul(), eenv::str(), eenv::sz(), and eenv::szs().
{ const int *estr = env.str (); const int *eszs = env.szs (); const int envr = env.nvr (); const int esz = env.sz (); const C *bins = binms[eszs[envr - 1] - 1]; for (C * pdata = data; pdata < data + esz; pdata += estr[envr - 2]) vct::copy (pdata, bins, eszs[envr - 1]); for (int v = 0; v < envr - 1; v++) { bins = binms[eszs[v] - 1]; // int k = 0; for (int i = 0; i < esz; i += estr[v - 1]) for (int j = 0; j < estr[v]; j++) vct::pmul (data + i + j, bins, eszs[v], estr[v], 1); }; };
void mmx::tensor::binoms | ( | bernstein< C > & | mpl | ) | [inline] |
Definition at line 9 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), and monomials< C >::env.
Referenced by elevate(), and ibinoms().
{ binoms( mpl.begin(), mpl.env, binomials<C>::default_ ) ; }
void mmx::tensor::brestrict | ( | C * | src, |
const eenv & | env, | ||
int | v, | ||
const T & | a, | ||
const T & | b | ||
) | [inline] |
Definition at line 484 of file tensor_eenv_loops.hpp.
References brestrictLR().
Referenced by restrict().
{ brestrictLR ( src, env, v, T(1-a), a, T((b-a)/(T(1)-a)), T((T(1)-b)/(T(1)-a)) ); };
void mmx::tensor::brestrict_uloop | ( | C * | r, |
C * | rlast, | ||
int | st, | ||
const T & | a, | ||
const T & | b | ||
) | [inline] |
Definition at line 438 of file tensor_eenv_loops.hpp.
Referenced by brestrictLR(), and brestrictRL().
{ C * er, * p; for ( er = rlast - st ; er != r; er -= st ) for ( p = r; p != er; p += st ) *p = (a**p+b**(p+st)); };
void mmx::tensor::brestrictLR | ( | C * | s, |
const eenv & | env, | ||
int | v, | ||
const T & | a, | ||
const T & | b, | ||
const T & | c, | ||
const T & | d | ||
) | [inline] |
Definition at line 449 of file tensor_eenv_loops.hpp.
References brestrict_uloop(), and eenv::str().
Referenced by brestrict().
{ // std::cout << a << " " << b << std::endl; // std::cout << c << " " << d << std::endl; // const int *sszs = env.szs (); const int *sstr = env.str (); // int i, j, k; for ( C * es = s; es != s + sstr[-1]; es += sstr[v-1] ) for ( C * fs = es; fs != es + sstr[v]; fs ++ ) { brestrict_uloop(fs,fs+sstr[v-1],sstr[v],a,b); brestrict_uloop(fs+sstr[v-1]-sstr[v],fs-sstr[v],-sstr[v],c,d); }; };
void mmx::tensor::brestrictRL | ( | C * | s, |
const eenv & | env, | ||
int | v, | ||
const T & | a, | ||
const T & | b, | ||
const T & | c, | ||
const T & | d | ||
) | [inline] |
Definition at line 465 of file tensor_eenv_loops.hpp.
References brestrict_uloop(), and eenv::str().
{ // std::cout << a << " " << b << std::endl; // std::cout << c << " " << d << std::endl; // const int *sszs = env.szs (); const int *sstr = env.str (); // int i, j, k; for ( C * es = s; es != s + sstr[-1]; es += sstr[v-1] ) for ( C * fs = es; fs != es + sstr[v]; fs ++ ) { brestrict_uloop(fs+sstr[v-1]-sstr[v],fs-sstr[v],-sstr[v],c,d); brestrict_uloop(fs,fs+sstr[v-1],sstr[v],a,b); }; };
void mmx::tensor::bsplit | ( | C * | l, |
C * | r, | ||
const eenv & | env, | ||
const T & | t, | ||
int | v | ||
) | [inline] |
Definition at line 394 of file tensor_eenv_loops.hpp.
References bsplit_uloop(), and eenv::str().
Referenced by split().
{ // const int *sszs = env.szs (); const int *sstr = env.str (); // int i, j, k; C *er,*el; for ( el = l, er = r; el != l + sstr[-1]; el += sstr[v-1], er += sstr[v-1] ) { C *fr,*fl; for ( fl = el, fr = er; fl != el + sstr[v]; fl++, fr++ ) bsplit_uloop(fr,fr+sstr[v-1],fl,t,sstr[v]) ; }; };
void mmx::tensor::bsplit2 | ( | C * | l, |
C * | r, | ||
const eenv & | env, | ||
int | v | ||
) |
Definition at line 423 of file tensor_eenv_loops.hpp.
References bsplit2_uloop(), and eenv::str().
Referenced by split().
{ // const int *sszs = env.szs (); const int *sstr = env.str (); C *er,*el; for ( el = l, er = r; el != l + sstr[-1]; el += sstr[v-1], er += sstr[v-1] ) { C *fr,*fl; for ( fl = el, fr = er; fl != el + sstr[v]; fl++, fr++ ) bsplit2_uloop(fr,fr+sstr[v-1],fl,sstr[v]); }; };
void mmx::tensor::bsplit2_uloop | ( | C * | r, |
C * | rlast, | ||
C * | l, | ||
int | st | ||
) | [inline] |
Definition at line 410 of file tensor_eenv_loops.hpp.
Referenced by bsplit2().
{ C * er, * p; for ( er = rlast - st ; er != r; er -= st, l += st ) { *l = *r; for ( p = r; p != er; p += st ) *p = (*p+*(p+st))/C(2); }; *l = *r; };
void mmx::tensor::bsplit_uloop | ( | C * | r, |
C * | rlast, | ||
C * | l, | ||
const T & | t, | ||
int | st | ||
) | [inline] |
Definition at line 381 of file tensor_eenv_loops.hpp.
Referenced by bsplit().
{ C * er, * p; for ( er = rlast - st ; er != r; er -= st, l += st ) { *l = *r; for ( p = r; p != er; p += st ) *p = (1.0-t)**p+t**(p+st); }; *l = *r; };
void mmx::tensor::casteljau | ( | bernstein< C > & | a, |
bernstein< C > & | b, | ||
const C & | t, | ||
int | v | ||
) |
Definition at line 222 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), monomials< C >::env, and realloc().
Referenced by casteljau().
void mmx::tensor::casteljau | ( | bernstein< C > & | left, |
bernstein< C > & | right, | ||
const bernstein< C > & | source, | ||
const C & | t, | ||
int | v | ||
) |
Definition at line 230 of file tensor_bernstein_fcts.hpp.
References casteljau().
{ casteljau (left, right = source, t, v); };
void mmx::tensor::casteljau | ( | bernstein< C > & | a, |
bernstein< C > & | b, | ||
int | v | ||
) |
Definition at line 238 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), casteljau(), monomials< C >::env, and realloc().
void mmx::tensor::casteljau | ( | bernstein< C > & | left, |
bernstein< C > & | right, | ||
const bernstein< C > & | source, | ||
int | v | ||
) |
Definition at line 246 of file tensor_bernstein_fcts.hpp.
References casteljau().
{ casteljau (left, right = source, v); };
void mmx::tensor::cfdump | ( | std::ostream & | o, |
const bernstein< C > & | mpl | ||
) |
Definition at line 283 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), and monomials< C >::end().
{ for (const C * a = mpl.begin (); a != mpl.end (); o << " " << *a++){} };
void mmx::tensor::clear | ( | monomials< C > & | mpl, |
const eenv & | nenv | ||
) | [inline] |
Definition at line 90 of file tensor_monomials_fcts.hpp.
References clear(), monomials< C >::env, and monomials< C >::swap().
{ if (mpl.env != nenv) { monomials < C > tmp (nenv, C (0)); mpl.swap (tmp); } else clear(mpl); };
void mmx::tensor::clear | ( | monomials< C > & | monoms | ) | [inline] |
Definition at line 88 of file tensor_monomials_fcts.hpp.
References monomials< C >::begin(), monomials< C >::end(), and mmx::vct::fill().
Referenced by clear(), conv(), diff(), mcrossp(), mdotp(), mmul(), pmmul(), and spmmul().
{ std::fill(monoms.begin(),monoms.end(),C(0)); };
void mmx::tensor::coefficients | ( | Seq< U > & | r, |
const bernstein< C > & | p, | ||
int | v | ||
) |
Definition at line 84 of file tensor_bernstein.hpp.
{ }
void mmx::tensor::contraction | ( | monomials< C > & | f, |
const C & | t, | ||
const int & | v | ||
) |
Compute f (a*var[v])
Definition at line 614 of file tensor_monomials_fcts.hpp.
References monomials< C >::data, monomials< C >::nvr(), mmx::pow(), monomials< C >::str(), monomials< C >::szs(), and monomials< C >::vrs().
Referenced by box_rep< POL >::contract_box(), and box_rep< POL >::restrict().
{ std::vector<int> ind = std::vector<int>( f.nvr() ); int s,i,pos =0; int * vars = f.vrs(); int * sstr = f.str(); int * sszs = f.szs(); for (;;) { for ( s = 0 ; s < sszs[v]; ++s ) f.data[sstr[v]*s+pos] *= pow(t,s) ; // next row for (i = 0; i < f.nvr() ; ++i) { if ( vars[i] != v ) { ind[i] += 1; pos += sstr[i]; } else continue; if (ind[i] < sszs[i]) break; ind[i] = 0; pos -= sszs[i]*sstr[i]; } if (i == f.nvr() ) break; } };
void conv | ( | MPLBASE0 & | r, |
const MPLBASE1 & | a | ||
) |
void mmx::tensor::conv | ( | MPLBASE0 & | r, |
const MPLBASE1 & | a, | ||
const MPLBASE2 & | b | ||
) |
Definition at line 33 of file tensor_convert.hpp.
References clear(), conv(), eenv::mul(), and eenv::oaddress().
{ if (&a == &r) { conv (r, b); return; }; if (&b == &r) { conv (r, a); return; }; clear (r, eenv::mul (a.env, b.env)); unsigned *oa = new unsigned[a.esz () + b.esz ()]; unsigned *ob = oa + a.esz (); eenv::oaddress (r.env, oa, a.env); eenv::oaddress (r.env, ob, b.env); typedef typename MPLBASE0::value_type rreal; typedef typename MPLBASE1::value_type areal; typedef typename MPLBASE2::value_type breal; unsigned *ea; unsigned *eb; rreal * pr = r.begin(); const areal * pa; const breal * pb; for (ea = oa, pa = a.begin (); ea != oa + a.esz (); ea++, pa++) for (eb = ob, pb = b.begin (); eb != ob + b.esz (); pr[*ea + *eb++] += (*pa) * (*pb++) ) ; delete[]oa; };
void mmx::tensor::convert | ( | monomials< C > & | mpl, |
const sparse::monomial_seq< C, O > & | imp | ||
) |
Definition at line 393 of file tensor_monomials_fcts.hpp.
{
mpl. ~ monomials < C > ();
new (&mpl) monomials<C>(imp);
};
void mmx::tensor::convert | ( | sparse::monomial_seq< C, O > & | pol, |
const monomials< C > & | mpl | ||
) |
Definition at line 400 of file tensor_monomials_fcts.hpp.
References add(), monomials< C >::env, eenv::mxvr(), monomials< C >::nvr(), monomials< C >::size(), monomials< C >::szs(), and monomials< C >::vrs().
{ typedef typename sparse::monomial_seq< C, O>::monom_t monom_t; typedef typename monom_t::container_t container_t; add(pol,C(0)); container_t tmp (mpl.env.mxvr()+1); const int *szs = mpl.szs (); const int *vrs = mpl.vrs (); for (int i = 0; i < mpl.size(); i++) if (mpl[i] != 0) { int a, v; for (a = i, v = mpl.nvr () - 1; a; a /= szs[v], v--) tmp[vrs[v]] = a % szs[v]; add(pol, monom_t (mpl[i], tmp)); }; }
UPOL mmx::tensor::convert | ( | const MPOL & | p, |
unsigned | v | ||
) |
Convert a multivariate polynomial to univariate one, formally by substuting all the variables but the variable of index ind
by 1.
Definition at line 73 of file tensor_convert.hpp.
References degree(), mmx::N(), mmx::rep(), and slice().
Referenced by mprint().
void mmx::tensor::convertb2m | ( | C * | bzc, |
unsigned | sz, | ||
int | st, | ||
binomials< C > & | binom | ||
) | [inline] |
Definition at line 240 of file tensor_eenv_loops.hpp.
References mmx::vctops::pmul().
{ int i,k; for ( i = st; i != st*int(sz); i += st ) for ( k = (sz-1)*st; k != i-st; k -= st ) bzc[k] -= bzc[k-st]; vct::pmul(bzc,binom[sz-1],sz,st,1); };
void mmx::tensor::convertb2m | ( | C * | data, |
const eenv & | e, | ||
binomials< C > & | bins, | ||
int | v | ||
) |
Convert a multivariate polynomial data in the bernstein basis to the tensor basis along the @ variable
Definition at line 289 of file tensor_eenv_loops.hpp.
References convertb2m(), eenv::str(), eenv::sz(), and eenv::szs().
{ const int *esz = e.szs (); const int *est = e.str (); int i, j; for (i = 0; i < e.sz (); i += est[v - 1]) for (j = i; j < i + est[v]; convertb2m (data + j, esz[v], est[v], bins), j++) ; };
void mmx::tensor::convertb2m | ( | C * | data, |
const eenv & | env, | ||
binomials< C > & | bins | ||
) |
Convert a multivariate polynomial data in the bernstein basis to the tensor basis
Definition at line 301 of file tensor_eenv_loops.hpp.
References convertb2m(), and eenv::nvr().
{ for (int v = 0; v < env.nvr (); convertb2m (data, env, bins, v++)) ; };
void mmx::tensor::convertb2m | ( | monomials< C > & | mpl | ) | [inline] |
Definition at line 26 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), and monomials< C >::env.
Referenced by assign(), convertb2m(), mmx::flatten(), and print().
{ convertb2m (mpl.begin (), mpl.env, binomials < C >::default_); }
void mmx::tensor::convertm2b | ( | C * | bzc, |
unsigned | sz, | ||
int | st, | ||
binomials< C > & | binoms | ||
) | [inline] |
Definition at line 250 of file tensor_eenv_loops.hpp.
{ C tmp[sz]; const C * bin; unsigned i,k,p,l; for ( p = 0, i = 0; i < sz; i++, p += st ) { tmp[i] = bzc[p]; bzc[p] = C(0); }; for ( p = 0, i = 0; i < sz; i++, p += st ) for ( bin = binoms[sz-i-1], l = p, k = 0; k < sz-i; k++, l += st ) bzc[l] += tmp[i]*bin[k]; bin = binoms[sz-1]; for ( i = 0, l = 0; i < sz; i ++, l += st ) bzc[l] /= bin[i]; };
void mmx::tensor::convertm2b | ( | C * | data, |
const eenv & | e, | ||
binomials< C > & | bins, | ||
int | v | ||
) |
Convert a multivariate polynomial data in the tensors basis into the bernstein basis along the @ variable.
Definition at line 269 of file tensor_eenv_loops.hpp.
References convertm2b(), eenv::str(), eenv::sz(), and eenv::szs().
{ const int *esz = e.szs (); const int *est = e.str (); int i, j; for (i = 0; i < e.sz (); i += est[v - 1]) for (j = i; j < i + est[v]; convertm2b (data + j, esz[v], est[v], bins), j++) ; };
void mmx::tensor::convertm2b | ( | C * | data, |
const eenv & | env, | ||
binomials< C > & | bins | ||
) |
Convert a multivariate polynomial data in the tensors basis into the bernstein basis
Definition at line 280 of file tensor_eenv_loops.hpp.
References convertm2b(), and eenv::nvr().
{ for (int v = 0; v < env.nvr (); convertm2b (data, env, bins, v++)) ; };
void mmx::tensor::convertm2b | ( | bernstein< C > & | mpl, |
const V & | bx | ||
) | [inline] |
Definition at line 36 of file tensor_bernstein_fcts.hpp.
References convertm2b(), and restrict().
{ convertm2b (mpl); for(unsigned i=0;i<bx.size();i+=2) restrict(mpl,i/2,bx[i],bx[i+1]); };
void mmx::tensor::convertm2b | ( | bernstein< C > & | mpl | ) | [inline] |
Definition at line 31 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), and monomials< C >::env.
Referenced by mmx::let::assign(), bernstein< C >::bernstein(), convertm2b(), mmx::realroot::fill_data(), and solver< Ring, Bspline >::first_root().
{ convertm2b (mpl.begin (), mpl.env, binomials < C >::default_); };
void mmx::tensor::decasteljau | ( | real_t * | r, |
unsigned | sz, | ||
const value_t & | t, | ||
int | str = 1 |
||
) |
Definition at line 67 of file tensor_eenv_loops.hpp.
Referenced by eval(), and levalb().
{ real_t *er, *p; for ( er = r + (sz-1)*str; er != r; er -= str ) for ( p = r; p != er; p += str ) *p = real_t(value_t(1)-t)* *p+t**(p+str); };
int mmx::tensor::degree | ( | const monomials< Coeff > & | p, |
int | v | ||
) | [inline] |
Definition at line 362 of file tensor_monomials_fcts.hpp.
References monomials< C >::env, and eenv::sz().
{
return p.env.sz(v)-1;
}
int mmx::tensor::degree | ( | const bernstein< C > & | p, |
int | v | ||
) | [inline] |
Definition at line 76 of file tensor_bernstein.hpp.
References degree().
{return degree((const monomials<C>&)p,v);}
int mmx::tensor::degree | ( | const bernstein< C > & | p | ) | [inline] |
Definition at line 73 of file tensor_bernstein.hpp.
Referenced by convert(), and degree().
{return degree((const monomials<C>&)p);}
int mmx::tensor::degree | ( | const monomials< Coeff > & | p | ) | [inline] |
Definition at line 355 of file tensor_monomials_fcts.hpp.
References monomials< C >::env, monomials< C >::nbvar(), and eenv::szs().
{ int d=0; for(int i=0;i<p.nbvar();i++) d+= *(p.env.szs()+i)-1; return d; }
void mmx::tensor::diff | ( | monomials< Coeff > & | res, |
const monomials< Coeff > & | src, | ||
int | v | ||
) | [inline] |
Definition at line 373 of file tensor_monomials_fcts.hpp.
References monomials< C >::begin(), clear(), eenv::diff(), monomials< C >::env, and mdiff().
{ clear( res, eenv::diff(src.env,v)); // mdiff( res.begin(), res.env, src.begin(), src.env, v ); mdiff( res.begin(), res.env, src.begin(), src.env, v ); }
void mmx::tensor::diff | ( | C * | b, |
const C * | a, | ||
unsigned | sz, | ||
int | sb, | ||
int | sa | ||
) | [inline] |
Definition at line 311 of file tensor_eenv_loops.hpp.
References assert.
{ assert(sa==sb); for ( unsigned i = 1; i < sz; i ++ ) { b[(i-1)*sb] = i*a[i]; }; // for ( unsigned i = 1, a += sa; i < sz; *b = *a*i++, b += sb, a += sa ) ; };
void mmx::tensor::diff | ( | C * | b, |
C * | e, | ||
C const * | a, | ||
int | s | ||
) | [inline] |
Definition at line 319 of file tensor_eenv_loops.hpp.
{ unsigned i; for ( i = 1, a += s; b != e; *b = *a*i++, b += s, a += s ) ; };
void mmx::tensor::diff | ( | C * | b, |
C * | e, | ||
C const * | a | ||
) | [inline] |
Definition at line 326 of file tensor_eenv_loops.hpp.
{ for ( int i = 1; b != e; *b++ = *(++a)*i++ ) ; };
void mmx::tensor::diff | ( | bernstein< C > & | res, |
const bernstein< C > & | src, | ||
int | v | ||
) | [inline] |
Definition at line 315 of file tensor_bernstein_fcts.hpp.
References bdiff(), monomials< C >::begin(), clear(), eenv::diff(), and monomials< C >::env.
{ clear( res, eenv::diff(src.env,v) ); bdiff( res.begin(), src.env, src.begin(), v ); };
bernstein<C> mmx::tensor::diff | ( | const bernstein< C > & | p, |
int | v | ||
) |
Definition at line 79 of file tensor_bernstein.hpp.
References Polynomial.
Referenced by m_diff().
{ Polynomial dp(p); diff(dp,p,v); return dp; }
void mmx::tensor::div | ( | bernstein< C > & | r, |
const bernstein< C > & | a, | ||
const C & | c | ||
) | [inline] |
void mmx::tensor::div | ( | monomials< C > & | r, |
const C & | c | ||
) |
Definition at line 271 of file tensor_monomials_fcts.hpp.
References monomials< C >::begin(), monomials< C >::esz(), and mmx::vctops::scdiv().
{ vct::scdiv (r.begin (), c, r.esz (), 1); };
void mmx::tensor::div | ( | monomials< C > & | r, |
const monomials< C > & | a, | ||
const C & | c | ||
) | [inline] |
void mmx::tensor::elevate | ( | bernstein< C > & | r, |
const eenv & | elev | ||
) |
Definition at line 43 of file tensor_bernstein_fcts.hpp.
References binoms(), conv(), scale(), and uscale().
Referenced by rewrite().
{ bernstein < C > tmp (elev); tensor::binoms (tmp); scale (r); tensor::conv(r, tmp); uscale (r); };
void mmx::tensor::eval | ( | Coeff & | result, |
const bernstein< Coeff > & | controls, | ||
const Coeff & | v | ||
) | [inline] |
Definition at line 201 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), mmx::sparse::copy(), decasteljau(), monomials< C >::end(), monomials< C >::env, and eenv::sz().
{ Coeff tmp[controls.env.sz()]; std::copy (controls.begin(), controls.end(), tmp); decasteljau (tmp , controls.env.sz(), v, 1); result=tmp[0]; };
void mmx::tensor::eval | ( | Result & | result, |
const bernstein< Coeff > & | controls, | ||
const Parameters & | parameters, | ||
unsigned | n | ||
) | [inline] |
Definition at line 210 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), monomials< C >::env, and levalb().
{ //assert(parameters.size()<n); levalb( result, controls.begin (), controls.env, parameters ); };
void mmx::tensor::eval | ( | Result & | result, |
const bernstein< Coeff > & | controls, | ||
const Parameters & | parameters | ||
) | [inline] |
Definition at line 195 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), monomials< C >::env, and levalb().
Referenced by approx().
{ levalb (result, controls.begin (), controls.env,parameters); };
void mmx::tensor::eval | ( | Result & | result, |
const monomials< Coeff > & | monoms, | ||
const Parameters & | parameters | ||
) | [inline] |
Definition at line 135 of file tensor_monomials_fcts.hpp.
References monomials< C >::begin(), mmx::upoldse_::horner(), and monomials< C >::size().
{ // if (monoms.nbvar()==1) vct::horner(result, monoms.begin (), monoms.size(), parameters, 1); // levalm( result, monoms.begin (), monoms.env, parameters ); };
void mmx::tensor::eval | ( | Result & | result, |
const monomials< Coeff > & | monoms, | ||
const Parameters & | parameters, | ||
unsigned | n | ||
) | [inline] |
Definition at line 142 of file tensor_monomials_fcts.hpp.
References monomials< C >::begin(), monomials< C >::env, and levalm().
{ //assert(parameters.size()<n); levalm( result, monoms.begin (), monoms.env, parameters ); };
void mmx::tensor::extend | ( | monomials< C > & | mpl, |
const eenv & | nenv | ||
) |
Definition at line 161 of file tensor_monomials_fcts.hpp.
References monomials< C >::begin(), monomials< C >::env, monomials< C >::esz(), mmx::vct::icopy(), eenv::oaddress(), and monomials< C >::swap().
Referenced by add(), and sub().
{ if ( mpl.env != nenv ) { unsigned *oadd = new unsigned[mpl.esz ()]; eenv::oaddress (nenv, oadd, mpl.env, 0, 0); monomials < C > tmp (nenv); vct::icopy (tmp.begin (), oadd, mpl.esz (), mpl.begin ()); delete[]oadd; mpl.swap (tmp); }; };
void mmx::tensor::face | ( | monomials< C > & | f, |
const monomials< C > & | src, | ||
int | v, | ||
int | n | ||
) | [inline] |
Definition at line 454 of file tensor_monomials_fcts.hpp.
References assert, monomials< C >::env, face_env(), lface(), eenv::localv(), realloc(), and rface().
void mmx::tensor::face | ( | polynomial< C, with< Rep, Ord > > & | r, |
const polynomial< C, with< Rep, Ord > > & | p, | ||
int | v, | ||
int | f | ||
) |
Definition at line 182 of file polynomial_fcts.hpp.
Referenced by box_rep< C >::corner_event(), box_rep< C >::edge_event(), box_rep< POL >::lface(), mmx::realroot::miranda_test(), box_rep< POL >::miranda_test(), and box_rep< POL >::rface().
{ face(r.rep(),p.rep(),v,f); }
void mmx::tensor::face | ( | bernstein< C > & | f, |
const bernstein< C > & | src, | ||
int | v, | ||
int | n | ||
) | [inline] |
Definition at line 366 of file tensor_bernstein_fcts.hpp.
References assert, monomials< C >::env, face_env(), lface(), eenv::localv(), realloc(), and rface().
eenv mmx::tensor::face_env | ( | const eenv & | e, |
int | lv | ||
) | [inline] |
Definition at line 429 of file tensor_monomials_fcts.hpp.
References eenv::nvr(), eenv::szs(), and eenv::vrs().
Referenced by face().
{ const int * eszs = e.szs(); const int * evrs = e.vrs(); const int envr = e.nvr(); int szs[ envr ]; int vrs[ envr ]; int c = 0; for ( int v = 0; v < envr; v ++ ) if ( v != lv ) { szs[c] = eszs[v]; vrs[c++] = evrs[v]; };//evrs[v]; }; return eenv(c,szs,vrs); }
void mmx::tensor::heval | ( | Result & | result, |
const monomials< Coeff > & | monoms, | ||
const Parameters & | parameters | ||
) | [inline] |
Definition at line 149 of file tensor_monomials_fcts.hpp.
References monomials< C >::begin(), monomials< C >::env, and hevalm().
Referenced by box_rep< C >::max_eval().
{ hevalm( result, monoms.begin (), monoms.env, parameters ); };
void mmx::tensor::hevalm | ( | R & | result, |
const C * | data, | ||
const eenv & | env, | ||
const P & | p | ||
) |
Definition at line 43 of file tensor_eenv_loops.hpp.
References assign(), mmx::sparse::copy(), mmx::vct::hhorner(), eenv::nvr(), eenv::str(), eenv::sz(), and eenv::szs().
Referenced by heval().
{ typedef R result_type; // query for the environment information const int esz = env.sz (); // number of coefficients const int nvr = env.nvr (); // number of variables const int *szs = env.szs (); // sizes in each variables const int *str = env.str (); // corresponding strides. result_type tmp[env.sz ()],r; // temporary array used by the inplace evaluation loop std::copy (data, data + env.sz (), tmp); for (int v = nvr - 1; v >= 0; v--) for (int i = 0; i < esz; i += str[v - 1]) { vct::hhorner(r,tmp + i, szs[v], p[v+1],p[0],str[v]); tmp[i] = r; } let::assign(result,tmp[0]); };
void mmx::tensor::ibinoms | ( | C * | data, |
const eenv & | env, | ||
binomials< C > & | binms | ||
) |
Definition at line 190 of file tensor_eenv_loops.hpp.
References binoms(), mmx::vct::inverses(), and eenv::sz().
{ binoms(data,env,binms); vct::inverses(data,data+env.sz()); };
void mmx::tensor::islice | ( | monomials< C > & | f, |
const monomials< C > & | src, | ||
int | v, | ||
int | i | ||
) | [inline] |
Definition at line 465 of file tensor_monomials_fcts.hpp.
References monomials< C >::begin(), monomials< C >::env, and slice().
Referenced by slice().
{ slice( f.begin(), src.env, src.begin(), v ); }
int mmx::tensor::leading_variable | ( | const monomials< Coeff > & | p | ) | [inline] |
Definition at line 368 of file tensor_monomials_fcts.hpp.
{
return 0;
}
void mmx::tensor::levalb | ( | R & | result, |
const C * | data, | ||
const eenv & | env, | ||
const P & | p | ||
) |
Evaluation in bernstein form as ()@
Definition at line 77 of file tensor_eenv_loops.hpp.
References assign(), mmx::sparse::copy(), decasteljau(), eenv::nvr(), eenv::str(), eenv::sz(), and eenv::szs().
Referenced by eval().
{ // typename sup<typename texp::value_type<P>::result_t, C >::T tmp[env.sz()]; //XXX typename texp::ringof_ < typename texp::value_type<P>::T,C >::T R tmp[env.sz()]; const int esz (env.sz ()); const int nvr (env.nvr ()); const int *szs (env.szs ()); const int *str (env.str ()); std::copy (data, data + env.sz (), tmp); for (int v = nvr - 1; v >= 0; v--) for (int i = 0; i < esz; i += str[v - 1]) decasteljau (tmp + i, szs[v], p[v], str[v]); let::assign(result,tmp[0]); };
void mmx::tensor::levalm | ( | R & | result, |
const C * | data, | ||
const eenv & | env, | ||
const P & | p | ||
) |
Evaluation by horner scheme of multivariate polynomial data.
@ is the parameter array (operator[])supposed to be as large as the number of variables in @. Definition at line 20 of file tensor_eenv_loops.hpp.
References mmx::sparse::copy(), mmx::upoldse_::horner(), eenv::nvr(), eenv::str(), eenv::sz(), and eenv::szs().
Referenced by eval().
{ typedef R result_type; // query for the environment information const int esz = env.sz (); // number of coefficients const int nvr = env.nvr (); // number of variables const int *szs = env.szs (); // sizes in each variables const int *str = env.str (); // corresponding strides. result_type tmp[env.sz ()], r; // temporary array used by the inplace evaluation loop std::copy (data, data + env.sz (), tmp); for (int v = nvr - 1; v >= 0; v--) for (int i = 0; i < esz; i += str[v - 1]) { vct::horner(r,tmp + i, szs[v], p[v], str[v]); tmp[i] = r; } // let::assign(result,tmp[0]); result= tmp[0]; };
void mmx::tensor::lface | ( | monomials< C > & | f, |
const monomials< C > & | src, | ||
int | v | ||
) | [inline] |
Definition at line 441 of file tensor_monomials_fcts.hpp.
References monomials< C >::begin(), monomials< C >::env, and lface().
{ lface( f.begin(), src.env, src.begin(), v ); };
void mmx::tensor::lface | ( | C * | dst, |
const eenv & | a, | ||
const C * | src, | ||
int | v | ||
) |
Definition at line 491 of file tensor_eenv_loops.hpp.
References eenv::str(), and eenv::sz().
{ const int ssz = a.sz (); // const int * sszs = a.szs(); const int * sstr = a.str(); C * ed; const C * es; const C * fs; for ( ed = dst, es = src; es < src+ssz; es += sstr[v-1] ) for ( fs = es; fs < es + sstr[v]; *ed++ = *fs++ ) ; };
void mmx::tensor::lface | ( | bernstein< C > & | f, |
const bernstein< C > & | src, | ||
int | v | ||
) | [inline] |
Definition at line 352 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), and monomials< C >::env.
Referenced by face(), and lface().
{ lface( f.begin(), src.env, src.begin(), v ); };
void mmx::tensor::m_diff | ( | C * | op, |
const eenv & | o, | ||
C const * | ap, | ||
const eenv & | a, | ||
int | v | ||
) |
Definition at line 333 of file tensor_eenv_loops.hpp.
References diff(), eenv::st(), and eenv::sz().
{ typedef int sz_t; sz_t is = 0; for ( sz_t i = 0; i < o.sz(); i += o.st(v-1), is += a.st(v-1) ) for ( sz_t j = 0; j < a.st(v); j ++ ) diff(op+i+j, ap+is+j,a.sz(v), o.st(v), a.st(v)) ; };
void mmx::tensor::maxs | ( | monomials< C > & | mm, |
monomials< C > & | f, | ||
int | v | ||
) |
Definition at line 664 of file tensor_monomials_fcts.hpp.
References monomials< C >::data, monomials< C >::size(), monomials< C >::str(), and monomials< C >::szs().
{ int p,k,i,j; int * sszs = f.szs() ; int * sstr = f.str() ; for ( p = 0, k = 0; k < sszs[v]; k++, p += sstr[v] ) { mm.data[k] = f.data[p]; for ( i = 0; i < f.size(); i += sstr[v-1] ) for ( j = i; j < i + sstr[v]; j ++ ) if ( f.data[j+p] > mm[k] ) mm[k] = f.data[j+p]; } }
void mmx::tensor::maxs | ( | OutputIterator | _maxs_, |
const C * | data, | ||
const eenv & | env, | ||
int | v | ||
) |
Definition at line 101 of file tensor_eenv_loops.hpp.
References eenv::str(), and eenv::szs().
{ const int *eszs = env.szs (); const int *estr = env.str (); // const int envr = env.nvr (); int p, k, i; //, j; for (p = 0, k = 0; k < eszs[v]; k++, data += estr[v], _maxs_++) { *_maxs_ = *data; for (i = 0; i < estr[-1]; i += estr[v - 1]) for (const C * edata = data + i; edata < data + i + estr[v]; edata++) if (*edata > *_maxs_) *_maxs_ = *edata; }; };
void mmx::tensor::mdiff | ( | C * | dst, |
const eenv & | a, | ||
C const *const | src, | ||
const eenv & | esrc, | ||
int | v | ||
) |
Definition at line 343 of file tensor_eenv_loops.hpp.
References mmx::vct::scmul(), eenv::str(), and eenv::sz().
Referenced by diff().
{ const int ssz = esrc.sz (); // const int * sszs = a.szs(); const int * sstr = esrc.str(); int rst = sstr[v-1]-sstr[v]; unsigned i; C * ed, * fd; const C * es, * fs; for ( ed = dst, es = src; es < src+ssz; ed += rst, es += sstr[v-1] ) for ( i = 1, fd = ed, fs = es+sstr[v]; fs != es+sstr[v-1]; fd += sstr[v], fs += sstr[v], i ++ ) vct::scmul(fd,fd+sstr[v],fs,C(i)); }
void mmx::tensor::mescan | ( | int & | last, |
vd * | vdeg, | ||
const MONOM & | m | ||
) |
Definition at line 400 of file tensor_eenv_fcts.hpp.
References vd::d, mmx::max(), and vd::n.
Referenced by eenv::eenv().
{ for (unsigned i = 0; i < m.size (); i++) { if (m[i] != 0) { if (vdeg[i].n != -1) vdeg[i].d = std::max ((int) m[i], vdeg[i].d); else { if (last != -1) { vdeg[i].n = vdeg[last].n; vdeg[i].d = m[i]; vdeg[last].n = i; last = i; } else { last = i; vdeg[i].n = i; vdeg[i].d = m[i]; }; }; }; }; }
void mmx::tensor::mins | ( | monomials< C > & | mm, |
monomials< C > & | f, | ||
int | v | ||
) |
Definition at line 648 of file tensor_monomials_fcts.hpp.
References monomials< C >::data, monomials< C >::size(), monomials< C >::str(), and monomials< C >::szs().
{ int p,k,i,j; int * sszs = f.szs() ; int * sstr = f.str() ; for ( p = 0, k = 0; k < sszs[v]; k++, p += sstr[v] ) { mm.data[k] = f.data[p]; for ( i = 0; i < f.size(); i += sstr[v-1] ) for ( j = i; j < i + sstr[v]; j ++ ) if ( f.data[j+p] < mm[k] ) mm[k] = f.data[j+p]; } }
void mmx::tensor::mins | ( | OutputIterator | _mins_, |
const C * | data, | ||
const eenv & | env, | ||
int | v | ||
) |
Definition at line 118 of file tensor_eenv_loops.hpp.
References eenv::str(), and eenv::szs().
{ const int *eszs = env.szs (); const int *estr = env.str (); // const int envr = env.nvr (); int p, k, i, j; for (p = 0, k = 0; k < eszs[v]; k++, p += estr[v], _mins_++) { *_mins_ = data[p]; for (i = 0; i < estr[-1]; i += estr[v - 1]) for (j = i; j < i + estr[v]; j++) if (data[j + p] < *_mins_) *_mins_ = data[j + p]; }; };
void mmx::tensor::mpolfill | ( | C * | data, |
const sparse::monomial_seq< X, O > & | mpol, | ||
const eenv & | env | ||
) |
Definition at line 536 of file tensor_eenv_loops.hpp.
References assign(), eenv::nvr(), eenv::str(), and eenv::vrs().
Referenced by mmx::realroot::fill_data(), and monomials< C >::monomials().
{ const int *vr = env.vrs (); const int *st = env.str (); const int nvr = env.nvr(); typename sparse::monomial_seq<X,O>::const_iterator it; C c; for (it =mpol.begin (); it != mpol.end (); it++) { int a = 0; for (int v = 0; v < nvr; a += (*it)[vr[v]] * st[v], v++) ; let::assign(c,(*it).coeff ()); data[a] += c; }; }
void mmx::tensor::mprint | ( | OSTREAM & | o, |
const bernstein< C > & | mpl | ||
) |
Definition at line 289 of file tensor_bernstein_fcts.hpp.
References convert().
{ monomials < C > mp (0); convert (mp, mpl); o << mp; };
void mmx::tensor::mul | ( | monomials< C > & | r, |
const monomials< C > & | a | ||
) |
Definition at line 276 of file tensor_monomials_fcts.hpp.
References conv().
{ // monomials<C> s(r); conv(r,a); };
void mmx::tensor::mul | ( | monomials< C > & | a, |
const monomials< C > & | b, | ||
const C & | c | ||
) | [inline] |
void mmx::tensor::mul | ( | monomials< C > & | r, |
const C & | c, | ||
const monomials< C > & | a | ||
) | [inline] |
void mmx::tensor::mul | ( | monomials< X > & | r, |
const monomials< Y > & | a, | ||
const monomials< Z > & | b | ||
) | [inline] |
void mmx::tensor::mul | ( | bernstein< C > & | r, |
const bernstein< C > & | a, | ||
const bernstein< C > & | b | ||
) |
Definition at line 142 of file tensor_bernstein_fcts.hpp.
References conv(), scale(), and uscale().
Referenced by mul().
{ bernstein < C > a_ (a); scale (a_); bernstein < C > b_ (b); scale (b_); tensor::conv (r, a_, b_); uscale (r); };
void mmx::tensor::mul | ( | bernstein< C > & | r, |
const bernstein< C > & | a | ||
) |
Definition at line 152 of file tensor_bernstein_fcts.hpp.
References conv(), scale(), monomials< C >::swap(), and uscale().
{ bernstein < C > a_; r.swap (a_); scale (a_); bernstein < C > b_ (a); scale (b_); tensor::conv (r, a_, b_); uscale (r); };
void mmx::tensor::mul | ( | bernstein< C > & | r, |
const bernstein< C > & | a, | ||
const C & | c | ||
) | [inline] |
void mmx::tensor::mul | ( | bernstein< C > & | r, |
const C & | c, | ||
const bernstein< C > & | a | ||
) | [inline] |
void mmx::tensor::mul | ( | bernstein< C > & | r, |
const C & | c | ||
) |
Definition at line 173 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), monomials< C >::esz(), and mmx::vctops::scmul().
{ vct::scmul(r.begin (),c, r.esz (), 1); }
void mmx::tensor::mul | ( | monomials< C > & | r, |
const C & | c | ||
) |
Definition at line 266 of file tensor_monomials_fcts.hpp.
References monomials< C >::begin(), monomials< C >::esz(), and mmx::vctops::scmul().
{ vct::scmul (r.begin (), c, r.esz (), 1); };
std::ostream& mmx::tensor::operator<< | ( | std::ostream & | o, |
const monomials< C > & | mpl | ||
) |
Definition at line 122 of file tensor_monomials_fcts.hpp.
References print().
{ o << "monomials object:\n"; o << "\t(addresses) o: " << &mpl << " e: " << mpl.env.data << "d: " << mpl. begin () << std::endl; o << "\t(eenv)" << mpl.env << std::endl; o << "\t(data)"; array::print (o, mpl.data); o << std::endl; o << ":object monomials\n"; return o; };
std::ostream& mmx::tensor::operator<< | ( | std::ostream & | o, |
const bernstein< C > & | mpl | ||
) |
Definition at line 253 of file tensor_bernstein_fcts.hpp.
References print().
{ o << "bernstein object:\n"; o << "\t(addresses) o: " << &mpl << " e: " << mpl.env.data << "d: " << mpl. begin () << std::endl; o << "\t(eenv)" << mpl.env << std::endl; o << "\t(data)"; array::print (o, mpl.data); o << std::endl; o << ":object bernstein\n"; return o; };
std::ostream& mmx::tensor::operator<< | ( | std::ostream & | o, |
const vd & | vd_ | ||
) | [inline] |
Definition at line 394 of file tensor_eenv_fcts.hpp.
{ o << "vd(" << vd_.n << ", " << vd_.d << ")"; return o; };
std::ostream& mmx::tensor::operator<< | ( | std::ostream & | out, |
const eenv & | env | ||
) | [inline] |
Definition at line 325 of file tensor_eenv_fcts.hpp.
References eenv::data, eenv::nvr(), print(), eenv::str(), eenv::sz(), eenv::szs(), and eenv::vrs().
{ out << "*eenv*\n"; out << "\tpos: " << env.data << "\n"; out << "\tref: " << env.data[0] << "\n"; out << "\tnvr: " << env.nvr() << "\n"; out << "\tesz: " << env.sz () << "\n"; out << "\tszs: "; vct::print (env.szs (), env.nvr (), 1, out); out << "\n"; out << "\tvrs: "; vct::print (env.vrs (), env.nvr (), 1, out); out << "\n"; out << "\tstr: "; vct::print (env.str (), env.nvr (), 1, out); return out; };
OSTREAM& mmx::tensor::print | ( | OSTREAM & | os, |
const monomials< C > & | mpl, | ||
const variables & | Var = monom<C>::var |
||
) |
Definition at line 306 of file tensor_monomials_fcts.hpp.
References monomials< C >::env, eenv::mxvr(), monomials< C >::nvr(), print(), monomials< C >::size(), monomials< C >::szs(), mmx::Var(), and monomials< C >::vrs().
{ typedef monom<C> monom_t; typedef typename monom<C>::container_t exponent_t; exponent_t tmp (mpl.env.mxvr()+1); const int *szs = mpl.szs (); const int *vrs = mpl.vrs (); bool notfirst = false; for (int i = 0; i < mpl.size(); i++) if (mpl[i] != 0) { int a, v; for (a = i, v = mpl.nvr () - 1; a; a /= szs[v], v--) tmp[vrs[v]] = a % szs[v]; std::ostringstream sm; print(sm, monom_t (mpl[i], tmp),Var); //bool is_pol = is_polynomial(sm); if ( sm.str()[0]!='-' && sm.str()[0]!='+' && notfirst) { os <<'+'; } os<<sm.str(); notfirst=true; }; if(!notfirst) os << "0"; return os; }
void mmx::tensor::print | ( | OSTREAM & | o, |
const bernstein< C > & | mpl | ||
) |
Definition at line 298 of file tensor_bernstein_fcts.hpp.
References convertb2m().
Referenced by operator<<(), and print().
{ monomials<C> mp(mpl); convertb2m(mp); print(o,mp); };
void mmx::tensor::print | ( | OSTREAM & | o, |
const bernstein< C > & | mpl, | ||
const variables & | v | ||
) | [inline] |
void mmx::tensor::print_flatten | ( | SYNTAX & | out, |
const monomials< C > & | mpl, | ||
const variables & | Var = monom<C>::var |
||
) |
Definition at line 333 of file tensor_monomials_fcts.hpp.
References monomials< C >::env, mmx::flatten(), eenv::mxvr(), monomials< C >::nvr(), mmx::pow(), monomials< C >::size(), monomials< C >::szs(), mmx::Var(), and monomials< C >::vrs().
Referenced by mmx::flatten().
{ typedef monom<C> monom_t; typedef typename monom<C>::container_t exponent_t; exponent_t tmp (mpl.env.mxvr()+1); const int *szs = mpl.szs (); const int *vrs = mpl.vrs (); for (int i = 0; i < mpl.size(); i++) if (mpl[i] != 0) { int a, v; for (a = i, v = mpl.nvr () - 1; a; a /= szs[v], v--) tmp[vrs[v]] = a % szs[v]; SYNTAX m = flatten(mpl[i]); for(int i=0;i<mpl.env.mxvr()+1;i++) m = m * pow(SYNTAX(Var[i].data()),flatten(tmp[i])); out+=m; } }
void mmx::tensor::realloc | ( | monomials< C > & | mpl, |
const eenv & | nenv | ||
) |
Definition at line 78 of file tensor_monomials_fcts.hpp.
References monomials< C >::env, eenv::equal(), and monomials< C >::swap().
Referenced by add(), casteljau(), face(), slice(), split(), and sub().
{ if (!eenv::equal (mpl.env, nenv )) { monomials< C > tmp (nenv); mpl.swap (tmp); }; };
void mmx::tensor::reciprocal | ( | monomials< C > & | f, |
const int & | v | ||
) |
Compute f (1/var[v])
Definition at line 578 of file tensor_monomials_fcts.hpp.
References monomials< C >::data, monomials< C >::nvr(), monomials< C >::str(), mmx::sparse::swap(), monomials< C >::szs(), and monomials< C >::vrs().
{ std::vector<int> ind = std::vector<int>( f.nvr() ); int s,i,pos =0; int * vars = f.vrs(); int * sstr = f.str(); int * sszs = f.szs(); int l= sszs[v]-1; for (;;) { for ( s = 0 ; s <= l/2; s++ ) std::swap(f.data[sstr[v]*s+pos], f.data[sstr[v]*(l-s)+pos] ); // next row for (i = 0; i < f.nvr() ; ++i) { if ( vars[i] != v ) { ind[i] += 1; pos += sstr[i]; } else continue; if (ind[i] < sszs[i]) break; ind[i] = 0; pos -= sszs[i]*sstr[i]; } if (i == f.nvr() ) break; } }
void mmx::tensor::rename_var | ( | monomials< C > & | f, |
const int & | v, | ||
const int & | n | ||
) |
Definition at line 682 of file tensor_monomials_fcts.hpp.
References monomials< C >::nvr(), and monomials< C >::vrs().
Referenced by box_rep< POL >::lface(), and box_rep< POL >::rface().
{ int * vr = f.vrs(); for (int i=0; i< f.nvr(); ++i) if (vr[i]==v) { vr[i]=n; break; } }
void mmx::tensor::restrict | ( | bernstein< C > & | rst, |
int | v, | ||
const T & | a, | ||
const T & | b | ||
) |
Definition at line 345 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), brestrict(), monomials< C >::env, eenv::nvr(), and eenv::vridx().
Referenced by box_rep< C >::box_rep(), convertm2b(), and polynomial< C, with< Rep, Ord > >::polynomial().
{ v = rst.env.vridx(v); if (v < rst.env.nvr()) brestrict( rst.begin(), rst.env, v, a, b ); };
void mmx::tensor::rewrite | ( | bernstein< C > & | r, |
const eenv & | newe | ||
) |
Definition at line 73 of file tensor_bernstein_fcts.hpp.
References elevate(), eenv::elevation(), and monomials< C >::env.
void mmx::tensor::rface | ( | C * | dst, |
const eenv & | a, | ||
const C * | src, | ||
int | v | ||
) |
Definition at line 504 of file tensor_eenv_loops.hpp.
References eenv::str(), and eenv::sz().
{ const int ssz = a.sz (); // const int * sszs = a.szs(); const int * sstr = a.str(); C * ed; const C * es; const C * fs; es = src + sstr[v-1]-sstr[v]; for ( ed = dst; es < src+ssz; es += sstr[v-1] ) { for ( fs = es; fs < es + sstr[v]; *ed++ = *fs++ ) ; }; };
void mmx::tensor::rface | ( | bernstein< C > & | f, |
const bernstein< C > & | src, | ||
int | v | ||
) | [inline] |
Definition at line 359 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), and monomials< C >::env.
Referenced by face(), and rface().
{ rface( f.begin(), src.env, src.begin(), v ); };
void mmx::tensor::rface | ( | monomials< C > & | f, |
const monomials< C > & | src, | ||
int | v | ||
) | [inline] |
Definition at line 447 of file tensor_monomials_fcts.hpp.
References monomials< C >::begin(), monomials< C >::env, and rface().
{ rface( f.begin(), src.env, src.begin(), v ); };
void mmx::tensor::scadd | ( | MPLBASE & | r, |
const MPLBASE1 & | a, | ||
const C & | c | ||
) |
Definition at line 21 of file tensor_convert.hpp.
References scadd().
{ if (r.env != a.env) scadd (r = a, c); else vct::scadd (r.begin (), a.begin (), c, r.esz ()); };
void mmx::tensor::scadd | ( | MPLBASE & | mpl, |
const C & | c | ||
) |
Definition at line 15 of file tensor_convert.hpp.
Referenced by add(), and scadd().
{ vct::scadd (mpl.begin (), c, mpl.esz (), 1); };
void mmx::tensor::scale | ( | bernstein< C > & | mpl | ) | [inline] |
Definition at line 14 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), and monomials< C >::env.
Referenced by elevate(), and mul().
{ scale (mpl.begin (), mpl.env, binomials < C >::default_); };
void mmx::tensor::scale | ( | C * | data, |
const eenv & | env, | ||
binomials< C > & | binoms | ||
) |
Convert a multivariate polynomial data in the bernstein basis to the scaled bernstein basis.
Definition at line 198 of file tensor_eenv_loops.hpp.
References eenv::nvr(), mmx::vct::pmul(), mmx::vctops::pmul(), eenv::str(), eenv::sz(), and eenv::szs().
{ const int *estr = env.str (); const int *eszs = env.szs (); const int envr = env.nvr (); const int esz = env.sz (); const C * bins = binoms[eszs[envr - 1] - 1]; for (C * pdata = data; pdata < data + esz; vct::pmul (pdata, bins, eszs[envr - 1]), pdata += estr[envr - 2]) ; for (int v = 0; v < envr - 1; v++) { bins = binoms[eszs[v] - 1]; // int k = 0; for (int i = 0; i < esz; i += estr[v - 1]) for (int j = 0; j < estr[v]; j++) vct::pmul (data + i + j, bins, eszs[v], estr[v], 1); }; };
void mmx::tensor::set_variable | ( | monomials< C > & | f, |
C | t, | ||
int | v | ||
) |
Compute f (x_v=t)
Definition at line 535 of file tensor_monomials_fcts.hpp.
References monomials< C >::data, monomials< C >::nvr(), monomials< C >::str(), monomials< C >::szs(), and monomials< C >::vrs().
{ std::vector<int> ind = std::vector<int>( f.nvr() ); int k, i, pos =0; int * vars = f.vrs(); int * sstr = f.str(); int * sszs = f.szs() ; C tmp; for (;;) { tmp=0; for( k = sszs[v]-1; k !=-1; --k ) { tmp *= t; tmp += f.data[sstr[v]*k + pos]; f.data[sstr[v]*k + pos] = 0 ; } f.data[pos]=tmp; /* next row */ for (i = 0; i < f.nvr() ; ++i) { if ( vars[i] != v ) { ind[i] += 1; pos += sstr[i]; } else continue; if (ind[i] < sszs[i]) break; ind[i] = 0; pos -= sszs[i]*sstr[i]; } if (i == f.nvr() ) break; } }
void mmx::tensor::shift | ( | monomials< C > & | f, |
const C & | t, | ||
const int & | v | ||
) |
Compute f (var[v]+t)
Definition at line 498 of file tensor_monomials_fcts.hpp.
References monomials< C >::data, monomials< C >::nvr(), monomials< C >::str(), monomials< C >::szs(), and monomials< C >::vrs().
{ std::vector<int> ind = std::vector<int>( f.nvr() ); int s,k,j, i,pos =0; int * vars = f.vrs(); int * sstr = f.str(); int * sszs = f.szs() ; for (;;) { for ( s = sszs[v], j = 0; j <= s-2; j++ ) for( k = s-2; k >= j; k-- ) f.data[sstr[v]*k+ pos ] += t*f.data[ sstr[v]*(1+k)+ pos ]; /* next row */ for (i = 0; i < f.nvr() ; ++i) { if ( vars[i] != v ) { ind[i] += 1; pos += sstr[i]; } else continue; if (ind[i] < sszs[i]) break; ind[i] = 0; pos -= sszs[i]*sstr[i]; } if (i == f.nvr() ) break; } }
unsigned mmx::tensor::size | ( | const bernstein< C > & | p | ) | [inline] |
Definition at line 70 of file tensor_bernstein.hpp.
References monomials< C >::size().
{return p.size();}
void mmx::tensor::slice | ( | C * | dst, |
const eenv & | a, | ||
const C * | src, | ||
int | v, | ||
int | n | ||
) |
Definition at line 520 of file tensor_eenv_loops.hpp.
References eenv::str(), and eenv::sz().
Referenced by convert(), islice(), and slice().
{ const int ssz = a.sz (); const int * sstr = a.str(); C * ed; const C * es; const C * fs; es = src + sstr[v-1]-sstr[v]; for ( ed = dst; es < src+ssz; es += sstr[v-1] ) { // fs = es + sstr[v-1] - sstr[v]; for ( fs = es; fs < es + sstr[v]; *ed++ = *fs++ ) ; }; };
void mmx::tensor::slice | ( | monomials< C > & | f, |
const monomials< C > & | src, | ||
int | v, | ||
int | n | ||
) | [inline] |
Definition at line 471 of file tensor_monomials_fcts.hpp.
References assert, monomials< C >::env, islice(), eenv::localv(), realloc(), and slice().
void mmx::tensor::split | ( | bernstein< C > & | l, |
bernstein< C > & | r, | ||
int | v | ||
) | [inline] |
Definition at line 338 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), bsplit2(), monomials< C >::env, eenv::localv(), and realloc().
void mmx::tensor::split | ( | bernstein< C > & | l, |
bernstein< C > & | r, | ||
int | v, | ||
const T & | t | ||
) |
Definition at line 330 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), bsplit(), monomials< C >::env, eenv::localv(), and realloc().
void mmx::tensor::split | ( | polynomial< C, with< Rep, Ord > > & | r, |
polynomial< C, with< Rep, Ord > > & | p, | ||
int | v | ||
) | [inline] |
Definition at line 187 of file polynomial_fcts.hpp.
Referenced by mv_binary_approx::subdivide(), and binary_approx::subdivide().
{ split(r.rep(),p.rep(),v); }
void mmx::tensor::sub | ( | bernstein< C > & | mpl, |
const bernstein< C > & | a, | ||
const C & | c | ||
) |
void mmx::tensor::sub | ( | bernstein< C > & | mpl, |
const C & | c | ||
) |
Definition at line 127 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), monomials< C >::esz(), and mmx::vctops::scsub().
{ vct::scsub (mpl.begin (), c, mpl.esz (), 1); }
void mmx::tensor::sub | ( | monomials< X > & | r, |
const monomials< Y > & | a | ||
) | [inline] |
Definition at line 249 of file tensor_monomials_fcts.hpp.
References eenv::common(), monomials< C >::env, extend(), and wsubm().
void mmx::tensor::sub | ( | monomials< C > & | mpl, |
const C & | c, | ||
const monomials< C > & | a | ||
) | [inline] |
void mmx::tensor::sub | ( | monomials< C > & | a, |
const X & | x | ||
) | [inline] |
Definition at line 261 of file tensor_monomials_fcts.hpp.
{ a[0] -= (C)x; }
void mmx::tensor::sub | ( | bernstein< C > & | mpl, |
const C & | c, | ||
const bernstein< C > & | a | ||
) |
void mmx::tensor::sub | ( | bernstein< C > & | r, |
const bernstein< C > & | a | ||
) |
Definition at line 105 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), eenv::common(), monomials< C >::env, monomials< C >::esz(), mmx::vctops::psub(), and rewrite().
Referenced by sub().
void mmx::tensor::sub | ( | monomials< X > & | r, |
const monomials< X > & | a, | ||
const C & | c | ||
) | [inline] |
void mmx::tensor::sub | ( | bernstein< C > & | r, |
const bernstein< C > & | a, | ||
const bernstein< C > & | b | ||
) |
void mmx::tensor::sub | ( | monomials< C > & | r, |
const monomials< C > & | a, | ||
const monomials< C > & | b | ||
) | [inline] |
Definition at line 221 of file tensor_monomials_fcts.hpp.
References monomials< C >::begin(), eenv::common(), monomials< C >::env, monomials< C >::esz(), mmx::vct::icopy(), mmx::vct::ipsub(), mmx::max(), eenv::oaddress(), realloc(), and sub().
{ if ( &r == &a ) { sub(r,b); return; }; if ( &r == &b ) { monomials<C> tmp = b; sub(r,a,tmp); return; }; realloc(r,eenv::common(a.env,b.env)); unsigned *oadd = new unsigned[std::max(a.esz (),b.esz())]; eenv::oaddress (r.env, oadd,a.env, 0, 0); vct::icopy(r.begin(),oadd,a.esz(),a.begin()); eenv::oaddress(r.env,oadd,b.env,0,0); vct::ipsub (r.begin (), oadd,b.esz (), b.begin ()); };
void mmx::tensor::subs0 | ( | Result * | result, |
const monomials< Coeff > & | monoms, | ||
const Parameters & | parameters | ||
) | [inline] |
Definition at line 155 of file tensor_monomials_fcts.hpp.
References monomials< C >::begin(), and monomials< C >::env.
{ subs0m( result, monoms.begin (), monoms.env, parameters ); };
void mmx::tensor::subs0 | ( | Result * | result, |
const bernstein< Coeff > & | controls, | ||
const Parameters & | parameters | ||
) | [inline] |
Definition at line 216 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), and monomials< C >::env.
{ subs0b( result, controls.begin (), controls.env, parameters ); };
void mmx::tensor::uscale | ( | C * | data, |
const eenv & | env, | ||
binomials< C > & | binoms | ||
) |
Convert a multivariate polynomial data in the scaled bernstein basis to the bernstein basis
Definition at line 220 of file tensor_eenv_loops.hpp.
References eenv::nvr(), mmx::vct::pdiv(), eenv::str(), eenv::sz(), and eenv::szs().
{ const int *estr = env.str (); const int *eszs = env.szs (); const int envr = env.nvr (); const int esz = env.sz (); const C *bins = binoms[eszs[envr - 1] - 1]; for (C * pdata = data; pdata < data + esz; pdata += estr[envr - 2]) vct::pdiv (pdata, bins, eszs[envr - 1]); for (int v = 0; v < envr - 1; v++) { bins = binoms[eszs[v] - 1]; // int k = 0; for (int i = 0; i < esz; i += estr[v - 1]) for (int j = 0; j < estr[v]; j++) vct::pdiv (data + i + j, bins, eszs[v], estr[v], 1); }; };
void mmx::tensor::uscale | ( | bernstein< C > & | mpl | ) | [inline] |
Definition at line 20 of file tensor_bernstein_fcts.hpp.
References monomials< C >::begin(), and monomials< C >::env.
Referenced by elevate(), and mul().
{ uscale (mpl.begin (), mpl.env, binomials < C >::default_); };
bool mmx::tensor::varindex | ( | int & | lv, |
const monomials< C > & | mpl, | ||
int | gv | ||
) |
Definition at line 100 of file tensor_monomials_fcts.hpp.
References monomials< C >::env, and eenv::hasvar().
{
return mpl.env.hasvar (lv, gv);
}
void mmx::tensor::vswap | ( | C * | data, |
const eenv & | env, | ||
int * | perm, | ||
int * | supp = 0 , |
||
int | nsupp = 0 |
||
) |
Definition at line 137 of file tensor_eenv_loops.hpp.
References eenv::nvr(), eenv::str(), mmx::sparse::swap(), eenv::szs(), and eenv::vswap().
{ const int *szs = env.szs (); const int *str = env.str (); int ostr[env.nvr ()]; int i; for (i = env.nvr () - 2, str[env.nvr () - 1] = 1; i >= -1; ostr[i] = szs[perm[i + 1]] * str[i + 1], i--) ; if (supp == 0) { int a, o, v; for (i = 0; i < env.esz (); i++) { for (a = i, v = env.nvr () - 1; a; a /= szs[v], v--) o += (a % szs[v]) * ostr[perm[v]]; std::swap (data[i], data[o]) ; }; } else { int a, o, v; for (i = 0; i < nsupp; supp[i++] = o) { for (a = supp[i], v = env.nvr () - 1; a; a /= szs[v], v--) o += (a % szs[v]) * ostr[perm[v]]; std::swap (data[i], data[o]); }; }; env.vswap (perm); };
void mmx::tensor::waddm | ( | monomials< X > & | mpla, |
const monomials< Y > & | mplb | ||
) |
Definition at line 176 of file tensor_monomials_fcts.hpp.
References assert, monomials< C >::begin(), monomials< C >::env, monomials< C >::esz(), mmx::vct::ipadd(), eenv::oaddress(), and eenv::subset().
Referenced by add().
{ assert (eenv::subset (mplb.env, mpla.env)); unsigned *oadd = new unsigned[mplb.esz ()]; eenv::oaddress (mpla.env, oadd, mplb.env, 0, 0); vct::ipadd (mpla.begin (), oadd, mplb.esz (), mplb.begin ()); delete[]oadd; };
void mmx::tensor::wsubm | ( | monomials< X > & | mpla, |
const monomials< Y > & | mplb | ||
) |
Definition at line 239 of file tensor_monomials_fcts.hpp.
References assert, monomials< C >::begin(), monomials< C >::env, monomials< C >::esz(), mmx::vct::ipsub(), eenv::oaddress(), and eenv::subset().
Referenced by sub().
{ assert (eenv::subset (mplb.env, mpla.env)); unsigned *oadd = new unsigned[mplb.esz ()]; eenv::oaddress (mpla.env, oadd, mplb.env, 0, 0); vct::ipsub (mpla.begin (), oadd, mplb.esz (), mplb.begin ()); delete[]oadd; };