11 #ifndef realroot_solve_contfrac_hpp
12 #define realroot_solve_contfrac_hpp
73 # define TMPL template<class C, class R, class V>
74 # define SOLVER solver<C, ContFrac<R,V> >
88 typedef typename K::interval_rational
root_t;
92 static inline root_t
as_root(
const data& ID) {
return as<root_t>(ID);}
93 static inline bool is_empty(
const data& ID) {
return ID.
s==0;}
94 static inline bool is_good (
const data& ID) {
return ID.
s==1;}
95 static inline integer
lower_bound(
const Polynomial& p) {
return B::lower_bound(p);}
103 typedef typename K::interval_extended_rational
root_t;
107 static inline root_t
as_root(
const data& ID) {
return as<root_t>(ID);}
108 static inline bool is_empty(
const data& ID) {
return ID.
s==0;}
109 static inline bool is_good (
const data& ID) {
return ID.
s==1;}
110 static inline integer
lower_bound (
const Polynomial& p) {
return B::lower_bound(p);}
129 static inline root_t
as_root(
const data& ID) {
return as<root_t>(ID); }
131 static inline bool is_empty(
const data& ID) {
return ID.
s==0;}
152 static inline integer
lower_bound(
const Polynomial& p) {
return B::lower_bound(p);}
169 static inline root_t
as_root(
const data& ID) {
return as<root_t>(ID); }
171 static inline bool is_empty(
const data& ID) {
return ID.
s==0;}
192 static inline integer
lower_bound(
const Polynomial& p) {
return B::lower_bound(p);}
202 typedef typename K::integer
RT;
203 typedef typename K::rational
FT;
222 IntervalData ID(1, 0, 0, 1, f, 0);
226 for (
int i = 1; i <=
degree(f); i+=2) ID.
p[i] *= -1;
230 if ( K::is_empty(ID) ) {
return; }
231 if ( K::is_good(ID) ) {
243 template<
class output,
class data_type,
class poly>
static void
256 std::stack< IntervalData > S;
258 while ( !S.empty() ) {
260 IntervalData ID = S.top();
266 RT a = K::lower_bound(ID.
p);
280 if ( ID.
p[0] == RT(0))
289 if ( K::is_empty(ID) )
291 else if( K::is_good(ID) ) {
292 sol << K::as_root(ID);
302 if (I1.
p[0] == RT(0)) {
311 I2.
s = ID.
s - I1.
s - r;
316 if ( !K::is_empty(I2) && !K::is_good(I2) ) {
332 if ( K::is_good(I1) ) {
334 sol << K::as_root(I1);
335 }
else if ( !K::is_empty(I1) ) {
339 if ( K::is_good(I2) ) {
341 sol << K::as_root(I2);
342 }
else if ( !K::is_empty(I2) ) {
351 template <
class output,
class poly>
inline static void
357 for (idx = 0; idx <=
degree( f); ++idx) {
358 if ( f[idx] != 0 )
break;
362 if ( idx == 0 ) { p = f; }
364 p= poly(1,
degree(f) - idx);
365 for (
int j = idx; j <=
degree(f); j++)
375 if (idx != 0) isolating_intervals <<
root_t( 0, 0);
398 for (
unsigned i = 0 ; i < isolating_intervals.
size(); ++i)
399 {sol << isolating_intervals[i];}
403 template <
class output>
inline static void
404 solve(output& sol,
const polynomial_integer& f) {
408 template <
class output>
inline static void
409 solve(output& sol,
const polynomial_rational& f) {
414 template <
class output>
inline static void
415 solve(output& sol,
const polynomial_floating& f) {
419 for(
int i=0;i<
degree(f)+1;i++) {
420 p[i] = as<rational>(f[i]);
453 typedef typename Traits::K
K;
465 template <
class output >
inline static void
466 solve(output& sol,
const polynomial_integer& f) {
470 template <
class output >
inline
471 static void solve(output& sol,
const polynomial_rational& f) {
475 template <
class output >
inline static void
476 solve(output& sol,
const polynomial_floating& f) {
480 template <
class output >
inline static void
481 solve(output& sol,
const polynomial_integer& f,
int prec) {
482 base_t::set_precision(prec);
487 template <
class output>
inline static void
488 solve(output& sol,
const polynomial_integer& f,
489 const typename K::rational& u,
const typename K::rational& v) {
490 typedef typename K::integer integer;
498 base_t::solve_homography(sol,D,polynomial_integer());
501 template <
class output>
inline static void
502 solve(output& sol,
const polynomial_rational& f,
503 const typename K::rational& u,
const typename K::rational& v) {
504 solve(sol, univariate::numer<polynomial_integer>(f), u, v);
539 template <
class output,
class POL>
inline static void
546 template<
class POL,
class M>
547 typename solver<typename POL::Scalar, ContFrac<M> >::Solutions
558 template<
class POL,
class M,
class B>
559 typename solver<typename POL::Scalar, ContFrac<M> >::Solutions
574 #endif // _realroot_solve_contfrac_hpp_
static bool is_empty(const data &ID)
Definition: solver_uv_continued_fraction.hpp:108
K::rational rational
Definition: solver_uv_continued_fraction.hpp:205
static bool is_empty(const data &ID)
Definition: solver_uv_continued_fraction.hpp:131
static bool is_good(const data &ID)
Definition: solver_uv_continued_fraction.hpp:94
K::root_t root_t
Definition: solver_uv_continued_fraction.hpp:207
K::interval_rational interval_rational
Definition: solver_uv_continued_fraction.hpp:119
static void solve(output &sol, const POL &f)
Definition: solver_uv_continued_fraction.hpp:540
Cauchy bound.
Definition: univariate_bounds.hpp:163
texp::rationalof< C >::T to_FT(const C &a, const C &b)
Definition: contfrac_intervaldata.hpp:93
void div_x(POL &p, int k)
Definition: contfrac_intervaldata.hpp:8
Sequence of terms with reference counter.
Definition: Seq.hpp:28
static unsigned get_precision()
Definition: solver_uv_continued_fraction.hpp:127
const C & b
Definition: Interval_glue.hpp:25
K::rational FT
Definition: solver_uv_continued_fraction.hpp:203
static void set_precision(int prec)
Definition: solver_uv_continued_fraction.hpp:213
Definition: univariate_bounds.hpp:409
dynamic_exp< E >::degree_t degree(const dynamic_exp< E > &t)
Definition: dynamicexp.hpp:191
structure defining a the empty list
Definition: texp_bool.hpp:11
Traits::interval_t interval_t
Definition: solver_uv_continued_fraction.hpp:536
is_extended< C >::T Extended
Definition: solver_uv_continued_fraction.hpp:451
void shift(IntervalData< RT, Poly > &ID, const RT &a)
Definition: contfrac_intervaldata.hpp:257
static void solve_homography(output &sol, const data_type &ID, const poly &)
Definition: solver_uv_continued_fraction.hpp:244
static Solutions solve(const POL &p)
Definition: solver.hpp:75
K::interval_extended_rational root_t
Definition: solver_uv_continued_fraction.hpp:103
Definition: solver_uv_continued_fraction.hpp:81
Definition: solver_uv_continued_fraction.hpp:78
IntervalData< integer, Polynomial > data
Definition: solver_uv_continued_fraction.hpp:90
MP swap(const MP &P, int var_i, int var_j)
Definition: sparse_monomials.hpp:988
void scale(IntervalData< RT, Poly > &ID, const RT &a)
Definition: contfrac_intervaldata.hpp:221
base_t::polynomial_floating polynomial_floating
Definition: solver_uv_continued_fraction.hpp:459
static void solve(output &sol, const polynomial_integer &f, int prec)
Definition: solver_uv_continued_fraction.hpp:481
FT bound_root(const POLY &p, const Cauchy< FT > &m)
Definition: univariate_bounds.hpp:325
polynomial< rational, with< MonomialTensor > > polynomial_rational
Definition: solver_uv_continued_fraction.hpp:209
K::interval_rational interval_t
Definition: solver_uv_continued_fraction.hpp:519
Seq< interval_t > Solutions
Definition: solver_uv_continued_fraction.hpp:456
static bool is_good(const data &ID)
Definition: solver_uv_continued_fraction.hpp:172
static void set_precision(unsigned n)
Definition: solver_uv_continued_fraction.hpp:126
RT a
Definition: contfrac_intervaldata.hpp:22
interval_rational root_t
Definition: solver_uv_continued_fraction.hpp:121
Traits::K K
Definition: solver_uv_continued_fraction.hpp:453
base_t::polynomial_rational polynomial_rational
Definition: solver_uv_continued_fraction.hpp:458
static root_t as_root(const data &ID)
Definition: solver_uv_continued_fraction.hpp:169
void reverse(Poly &R, const Poly &P)
Definition: contfrac_intervaldata.hpp:139
static void solve_positive(Seq< root_t > &sol, const poly &f, bool posneg)
Definition: solver_uv_continued_fraction.hpp:217
TMPL int N(const MONOMIAL &v)
Definition: monomial_glue.hpp:60
IntervalData< integer, Polynomial > data
Definition: solver_uv_continued_fraction.hpp:163
K::integer integer
Definition: solver_uv_continued_fraction.hpp:85
Seq< root_t > sol_t
Definition: solver_uv_continued_fraction.hpp:162
Seq< typename ContFrac< NT, LB >::root_t > solve(const typename ContFrac< NT >::Poly &f, ContFrac< NT, LB >)
Definition: contfrac.hpp:164
base_t::Polynomial polynomial_integer
Definition: solver_uv_continued_fraction.hpp:457
static unsigned prec
Definition: solver_uv_continued_fraction.hpp:125
static unsigned get_precision()
Definition: solver_uv_continued_fraction.hpp:167
static void set_precision(unsigned n)
Definition: solver_uv_continued_fraction.hpp:166
RT b
Definition: contfrac_intervaldata.hpp:22
IntervalData< integer, Polynomial > data
Definition: solver_uv_continued_fraction.hpp:105
K::Polynomial polynomial_integer
Definition: solver_uv_continued_fraction.hpp:208
static void solve(output &sol, const polynomial_rational &f)
Definition: solver_uv_continued_fraction.hpp:409
Traits::base_t base_t
Definition: solver_uv_continued_fraction.hpp:535
RT c
Definition: contfrac_intervaldata.hpp:22
continued_fraction_subdivision< continued_fraction_isolate< K, AkritasBound< typename K::integer >, false_t > > base_t
Definition: solver_uv_continued_fraction.hpp:518
K::interval_rational interval_t
Definition: solver_uv_continued_fraction.hpp:437
K::extended_rational rational
Definition: solver_uv_continued_fraction.hpp:158
static void solve(output &sol, const polynomial_floating &f)
Definition: solver_uv_continued_fraction.hpp:476
static unsigned prec
Definition: solver_uv_continued_fraction.hpp:165
Definition: contfrac_intervaldata.hpp:17
K::interval_extended_rational interval_t
Definition: solver_uv_continued_fraction.hpp:528
K::interval_extended_rational interval_rational
Definition: solver_uv_continued_fraction.hpp:159
unsigned long s
Definition: contfrac_intervaldata.hpp:24
polynomial< floating, with< MonomialTensor > > polynomial_floating
Definition: solver_uv_continued_fraction.hpp:210
interval_rational root_t
Definition: solver_uv_continued_fraction.hpp:161
static integer lower_bound(const Polynomial &p)
Definition: solver_uv_continued_fraction.hpp:152
static void solve(output &sol, const polynomial_rational &f, const typename K::rational &u, const typename K::rational &v)
Definition: solver_uv_continued_fraction.hpp:502
polynomial< integer, with< MonomialTensor > > Polynomial
Definition: solver_uv_continued_fraction.hpp:102
Seq< interval_t > Solutions
Definition: solver_uv_continued_fraction.hpp:537
polynomial< COEFF, with< MonomialTensor > > Polynomial
Definition: solver_mv_cf.cpp:23
static void set_precision(unsigned p)
Definition: solver_uv_continued_fraction.hpp:461
Definition: solver.hpp:95
size_type size() const
Definition: Seq.hpp:166
K::integer integer
Definition: solver_uv_continued_fraction.hpp:117
Seq< root_t > sol_t
Definition: solver_uv_continued_fraction.hpp:104
texp::kernelof< C >::T K
Definition: solver_uv_continued_fraction.hpp:515
structure defining a positive answer
Definition: texp_bool.hpp:7
Definition: solver_uv_continued_fraction.hpp:201
IntervalData< integer, Polynomial > data
Definition: solver_uv_continued_fraction.hpp:123
K::rational rational
Definition: solver_uv_continued_fraction.hpp:118
Seq< root_t > sol_t
Definition: solver_uv_continued_fraction.hpp:122
static root_t as_root(const data &ID)
Definition: solver_uv_continued_fraction.hpp:129
ZZ numerator(const QQ &a)
Definition: GMPXX.hpp:95
K::floating floating
Definition: solver_uv_continued_fraction.hpp:206
texp::kernelof< C >::T K
Definition: solver_uv_continued_fraction.hpp:442
texp::kernelof< C >::T K
Definition: solver_uv_continued_fraction.hpp:524
K::interval_rational root_t
Definition: solver_uv_continued_fraction.hpp:88
RT d
Definition: contfrac_intervaldata.hpp:22
IntervalData< RT, Poly > as_interval_data(const RT &a, const RT &b, const RT &c, const RT &d, const Poly &f)
Definition: contfrac_intervaldata.hpp:43
Definition: solver_uv_continued_fraction.hpp:429
static bool is_empty(const data &ID)
Definition: solver_uv_continued_fraction.hpp:93
Definition: solver.hpp:68
K::integer RT
Definition: solver_uv_continued_fraction.hpp:202
void shift_by_1(Poly &R, const Poly &P)
Definition: contfrac_intervaldata.hpp:168
solver_approximate_traits< C, Extended > Traits
Definition: solver_uv_continued_fraction.hpp:452
solver_isolate_traits< C, Extended > Traits
Definition: solver_uv_continued_fraction.hpp:534
static void solve_polynomial(output &sol, const poly &f, int mult=1)
Definition: solver_uv_continued_fraction.hpp:352
Definition: polynomial.hpp:37
TMPL POL
Definition: polynomial_dual.hpp:74
static void solve(output &sol, const polynomial_integer &f)
Definition: solver_uv_continued_fraction.hpp:466
Seq< root_t > sol_t
Definition: solver_uv_continued_fraction.hpp:89
continued_fraction_subdivision< continued_fraction_isolate< K, AkritasBound< typename K::extended_integer >, true_t > > base_t
Definition: solver_uv_continued_fraction.hpp:527
K::extended_rational rational
Definition: solver_uv_continued_fraction.hpp:101
static bool is_good(const data &ID)
Definition: solver_uv_continued_fraction.hpp:109
Traits::interval_t interval_t
Definition: solver_uv_continued_fraction.hpp:455
static integer lower_bound(const Polynomial &p)
Definition: solver_uv_continued_fraction.hpp:192
ZZ denominator(const QQ &a)
Definition: GMPXX.hpp:96
#define Scalar
Definition: polynomial_operators.hpp:12
K::rational rational
Definition: solver_uv_continued_fraction.hpp:86
K::extended_integer integer
Definition: solver_uv_continued_fraction.hpp:100
polynomial< integer, with< MonomialTensor > > Polynomial
Definition: solver_uv_continued_fraction.hpp:160
static root_t as_root(const data &ID)
Definition: solver_uv_continued_fraction.hpp:107
Traits::base_t base_t
Definition: solver_uv_continued_fraction.hpp:454
K::extended_integer integer
Definition: solver_uv_continued_fraction.hpp:157
Definition: solver_uv_continued_fraction.hpp:113
solver< typename POL::Scalar, ContFrac< M > >::Solutions solve(const POL &p, const ContFrac< M > &slv, const B &b1, const B &b2)
Definition: solver_uv_continued_fraction.hpp:560
K::interval_extended_rational interval_t
Definition: solver_uv_continued_fraction.hpp:446
static integer lower_bound(const Polynomial &p)
Definition: solver_uv_continued_fraction.hpp:110
const C & c
Definition: Interval_glue.hpp:45
static bool is_good(const data &ID)
Definition: solver_uv_continued_fraction.hpp:132
Poly p
Definition: contfrac_intervaldata.hpp:23
double C
Definition: solver_mv_fatarcs.cpp:16
structure defining a negative answer
Definition: texp_bool.hpp:9
unsigned sign_variation(Iterator b, Iterator e)
Definition: sign_variation.hpp:27
static void solve(output &sol, const polynomial_integer &f, const typename K::rational &u, const typename K::rational &v)
Definition: solver_uv_continued_fraction.hpp:488
continued_fraction_subdivision< continued_fraction_approximate< K, AkritasBound< typename K::integer >, false_t > > base_t
Definition: solver_uv_continued_fraction.hpp:436
#define solver_default_precision
Definition: solver.hpp:59
is_extended< C >::T Extended
Definition: solver_uv_continued_fraction.hpp:533
static integer lower_bound(const Polynomial &p)
Definition: solver_uv_continued_fraction.hpp:95
Definition: solver.hpp:91
void reverse_shift_homography(IntervalData< RT, Poly > &I2, const IntervalData< RT, Poly > &ID)
Definition: contfrac_intervaldata.hpp:276
continued_fraction_subdivision< continued_fraction_approximate< K, AkritasBound< typename K::extended_integer >, true_t > > base_t
Definition: solver_uv_continued_fraction.hpp:445
Definition: solver_uv_continued_fraction.hpp:511
static void solve(output &sol, const polynomial_rational &f)
Definition: solver_uv_continued_fraction.hpp:471
polynomial< integer, with< MonomialTensor > > Polynomial
Definition: solver_uv_continued_fraction.hpp:87
K::integer integer
Definition: solver_uv_continued_fraction.hpp:204
RT_ RT
Definition: contfrac_intervaldata.hpp:19
static bool is_empty(const data &ID)
Definition: solver_uv_continued_fraction.hpp:171
K::data data
Definition: solver_uv_continued_fraction.hpp:211
texp::kernelof< C >::T K
Definition: solver_uv_continued_fraction.hpp:433
static void solve(output &sol, const polynomial_floating &f)
Definition: solver_uv_continued_fraction.hpp:415
static void solve(output &sol, const polynomial_integer &f)
Definition: solver_uv_continued_fraction.hpp:404
static root_t as_root(const data &ID)
Definition: solver_uv_continued_fraction.hpp:92
polynomial< integer, with< MonomialTensor > > Polynomial
Definition: solver_uv_continued_fraction.hpp:120