1 | initial version |
I agree that there is some issue here, and it should somehow be translated into a bug report, though i am not sure of where is the error coming from. Anyway, thanks for reporting !
That said, if you want to work with polynomials, you whould work in a well defined polynomial ring, instead of a symbolic blob:
So first define the polynomial ring you want to work in:
sage: R.<x> = PolynomialRing(QQ)
This defines both the ring R
and the undetermined x
. Then you can define the polynomial P
, and look for its roots in the rational field QQ
(and check that no root is rational):
sage: P = x^10 - 10*x^8 + 35*x^6 + x^5 - 50*x^4 - 5*x^3 + 25*x^2 + 5*x - 1
sage: P.roots()
[]
Or in the field of algebraic numbers (to get all of them as algebraic numbers):
sage: P.roots(QQbar)
[(-1.984229402628956?, 1),
(-1.859552971776503?, 1),
(-1.274847979497380?, 1),
(-0.8515585831301453?, 1),
(-0.3747626291714493?, 1),
(0.1255810390586268?, 1),
(1.071653589957994?, 1),
(1.457937254842823?, 1),
(1.752613360087727?, 1),
(1.937166322257263?, 1)]
Or only real ones (as floating-point approximations):
sage: P.roots(RDF)
[(-1.984229402628939, 1),
(-1.85955297177652, 1),
(-1.274847979497381, 1),
(-0.8515585831301442, 1),
(-0.3747626291714496, 1),
(0.1255810390586268, 1),
(1.0716535899579935, 1),
(1.4579372548428182, 1),
(1.7526133600877463, 1),
(1.9371663222572437, 1)]
And you can check that all roots are actually real (w.r.t. complex):
sage: len(P.roots(QQbar)) == len(P.roots(RDF))
True
2 | No.2 Revision |
I agree that there is some issue here, and it should somehow be translated into a bug report, though i am not sure of where is the error coming from. Anyway, thanks for reporting !
That said, if you want to work with polynomials, you whould work in a well defined polynomial ring, instead of a symbolic blob:blob.
So first define the polynomial ring you want to work in:
sage: R.<x> = PolynomialRing(QQ)
This defines both the ring R
and the undetermined x
. Then you can define the polynomial P
, and look for its roots in the rational field QQ
(and check that no root is rational):
sage: P = x^10 - 10*x^8 + 35*x^6 + x^5 - 50*x^4 - 5*x^3 + 25*x^2 + 5*x - 1
sage: P.roots()
[]
Or in the field of algebraic numbers (to get all of them as algebraic numbers):
sage: P.roots(QQbar)
[(-1.984229402628956?, 1),
(-1.859552971776503?, 1),
(-1.274847979497380?, 1),
(-0.8515585831301453?, 1),
(-0.3747626291714493?, 1),
(0.1255810390586268?, 1),
(1.071653589957994?, 1),
(1.457937254842823?, 1),
(1.752613360087727?, 1),
(1.937166322257263?, 1)]
Or only You can see that all roots are simple (the second number 1
stands for the multiplicity). If you don't care about multiplicities, you can ge rid of them as follows:
sage: P.roots(QQbar, multiplicities=False)
[-1.984229402628956?,
-1.859552971776503?,
-1.274847979497380?,
-0.8515585831301453?,
-0.3747626291714493?,
0.1255810390586268?,
1.071653589957994?,
1.457937254842823?,
1.752613360087727?,
1.937166322257263?]
You can also ask for real ones (as roots as numerical floating-point approximations):approximations:
sage: P.roots(RDF)
[(-1.984229402628939, 1),
(-1.85955297177652, 1),
(-1.274847979497381, 1),
(-0.8515585831301442, 1),
(-0.3747626291714496, 1),
(0.1255810390586268, 1),
(1.0716535899579935, 1),
(1.4579372548428182, 1),
(1.7526133600877463, 1),
(1.9371663222572437, 1)]
And you can check that in this case all roots are actually real (w.r.t. complex):
sage: len(P.roots(QQbar)) == len(P.roots(RDF))
True