5 #ifndef _realroot_SOLVE_MV_CONFRAC_BOXREP_H
6 #define _realroot_SOLVE_MV_CONFRAC_BOXREP_H
27 # define DPOL polynomial<double,with<MonomialTensor> >
31 # define TODOUBLE as<double>
43 typedef typename POL::scalar_t C;
45 typedef std::stack<box_rep<POL> *> STACK;
65 for(
unsigned i=0; i<S.
size(); i++ ){
66 t= *std::max_element( (S[i]).begin(), (S[i]).end() );
131 for (i=0; i!=dim; i++)
138 for (j=0; j!=S.
size(); j++)
154 inline unsigned nbvar() {
return dim; }
165 for (
unsigned i=0; i!=s.
size(); i++ )
184 subm =
new int* [order - 1];
186 for(p = 0; p < order; p++) {
188 subm[a] =
new C[order - 1];
192 for(q = 0; q< order; q++) {
194 subm[a][
b++] = matrix[p][q];
203 C
det(C **matrix,
int order)
210 for(i = 0; i < order; i++)
211 ev += (i%2==0?1:-1)* matrix[i][0] *
det(
submatrix(matrix, order, i, 0), order - 1);
225 if (ev< .1e-15)
return (0);
240 for (
unsigned i=0; i!=dim; ++i )
243 if ( hg[i].
b!=0 && hg[i].d!=0 )
244 l= as<FT>(hg[i].b)/as<FT>(hg[i].d);
245 else if ( hg[i].d==0 )
247 else if ( hg[i].
b==0 )
250 l= as<FT>(hg[i].a)/as<FT>(hg[i].
c) ;
253 if ( hg[i].a!=0 && hg[i].c!=0 )
254 r= as<FT>(hg[i].a)/as<FT>(hg[i].c);
255 else if ( hg[i].c==0 )
257 else if ( hg[i].a==0 )
260 r= as<FT>(hg[i].b)/as<FT>(hg[i].d);
262 if ( l<=r ) s << Interval<FT>(l,r);
263 else s << Interval<FT>(r,l);
271 for (
unsigned i=0; i!=dim; ++i )
272 m << as<C>( floor( as<double>(hg[i].d/hg[i].
c) )) ;
279 t= as<C>( floor( as<double>(hg[i].d/hg[i].
c) ));
290 for (
unsigned i=0; i!=dim; ++i )
291 m << ( as<FT>(hg[i].a)*(t[i]) + as<FT>(hg[i].
b) ) /
292 ( as<FT>(hg[i].
c)*(t[i]) + as<FT>(hg[i].d) ) ;
311 template<
class FT>
inline
317 for (
unsigned i=0; i!=S.
size() ; ++i )
330 for (
unsigned i=0; i!=S.
size() ; ++i )
350 for ( i=0; i<dim ;++i)
371 for (i=0; i!=S.
size(); ++i )
373 m1=
maxs( & S[i] , v);
374 m0=
mins( & S[i] , v);
377 if ( m0( C(0) ) > 0 )
380 else if ( m1( C(0) ) < 0 )
390 POL h(0,f->rep().szs()[v]-1,0) ;
398 POL h(0,f->rep().szs()[v]-1,0) ;
417 for (i = 0; i < dim ; ++i)
428 for (i = 0; i < dim ; ++i)
429 if (++ind[i] <2 )
break;
else ind[i]=0 ;
430 if (i == dim )
break;
495 for (i = 0; i < S.
size() ; ++i)
507 for (i = 0; i < S.
size() ; ++i)
517 for (
unsigned i = 0; i < S.
size() ; ++i)
527 for (
unsigned i = 0; i < S.
size() ; ++i)
548 (l[0]>0)!=(u[0]>0) );
567 for (i=0; i!=dim;++i)
568 for (j=0; j!=dim;++j)
572 for (i=0; i!=dim;++i)
573 for (j=0; j!=dim;++j)
578 if (c<dim)
return false;
581 for (i=0; i!=dim;++i)
582 for (j=0; j!=dim;++j)
587 if (c<dim)
return false;
647 for (
unsigned i=0; i!=
nbpol(); ++i)
670 FT m=this->width<FT>(i);
684 w= s[0].width(); t= 0;
686 for ( i=0; i!=s.
size(); ++i )
687 if ( s[i].
width() > w)
688 { w=s[i].width() ; t=i; }
714 std::cout <<
"-------------Box---------------" <<
"\n" ;
715 std::cout <<
system() <<
"\n";
716 for (
unsigned i=0; i!=dim;++i)
717 std::cout<<
"("<<hg[i].a <<
"x + " << hg[i].
b<<
")/("<<hg[i].
c<<
"x+ "<<hg[i].d <<
")"<<std::endl; ;
721 std::cout <<
"-------------------------------" <<
"\n" ;
int size()
Definition: homography.hpp:57
int ** submatrix(C **matrix, int order, int i, int j)
Definition: solver_mv_monomial_box_rep.hpp:178
TMPL void reciprocal(Polynomial &f, const int &v)
Definition: polynomial_fcts.hpp:234
Tensor ring of polynomials in the monomial basis.
Definition: polynomial_tensor.hpp:48
void resize(size_type i)
Definition: Seq.hpp:169
const C & b
Definition: Interval_glue.hpp:25
#define DPOL
Definition: solver_mv_monomial_box_rep.hpp:27
void shift(IntervalData< RT, Poly > &ID, const RT &a)
Definition: contfrac_intervaldata.hpp:257
Seq< C > middle()
Definition: solver_mv_monomial_box_rep.hpp:268
int signof(DPOL *p)
Definition: solver_mv_monomial_box_rep.hpp:216
box_rep()
Definition: solver_mv_monomial_box_rep.hpp:89
Seq< POL > S
Definition: solver_mv_monomial_box_rep.hpp:56
void shift_hom(const real &t, const int &v)
Definition: homography.hpp:49
box_rep(Seq< POL > &sys, unsigned d)
Definition: solver_mv_monomial_box_rep.hpp:113
Seq< POL > system()
Accessors.
Definition: solver_mv_monomial_box_rep.hpp:151
void reverse_and_shift_box(const int &v)
Definition: solver_mv_monomial_box_rep.hpp:525
homography_mv< C > homography()
Definition: solver_mv_monomial_box_rep.hpp:152
R & rep(R &r)
Definition: shared_object.hpp:180
FT width(unsigned &t)
The width, corresponding max projection returned in t.
Definition: solver_mv_monomial_box_rep.hpp:677
bool include1(DPOL *J)
Inclusion criteria (Miranda Test)
Definition: solver_mv_monomial_box_rep.hpp:554
~box_rep()
Definition: solver_mv_monomial_box_rep.hpp:122
void contract_box(const C &t, const int &v)
x_v = t*x_v
Definition: solver_mv_monomial_box_rep.hpp:503
Definition: fatarcs.hpp:23
POL mins(POL *f, int v)
Definition: solver_mv_monomial_box_rep.hpp:388
POL maxs(POL *f, int v)
Definition: solver_mv_monomial_box_rep.hpp:396
void restrict(Seq< Interval< C > > &dom0)
Definition: solver_mv_monomial_box_rep.hpp:124
C det(C **matrix, int order)
Definition: solver_mv_monomial_box_rep.hpp:203
box_rep(box_rep< POL > b, int i)
Definition: solver_mv_monomial_box_rep.hpp:101
void subdivide(const int &v, C &m, STACK &stck)
Subdivide in direction v and at point x_v=m.
Definition: solver_mv_monomial_box_rep.hpp:470
void subdivide(const int &v, STACK &stck, C m=C(1))
Subdivide in direction v only.
Definition: solver_mv_monomial_box_rep.hpp:450
void eval(Result &result, const bernstein< Coeff > &controls, const Parameters ¶meters)
Definition: tensor_bernstein_fcts.hpp:195
Seq< C > subdiv_center(const unsigned &i)
Definition: solver_mv_monomial_box_rep.hpp:296
void contraction(monomials< C > &f, const C &t, const int &v)
Compute f (a*var[v])
Definition: tensor_monomials_fcts.hpp:613
size_type size() const
Definition: Seq.hpp:166
void subdivide(STACK &stck)
Subdivide in all directions.
Definition: solver_mv_monomial_box_rep.hpp:405
unsigned nbpol()
Definition: solver_mv_monomial_box_rep.hpp:155
homography_mv< C > hom()
Definition: solver_mv_monomial_box_rep.hpp:231
Seq< double > subdiv_point(const unsigned &i)
Definition: solver_mv_monomial_box_rep.hpp:306
Definition: solver_ucf.hpp:25
void reciprocal_hom(const real &t, const int &v)
Definition: homography.hpp:50
Seq< FT > point(Seq< FT > t)
Definition: solver_mv_monomial_box_rep.hpp:286
POL lface(const int &i, const int &v)
Definition: solver_mv_monomial_box_rep.hpp:693
void contract_hom(const real &t, const int &v)
Definition: homography.hpp:51
FT volume()
Definition: solver_mv_monomial_box_rep.hpp:158
bool exclude1(Seq< POL * > &S0)
Exclusion criteria (inteval arithmetic)
Definition: solver_mv_monomial_box_rep.hpp:641
Definition: solver.hpp:68
void rename_var(monomials< C > &f, const int &v, const int &n)
Definition: tensor_monomials_fcts.hpp:681
void safe_split(const int &v, C m=C(1))
Subdivide in direction v only.
Definition: solver_mv_monomial_box_rep.hpp:436
TMPL void face(Polynomial &r, const Polynomial &p, int v, int f)
Definition: polynomial_fcts.hpp:188
void colapse()
Definition: homography.hpp:52
bool is_root(Seq< C > t)
Definition: solver_mv_monomial_box_rep.hpp:326
void print()
Definition: solver_mv_monomial_box_rep.hpp:712
TMPL POL
Definition: polynomial_dual.hpp:74
bool reduce_domain()
Reduce the domain from below using integer lower bound.
Definition: solver_mv_monomial_box_rep.hpp:341
void update_data()
Definition: solver_mv_monomial_box_rep.hpp:58
void maxs(OutputIterator _maxs_, const C *data, const eenv &env, int v)
Definition: tensor_eenv_loops.hpp:106
POL rface(const int &i, const int &v)
Definition: solver_mv_monomial_box_rep.hpp:703
Generic class for intervals.
Definition: Interval.hpp:44
Box representation.
Definition: solver_mv_monomial_box_rep.hpp:41
POL system(unsigned i)
Definition: solver_mv_monomial_box_rep.hpp:153
T m
Definition: Interval.hpp:52
unsigned nbvar()
Definition: solver_mv_monomial_box_rep.hpp:154
const C & c
Definition: Interval_glue.hpp:45
C middle(int i)
Definition: solver_mv_monomial_box_rep.hpp:276
void reverse_box(const int &v)
Definition: solver_mv_monomial_box_rep.hpp:515
POL system(const int i)
Definition: solver_mv_monomial_box_rep.hpp:232
void shift_box(const C &t, const int &v=0)
Shift the system by t in direction v.
Definition: solver_mv_monomial_box_rep.hpp:491
C l_bound(const int v)
Lower integer bound for v-th coords of the positive roots.
Definition: solver_mv_monomial_box_rep.hpp:365
FT width()
The width of the box (max of projection widths)
Definition: solver_mv_monomial_box_rep.hpp:667
Seq< Interval< FT > > domain()
Definition: solver_mv_monomial_box_rep.hpp:235
bool miranda_test(const int i, const int j)
Definition: solver_mv_monomial_box_rep.hpp:539
bool include3(DPOL *J)
Inclusion criteria based on Rump's test.
Definition: solver_mv_monomial_box_rep.hpp:615
box_rep(Seq< POL > &sys, homography_mv< C > &h)
Definition: solver_mv_monomial_box_rep.hpp:91
bool include2(DPOL *J)
Inclusion criteria (Jacobian+Topological Degree)
Definition: solver_mv_monomial_box_rep.hpp:595
TMPL bool no_variation(POL &p)
True iff all coefficients of p have the same sign.
Definition: solver_mv_monomial_tests.hpp:40
void mins(OutputIterator _mins_, const C *data, const eenv &env, int v)
Definition: tensor_eenv_loops.hpp:123
Seq< FT > eval(Seq< FT > t)
Definition: solver_mv_monomial_box_rep.hpp:312
T M
Definition: Interval.hpp:52
#define assert(expr, msg)
Definition: shared_object.hpp:57