24 # define TMPL template<class POL>
25 # define DPOL polynomial<double,with<MonomialTensor> >
26 # define BOX box_rep<POL>
29 # define TODOUBLE as<double>
60 df=
diff( *(S0[i]),k);
69 template<
class T>
inline
90 template<
class T>
inline
108 template<
class T>
inline
114 if (ev< .1e-15)
return (0);
127 for(p = 0; p < order; p++) {
132 for(q = 0; q < order; q++) {
134 subm[a*order + b++] = matrix[p*order+q];
150 for(i = 0; i < order; i++)
153 ev += T(i%2==0?1:-1)* mat[i*order] *
det(
submatrix(mat, order, i, 0), order - 1);
172 if (ev< .1e-10)
return (0);
204 (l[0]>0)!=(u[0]>0) );
217 unsigned dim= b->nbvar();
244 for (i=0; i!=dim;++i)
245 for (j=0; j!=dim;++j){
251 for (i=0; i!=dim;++i)
252 for (j=0; j!=dim;++j)
257 if (c<dim)
return false;
260 for (i=0; i!=dim;++i)
261 for (j=0; j!=dim;++j)
266 if (c<dim)
return false;
280 unsigned dim= b->nbvar();
288 int td= topological_degree_2d<POL, double>(
b);
294 return ( (td==-1 || td==1) );
301 double *fc, *jc, *ijc;
305 unsigned i,j,n= b->nbvar();
316 ijc=
new double[n*n];
323 m[i*n+j] += ijc[i*n+j]*jb[j*n+i];
334 ev+= -ijc[i*n+j]*fc[j] - m[i*n+j] *bx[i];
337 if ( ev.
m < bx[i].m ||
358 for (
unsigned i=0; i!=b->nbpol(); ++i)
386 unsigned dim= b->nbvar();
394 int td= topological_degree_2d<POL, double>(
b);
403 for (
unsigned i=0; i!=b->nbpol(); ++i)
418 if (a==FT(0) )
return 0;
419 return ( (a>0) ? 1 : -1 );
423 template<
class POL,
class FT>
427 return sgn ( f[ f.rep().szs()[0]-1 ]);
433 template<
class POL,
class FT>
437 typedef typename POL::scalar_t
C;
442 unsigned ev1(0), ev2(0), ev3(0), ev4(0);
447 POL fl0, fr0,fl1,fr1, s,
450 fl0=b->lface(0,1); gl0=b->lface(1,1);
451 fr0=b->rface(0,1); gr0=b->rface(1,1);
452 fl1=b->lface(0,0); gl1=b->lface(1,0);
453 fr1=b->rface(0,0); gr1=b->rface(1,0);
456 p<< FT(0);p << FT(0) ;
458 for (i=0;i< tmp.
size(); ++i )
459 p<< tmp[i] << FT(0) ;
462 p<< FT(-1);p << FT(0);
464 for (i=0;i< tmp.
size(); ++i )
465 p<< FT(-1) << tmp[i];
468 p<< FT(-1);p << FT(-1) ;
470 for (i=0;i< tmp.
size(); ++i )
471 p<< tmp[i] << FT(-1) ;
474 p<< FT(0);p << FT(-1) ;
476 for (i=0;i< tmp.
size(); ++i )
477 p<< FT(0) << tmp[i] ;
479 p<< FT(0);p << FT(0) ;
482 for (i=0; i<p.size()-3; i+=2)
484 p1[0]= p[i] ;p1[1]=p[i+1];
485 p2[0]= p[i+2];p2[1]=p[i+3];
487 if (p1[1]==FT(0) && p2[1]==FT(0)){
488 ev1=
sgn( fl0, p1[0] );
489 ev3=
sgn( fl0, p2[0] );
490 ev4=
sgn( gl0, p1[0] );
491 ev2=
sgn( gl0, p2[0] );
493 if (p1[0]==FT(-1) && p2[0]==FT(-1)){
494 ev1=
sgn( fr1, p1[1] );
495 ev3=
sgn( fr1, p2[1] );
496 ev4=
sgn( gr1, p1[1] );
497 ev2=
sgn( gr1, p2[1] );
499 if (p1[1]==FT(-1) && p2[1]==FT(-1)){
500 ev1=
sgn( fr0, p1[0] );
501 ev3=
sgn( fr0, p2[0] );
502 ev4=
sgn( gr0, p1[0] );
503 ev2=
sgn( gr0, p2[0] );
505 if (p1[0]==FT(0) && p2[0]==FT(0)){
506 ev1=
sgn( fl1, p1[1] );
507 ev3=
sgn( fl1, p2[1] );
508 ev4=
sgn( gl1, p1[1] );
509 ev2=
sgn( gl1, p2[1] );
512 std::cout<<
"TROUBLE!"<<std::endl;
514 tdeg+= ( (ev1)*(ev2) - (ev3)*(ev4) );
int topological_degree_2d(BOX *b)
Definition: solver_mv_monomial_tests.hpp:434
const C & b
Definition: Interval_glue.hpp:25
TMPL Polynomial diff(const Polynomial &pol, int v)
Multivariate Polynomial Differentiation.
Definition: polynomial_fcts.hpp:99
void precondition(Seq< T > val, DPOL *mat, int n)
Definition: solver_mv_monomial_tests.hpp:70
R & rep(R &r)
Definition: shared_object.hpp:180
#define BOX
Definition: solver_mv_monomial_tests.hpp:26
Definition: fatarcs.hpp:23
TMPL bool exclude3(BOX *b)
Definition: solver_mv_monomial_tests.hpp:400
T * eval_poly_matrix(Seq< T > val, DPOL *mat, int n)
Definition: solver_mv_monomial_tests.hpp:91
TMPL DPOL * jacobian(Seq< POL * > &S0)
Definition: solver_mv_monomial_tests.hpp:49
TMPL bool miranda_test(Seq< POL > &S, const int i, const int j)
Definition: solver_mv_monomial_tests.hpp:194
bool exclude1(BOX *b, Seq< POL * > &S0)
Exclusion criteria (inteval arithmetic)
Definition: solver_mv_monomial_tests.hpp:351
void eval(Result &result, const bernstein< Coeff > &controls, const Parameters ¶meters)
Definition: tensor_bernstein_fcts.hpp:195
size_type size() const
Definition: Seq.hpp:166
TMPL bool include2(BOX *b, DPOL *J)
Inclusion criteria (Jacobian+Topological Degree)
Definition: solver_mv_monomial_tests.hpp:274
Definition: solver.hpp:68
bool include3(BOX *b, DPOL *J, Seq< POL * > &S0)
Inclusion criteria based on Rump's test.
Definition: solver_mv_monomial_tests.hpp:299
TMPL void face(Polynomial &r, const Polynomial &p, int v, int f)
Definition: polynomial_fcts.hpp:188
int sgn(FT a)
Sign of a.
Definition: solver_mv_monomial_tests.hpp:416
#define TMPL
Definition: solver_mv_monomial_tests.hpp:24
TMPL POL
Definition: polynomial_dual.hpp:74
Definition: solver_ucf.hpp:27
T * submatrix(T *matrix, int order, int i, int j)
Definition: solver_mv_monomial_tests.hpp:119
T det(T *mat, int order)
Definition: solver_mv_monomial_tests.hpp:143
T m
Definition: Interval.hpp:52
const C & c
Definition: Interval_glue.hpp:45
double C
Definition: solver_mv_fatarcs.cpp:16
bool LUinverse(real_t *iM, real_t const *const M, unsigned n)
Definition: linear_doolittle.hpp:74
void assign(A &a, const B &b)
Generic definition of the assignement function.
Definition: assign.hpp:97
bool include1(BOX *b, DPOL *J)
Inclusion criteria (Miranda Test)
Definition: solver_mv_monomial_tests.hpp:210
bool has_sign_variation(Iterator b, Iterator e)
Definition: sign_variation.hpp:84
int signof_det(T *mat, const int &n)
Definition: solver_mv_monomial_tests.hpp:109
int signof(DPOL *p, Seq< FT > t)
Definition: solver_mv_monomial_tests.hpp:163
TMPL bool no_variation(POL &p)
True iff all coefficients of p have the same sign.
Definition: solver_mv_monomial_tests.hpp:40
#define DPOL
Definition: solver_mv_monomial_tests.hpp:25
TMPL bool exclude2(BOX *b, DPOL *J)
Exclusion criteria (topological degree)
Definition: solver_mv_monomial_tests.hpp:380
T M
Definition: Interval.hpp:52
#define assert(expr, msg)
Definition: shared_object.hpp:57