Ask Your Question
1

Change Precision of complex_roots()

asked 2017-12-07 06:10:52 +0200

cshiring gravatar image

updated 2017-12-07 10:34:29 +0200

tmonteil gravatar image

I am trying to find the complex roots of the polynomial

poly = x^7 - 6*x^6 + 15*x^5 - 20*x^4 + 15*x^3 - 6*x^2 + x

But when I do poly.complex_roots(), the system gives:

 PariError: overflow in expo()

Apparently there are options for how much precision you want when computing roots -- one option is to use Pari, which is the high-precision option, and the other NumPy, which is the low-precision option. The default is set to use Pari, which apparently overloads when I try to compute the roots of this polynomial (and many others as well, this polynomial is just one example).

How do I change the complex_roots() function to get lower-precision roots?

edit retag flag offensive close merge delete

Comments

How did you define x ? By default, you will get:

sage: poly = x^7 - 6*x^6 + 15*x^5 - 20*x^4 + 15*x^3 - 6*x^2 + x
AttributeError: 'sage.symbolic.expression.Expression' object has no attribute 'complex_roots'
tmonteil gravatar imagetmonteil ( 2017-12-07 10:35:32 +0200 )edit

1 Answer

Sort by ยป oldest newest most voted
0

answered 2017-12-07 10:40:29 +0200

tmonteil gravatar image

updated 2017-12-07 11:09:48 +0200

OK, you hit a bug, thanks for reporting !

sage: R.<x> = QQ[]
sage: poly = x^7 - 6*x^6 + 15*x^5 - 20*x^4 + 15*x^3 - 6*x^2 + x
sage: poly.complex_roots()
PariError: overflow in expo()

See:

sage: poly.roots(ring=CDF)
[(0.0, 1),
 (0.9970597732189228 - 0.0016886658100989547*I, 1),
 (0.9970597732189228 + 0.0016886658100989547*I, 1),
 (0.9999846391506835 - 0.003403956023304669*I, 1),
 (0.9999846391506835 + 0.003403956023304669*I, 1),
 (1.0029555876303982 - 0.0017152722520868947*I, 1),
 (1.0029555876303982 + 0.0017152722520868947*I, 1)]
sage: poly.roots(ring=QQbar)
[(0, 1), (1, 6)]
sage: poly.roots(ring=ZZ)
[(0, 1), (1, 6)]

Those can be used as workarounds.

However:

sage: poly.roots(ring=CC)
PariError: overflow in expo()

sage: poly.roots(ring=RealField(123))
PariError: overflow in expo()

This seems to be en interface problem with cypari2, the bug is now tracked at trac ticket 24332

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2017-12-07 06:10:52 +0200

Seen: 411 times

Last updated: Dec 07 '17