|
21 | 21 |
|
22 | 22 | sage: x = polygen(ZZ)
|
23 | 23 | sage: (x^5 - x - 1).roots(ring=CIF)
|
24 |
| - [(1.167303978261419?, 1), (-0.764884433600585? - 0.352471546031727?*I, 1), (-0.764884433600585? + 0.352471546031727?*I, 1), (0.181232444469876? - 1.083954101317711?*I, 1), (0.181232444469876? + 1.083954101317711?*I, 1)] |
| 24 | + [(1.167303978261419?, 1), |
| 25 | + (-0.764884433600585? - 0.352471546031727?*I, 1), |
| 26 | + (-0.764884433600585? + 0.352471546031727?*I, 1), |
| 27 | + (0.181232444469876? - 1.083954101317711?*I, 1), |
| 28 | + (0.181232444469876? + 1.083954101317711?*I, 1)] |
25 | 29 | """
|
26 | 30 |
|
27 | 31 | #*****************************************************************************
|
@@ -61,9 +65,13 @@ def interval_roots(p, rts, prec):
|
61 | 65 | sage: rts = [CC.zeta(3)^i for i in range(0, 3)]
|
62 | 66 | sage: from sage.rings.polynomial.complex_roots import interval_roots
|
63 | 67 | sage: interval_roots(p, rts, 53)
|
64 |
| - [1, -0.500000000000000? + 0.866025403784439?*I, -0.500000000000000? - 0.866025403784439?*I] |
| 68 | + [1, -0.500000000000000? + 0.866025403784439?*I, |
| 69 | + -0.500000000000000? - 0.866025403784439?*I] |
65 | 70 | sage: interval_roots(p, rts, 200)
|
66 |
| - [1, -0.500000000000000000000000000000000000000000000000000000000000? + 0.866025403784438646763723170752936183471402626905190314027904?*I, -0.500000000000000000000000000000000000000000000000000000000000? - 0.866025403784438646763723170752936183471402626905190314027904?*I] |
| 71 | + [1, -0.500000000000000000000000000000000000000000000000000000000000? |
| 72 | + + 0.866025403784438646763723170752936183471402626905190314027904?*I, |
| 73 | + -0.500000000000000000000000000000000000000000000000000000000000? |
| 74 | + - 0.866025403784438646763723170752936183471402626905190314027904?*I] |
67 | 75 | """
|
68 | 76 |
|
69 | 77 | CIF = ComplexIntervalField(prec)
|
@@ -172,15 +180,19 @@ def complex_roots(p, skip_squarefree=False, retval='interval', min_prec=0):
|
172 | 180 | sage: from sage.rings.polynomial.complex_roots import complex_roots
|
173 | 181 | sage: x = polygen(ZZ)
|
174 | 182 | sage: complex_roots(x^5 - x - 1)
|
175 |
| - [(1.167303978261419?, 1), (-0.764884433600585? - 0.352471546031727?*I, 1), (-0.764884433600585? + 0.352471546031727?*I, 1), (0.181232444469876? - 1.083954101317711?*I, 1), (0.181232444469876? + 1.083954101317711?*I, 1)] |
176 |
| - sage: v=complex_roots(x^2 + 27*x + 181) |
| 183 | + [(1.167303978261419?, 1), |
| 184 | + (-0.764884433600585? - 0.352471546031727?*I, 1), |
| 185 | + (-0.764884433600585? + 0.352471546031727?*I, 1), |
| 186 | + (0.181232444469876? - 1.083954101317711?*I, 1), |
| 187 | + (0.181232444469876? + 1.083954101317711?*I, 1)] |
| 188 | + sage: v = complex_roots(x^2 + 27*x + 181) |
177 | 189 |
|
178 | 190 | Unfortunately due to numerical noise there can be a small imaginary part to each
|
179 | 191 | root depending on CPU, compiler, etc, and that affects the printing order. So we
|
180 | 192 | verify the real part of each root and check that the imaginary part is small in
|
181 | 193 | both cases::
|
182 | 194 |
|
183 |
| - sage: v # random |
| 195 | + sage: v # random |
184 | 196 | [(-14.61803398874990?..., 1), (-12.3819660112501...? + 0.?e-27*I, 1)]
|
185 | 197 | sage: sorted((v[0][0].real(),v[1][0].real()))
|
186 | 198 | [-14.61803398874989?, -12.3819660112501...?]
|
@@ -227,11 +239,16 @@ def complex_roots(p, skip_squarefree=False, retval='interval', min_prec=0):
|
227 | 239 | ....: if tiny(x.imag()): return x.real()
|
228 | 240 | ....: if tiny(x.real()): return CIF(0, x.imag())
|
229 | 241 | sage: rts = complex_roots(p); type(rts[0][0]), sorted(map(smash, rts))
|
230 |
| - (<class 'sage.rings.complex_interval.ComplexIntervalFieldElement'>, [-1.618033988749895?, -0.618033988749895?*I, 1.618033988749895?*I, 0.618033988749895?]) |
| 242 | + (<class 'sage.rings.complex_interval.ComplexIntervalFieldElement'>, |
| 243 | + [-1.618033988749895?, -0.618033988749895?*I, |
| 244 | + 1.618033988749895?*I, 0.618033988749895?]) |
231 | 245 | sage: rts = complex_roots(p, retval='algebraic'); type(rts[0][0]), sorted(map(smash, rts))
|
232 |
| - (<class 'sage.rings.qqbar.AlgebraicNumber'>, [-1.618033988749895?, -0.618033988749895?*I, 1.618033988749895?*I, 0.618033988749895?]) |
| 246 | + (<class 'sage.rings.qqbar.AlgebraicNumber'>, |
| 247 | + [-1.618033988749895?, -0.618033988749895?*I, |
| 248 | + 1.618033988749895?*I, 0.618033988749895?]) |
233 | 249 | sage: rts = complex_roots(p, retval='algebraic_real'); type(rts[0][0]), rts
|
234 |
| - (<class 'sage.rings.qqbar.AlgebraicReal'>, [(-1.618033988749895?, 1), (0.618033988749895?, 1)]) |
| 250 | + (<class 'sage.rings.qqbar.AlgebraicReal'>, |
| 251 | + [(-1.618033988749895?, 1), (0.618033988749895?, 1)]) |
235 | 252 |
|
236 | 253 | TESTS:
|
237 | 254 |
|
|
0 commit comments