Sagemath:有没有一种简单的方法可以在C上分解多项式,并且根以根式而不是十进制形式出现?



在Mathematica中,如果我执行以下操作

Roots[x^3 - 2 == 0, x]

x=(-1)^(2/3) 2^(1/3) || x=(-2)^(1/3) || x = 2^(1/3)

我想在Sagemath

中做类似的事情
sage: F1.<x> = PolynomialRing(CC)
sage: f=x^3 - 2
sage: f.roots()
[(1.25992104989487, 1),
(-0.629960524947437 - 1.09112363597172*I, 1),
(-0.629960524947437 + 1.09112363597172*I, 1)]

在sagemath中是否有一种方法可以将其视为自由基或^(1/n)或类似的东西?

您需要在复多项式环中进行此计算的原因是什么?我不是计算机代数方面的专家,我肯定我过于简化了,但我相信这是这种行为的根源;Sage将复数视为不精确字段,这意味着它将系数ab存储在a+b*I中作为(默认53位)浮点数而不是符号常量。基本上,您要求的是类型错误,在ComplexField(或ComplexDoubleField,或可能是任何不精确字段)上定义的任何对象都将以浮点数作为其系数。另一方面,符号环(默认情况下令牌x存在的地方)中的相应行为似乎正是您正在寻找的;更具体地说,计算var("t"); solve(t^3-2==0,t)返回[t == 1/2*I*sqrt(3)*2^(1/3) - 1/2*2^(1/3), t == -1/2*I*sqrt(3)*2^(1/3) - 1/2*2^(1/3), t == 2^(1/3)]

最新更新