On Tuesday, March 24, 2015 at 2:44:03 AM UTC+2, Luv Agarwal wrote
> I have updated my proposal > <https://github.com/sympy/sympy/wiki/GSoC-2015-Application-Luv-Agarwal:-Cylindrical-Algebraic-Decomposition> > . > Please have a look especially at the Timeline part. Is there anything that > I should add or remove?. > > Thanks > Luv Agarwal > Thank you, Luv. I feel there is something I should add about root isolation. It may also affect the timetable. Implementing log() for algebraic numbers should not be difficult. One can pass to numerical values. They are approximate, of course, but then log itself is only used for an estimate. The comparisons of algebraic numbers are harder to implement. As noted before, the methods presented in AlgebraicField cannot be used because they do not conform to the standard order of real numbers. Instead, one could proceed as follows. If a and b are algebraic numbers, the inequality a > b is equivalent to a - b > 0. So it is enough to find the sign of a - b. In other words, to find a field K of algebraic numbers containing a and b , and to implement K.sign(x). An algebraic number field K = Q(theta) is generated by a single algebraic number theta , called the primitive element of the field. If the degree of the minimal polynomial of theta is n , each element of K has a unique representation as a polynomial a = p(theta) with rational coefficients and of degree < n. To compute the sign of a , one looks for an interval (u, v) containing theta and such that the polynomial p(t) has no roots in the interval. Then the sign of a is the sign of p(t) at any t in the interval. One can start with an interval isolating the root theta of the minimal polynomial and then refine it until it contains no roots of p. Such an interval exists if p != 0 , since then also p(theta) != 0. One can do the refinement by simply bisecting the interval, or else following the method of dup_isolate_real_roots_sqf based on representing the root by a continued fraction. The classical method of determining the number of roots in an interval is by means of Sturm's theorem. The method used in dup_isolate_real_roots_sqf is simpler in principle. It is based on using a Moebius mapping to transform the interval to the positive real axis. If the coefficients of the transformed polynomial have the same sign (as reported by dup_sign_variations), it has no positive roots. (This is special case of Descartes' rule of signs which is trivial to verify.) Then the original polynomial has no roots in the refined isolating interval. An extra bonus is that the coefficients of the Moebius mapping are readily obtained from the convergents of the continued fractions. In summary: Implementation of inequalities in algebraic number fields is a substantial task. You may want to reconsider your timeline on that part. Best wishes, Kalevi -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/3bd8afe9-f2b9-49cf-a2a2-9381e6f0eb35%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
