approximate real numbers by algebraic numbers

Hi

suppose I have a real number x in decimal digits, how do I find an approximate polynomial f(x) \in ZZ[x] with x a root?

edit retag close merge delete

Sort by » oldest newest most voted

You can use the algebraic_dependency method for that. Given an integer n as parameter, it finds a polynomial of degree (at most) n with small coefficients that is almost on you floating-point number a.

Here is an example on how you can find a good polynomial: loop over degrees and see if there are some levels:

sage: a = 3.146264369941973
sage: for n in range(10):
....:     print a.algebraic_dependency(n)
1
5947484*x - 18712357
4113*x^2 - 17841*x + 15418
82*x^3 + 1380*x^2 - 6929*x + 5586
x^4 - 10*x^2 + 1
x^4 - 10*x^2 + 1
x^4 - 10*x^2 + 1
x^4 - 10*x^2 + 1
x^4 - 10*x^2 + 1
x^4 - 10*x^2 + 1

So, it seems that x^4 - 10*x^2 + 1 is a very good candidate.

more

There exists such software, and there is an open ticket for trying to add such capability (though it is much broader than just algebraic numbers, things like zeta function values usually are available as well). Such as RIES. But Sage does not currently have inverse symbolic calculation capability, as far as I know.

more