在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将复数视为不精确字段,这意味着它将系数a
和b
存储在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)]
。