13 #ifndef eli_mutil_poly_root_sturm_count_hpp
14 #define eli_mutil_poly_root_sturm_count_hpp
19 #include "eli/code_eli.hpp"
33 template<
typename data__>
51 sturm_fun[0].
divide(std::abs(sturm_fun[0].coefficient(sturm_fun[0].degree())));
52 sturm_fun[1].
divide(std::abs(sturm_fun[1].coefficient(sturm_fun[1].degree())));
55 if (sturm_fun[i-1].degree()>0)
57 data__ small_no, max_c(0);
63 if (std::abs(c(j))>max_c)
66 small_no=max_c*std::sqrt(std::numeric_limits<data__>::epsilon());
68 pjunk.divide(sturm_fun[i], sturm_fun[i-2], sturm_fun[i-1]);
70 if (std::abs(sturm_fun[i].coefficient(sturm_fun[i].degree()))>small_no)
71 sturm_fun[i].
divide(std::abs(sturm_fun[i].coefficient(sturm_fun[i].degree())));
81 template<
typename data__,
typename data2__>
84 std::vector<data__> eval(sturm_fun.size());
85 int count_min, count_max;
88 for (
size_t i=0; i<eval.size(); ++i)
89 eval[i]=sturm_fun[i].f(static_cast<data__>(xmin));
91 for (
size_t i=0; i<eval.size(); ++i)
92 eval[i]=sturm_fun[i].f(static_cast<data__>(xmax));
96 return count_min-count_max;
99 template<
typename data__,
typename data2__>
110 std::vector< polynomial<data__> > sturm_fun;
118 template<
typename data__>
138 template<
typename data__>
158 template<
typename data__>
170 template<
typename data__>
data__ max_radius(const polynomial< data__ > &f)
Definition: radius.hpp:31
void adjust_zero(const data_type &small)
Definition: polynomial.hpp:108
data_type fp(const data_type &t) const
Definition: polynomial.hpp:221
Definition: polynomial.hpp:31
Eigen::Matrix< data_type, Eigen::Dynamic, 1 > coefficient_type
Definition: polynomial.hpp:35
int sturm_count(const std::vector< polynomial< data__ > > &sturm_fun, const data2__ &xmin, const data2__ &xmax)
Definition: sturm_count.hpp:82
index_type degree() const
Definition: polynomial.hpp:72
void negative()
Definition: polynomial.hpp:481
void sturm_functions(std::vector< polynomial< data__ > > &sturm_fun, const polynomial< data__ > &f)
Definition: sturm_count.hpp:34
int sign_changes(const it__ itb, const it__ ite)
Definition: sign_changes.hpp:28
void get_coefficients(coefficient_type &aout) const
Definition: polynomial.hpp:86
void divide(polynomial< data_type > &prem, const polynomial< data_type > &p1, const polynomial< data_type > &p2)
Definition: polynomial.hpp:410
coefficient_type::Index index_type
Definition: polynomial.hpp:36
data__ data_type
Definition: polynomial.hpp:34