Description
It would be nice to have a function which converts algebraic numbers to symbolic expressions using radicals, at least for those cases where this is possible (i.e. the cases where the minimal polynomial of the algebraic number has a degree less than 5). For the quadratic case, I have a code snippet to illustrate what I'm asking for:
def AA2SR(x):
x = AA(x)
p = x.minpoly()
if p.degree() < 2:
return SR(QQ(x))
if p.degree() > 2:
raise TypeError("Cannot handle degrees > 2")
c, b, a = p.coeffs()
y = (-b+sqrt(b*b-4*a*c))/(2*a)
if x == AA(y):
return y
y = (-b-sqrt(b*b-4*a*c))/(2*a)
assert x == AA(y)
return y
def QQbar2SR(x):
x = QQbar(x)
return AA2SR(x.real()) + I*AA2SR(x.imag())
These functions could then be applied to vectors or matrices over algebraic real or complex numbers in order to obtain an exact description of the relevant values using radicals.
This request is a spin-off from my question on Ask Sage.
Follow-up tickets: #17516, #17517
Depends on #17495
Depends on #16964
Component: number fields
Author: Martin von Gagern, Jeroen Demeyer
Branch/Commit: 4626286
Reviewer: Marc Mezzarobba, Jeroen Demeyer, Vincent Delecroix
Issue created by migration from https://trac.sagemath.org/ticket/14239