4 #ifndef _realroot_SOLVE_MV_CONFRAC_H
5 #define _realroot_SOLVE_MV_CONFRAC_H
31 # define TMPL template<class POL>
32 # define TMPLF template<class FT, class POL>
33 # define SOLVER solver<C,MCFisolate >
35 # define BOX box_rep<POL>
42 # define DPOL polynomial<double,with<MonomialTensor> >
46 # define C_INCLUDE include1(b,J) // Miranda test. (degens?)
52 # define C_EXCLUDE exclude3(b) //Sign Inspection
68 typedef typename POL::scalar_t C;
69 typedef std::stack< BOX * > STACK;
87 unsigned c=0,cand=0, i, it=0,
subs=0, ver=0;
96 bx= sys.template volume <FT>();
99 boxes.push(
new BOX(sys) );
101 while ( !boxes.empty() )
110 while ( !out && red )
121 v+= b->template volume<FT>();
130 red= b->reduce_domain();
148 std::cout<<
"- Solution found:"<<std::endl;
162 std::cout<<
"MAX iters"<<
" ("<<
N_ITER<<
") "
163 <<
"reached!" << std::endl;
170 if ( b->template width<double>(i) > eps )
183 b->subdivide (i,boxes, b->middle(i) );
198 std::cout<<
"- EPS reached:"<<std::endl;
224 std::cout<<
"Iterations= "<< it <<std::endl;
225 std::cout<<
"Excluded = "<< c <<std::endl;
226 std::cout<<
"Verified = "<< ver <<std::endl;
227 std::cout<<
"Subdivs = "<<
subs <<std::endl;
229 std::cout<<
"Reduced volume= "<<
230 as<double>( 100*(bx-v)/bx )<<
"\%" <<std::endl;
231 std::cout<<
"#stack= "<< cand <<std::endl;
245 for (
unsigned i=0;i<S0.
size();++i)
248 for (
unsigned i=0;i<sys.nbpol();++i)
249 S0 <<
new POL( sys.system(i) );
257 for (
unsigned i=0; i<s.
size(); ++i)
272 for (
unsigned i=0;i<S0.
size();++i)
275 for (
unsigned i=0;i<sys->nbpol();++i)
276 S0 <<
new POL( sys->system(i) );
285 for (
unsigned i=0; i<s.
size(); ++i)
302 for (
unsigned i=0;i<S0.
size();++i)
305 for (
unsigned i=0;i<sys->nbpol();++i)
306 S0 <<
new POL( sys->system(i) );
329 for (
unsigned i=0;i<S0.
size();++i)
332 for (
unsigned i=0;i<sys->nbpol();++i)
333 S0 <<
new POL( sys->system(i) );
352 for (
unsigned i=0;i<s.
size(); ++i )
356 while ( b->template width<FT>(v) > eps )
361 d= b->template point<FT>(t);
366 l->shift_box( t[v] , v );
377 b->contract_box(t[i],v);
378 b->reverse_and_shift_box(v);
394 for (
unsigned j=0; j!=S0.
size(); ++j)
402 if (
abs(ev) > 1e-10 )
405 std::cout<<
"Root on split: "<< t <<std::endl;
429 template<
class FT,
class POL>
433 template<
class FT,
class POL>
442 template<
class FT,
class POL>
448 return slv.isolate(p, dom);
455 template<
class FT,
class POL>
456 Seq<std::vector<Interval<FT> > >
459 unsigned d(p[0].
nbvar() );
460 realroot::solver_mv_monomial<FT,POL> slv(1e-3);
461 return slv.isolate(p,d);
482 template<
class FT,
class POL>
494 template<
class FT,
class POL>
499 unsigned d( p[0].
nbvar() );
const C & b
Definition: Interval_glue.hpp:25
#define VERBOSE
Definition: solver_mv_monomial.hpp:40
#define BOX
Definition: solver_mv_monomial.hpp:35
static Solutions solve(const POL &p)
Definition: solver.hpp:75
#define DPOL
Definition: solver_mv_monomial.hpp:42
bool check_root(const Seq< double > t, const double eps)
Definition: solver_mv_monomial.hpp:390
MP subs(unsigned var, const X &val, const MP &P)
Definition: sparse_monomials.hpp:906
self_t & erase(size_type i)
Definition: Seq.hpp:112
Definition: solver_mv_monomial.hpp:419
C base_t
Definition: solver_mv_monomial.hpp:427
#define C_EXCLUDE
Definition: solver_mv_monomial.hpp:52
Definition: fatarcs.hpp:23
solver_mv_monomial(double e=1e-7)
Constructor.
Definition: solver_mv_monomial.hpp:78
#define ALLBOXES
Definition: solver_mv_monomial.hpp:39
Seq< typename ContFrac< NT, LB >::root_t > solve(const typename ContFrac< NT >::Poly &f, ContFrac< NT, LB >)
Definition: contfrac.hpp:164
TMPL DPOL * jacobian(Seq< POL * > &S0)
Definition: solver_mv_monomial_tests.hpp:49
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
Seq< BOX > solve_system(BOX &sys)
Solve routine.
Definition: solver_mv_monomial.hpp:85
#define C_INCLUDE
Definition: solver_mv_monomial.hpp:46
Definition: solver.hpp:68
void abs(Interval< C, r > &x, const Interval< C, r > &a)
Definition: Interval_fcts.hpp:185
TMPL POL
Definition: polynomial_dual.hpp:74
Seq< std::vector< Interval< FT > > > isolate(Seq< POL > &p, Seq< Interval< C > > &dom)
Definition: solver_mv_monomial.hpp:266
R & rep()
Definition: Seq.hpp:62
Generic class for intervals.
Definition: Interval.hpp:44
Seq< std::vector< FT > > approximate(Seq< POL > &p, unsigned &d)
Definition: solver_mv_monomial.hpp:295
const C & c
Definition: Interval_glue.hpp:45
C base_t
Definition: solver_mv_monomial.hpp:469
double C
Definition: solver_mv_fatarcs.cpp:16
#define TMPLF
Definition: solver_mv_monomial.hpp:32
#define N_ITER
Definition: solver_mv_monomial.hpp:36
TMPL int nbvar(const Polynomial &mp)
Definition: polynomial_fcts.hpp:43
void assign(A &a, const B &b)
Generic definition of the assignement function.
Definition: assign.hpp:97
Definition: solver_mv_monomial.hpp:66
Seq< std::vector< FT > > approximate(Seq< POL > &p, Seq< Interval< C > > &dom)
Definition: solver_mv_monomial.hpp:323
Definition: solver_mv_monomial.hpp:420
Seq< std::vector< Interval< FT > > > isolate(Seq< POL > &p, unsigned &d)
Definition: solver_mv_monomial.hpp:238
TMPL bool exclude2(BOX *b, DPOL *J)
Exclusion criteria (topological degree)
Definition: solver_mv_monomial_tests.hpp:380