我在多项式上使用roots
,我需要将根与0进行比较。当我使用根时代码断开invalid comparison method
。我已查看cmath库但没有{ {1}}方法
real(myvariable)
答案 0 :(得分:1)
通常,re(z)
是你如何在SymPy中获取复数的真实部分。但这里还有其他问题。
roots
返回一个字典,其中值编码多重性。你的代码忽略了多重性,只需添加1.更好地使用这些值,或者使用multiple=True
的{{1}}标志,这使得它返回一个列表,重复多个根。roots
只会返回激进派中可表达的根。对于度数最多为4的多项式,这些都是它们,但是对于更高的度数,您可能会遗漏部分或全部根。 roots
函数适用于这些情况:它将根的索引作为第二个参数。因此,我举两个例子。首先,使用带有rootof
标志的roots
,因此它返回一个列表而不是一个字典:
multiple
可以将这些值与0进行比较。
其次,更高次多项式:我们不再期望根在自由基中。
z = symbols('z')
p = Poly([3, 4, 5, 2], z)
rts = roots(p, multiple=True)
print([re(val) for val in rts])
输出:
z = symbols('z')
p = Poly([3, 4, 5, 2, 7, 5, 9], z)
for k in range(degree(p)):
print(re(rootof(p, k).n()))
这是有道理的,因为具有实系数的多项式的复根有共轭对。