sympy.count_roots: 使用实多项式时类型不匹配

sympy.count_roots: type mismatch when working with real polynomial

我正在使用 sympy 并尝试计算多项式的根数

from sympy.abc import x
from sympy import Poly
p = Poly(x**4+0.1,x)

此时,p 是定义域 'RR' 的多项式:Poly(1.0*x**4 + 0.1, x, domain='RR')

如果我尝试计算区间中的根数,我得到:

p.count_roots(0,2)
TypeError: unsupported operand type(s) for *=: 'RealElement' and 'PythonRational'

但是,如果我定义

q = Poly(x**3-1, x)
ans: Poly(x**3 - 1, x, domain='ZZ')

q.count_roots(0,2)
ans: 1

类似地,如果我要求 p 在整个域上的根数,那也有效

p.count_roots()
ans: 1

我应该怎么做才能为 count_roots 提供正确的类型?

如果可能,请在符号表达式中使用精确(而不是浮点数)数字(此原则适用于所有符号数学软件,不仅适用于 sympy)。

在这种情况下,p 定义中的常数项 0.1 可以替换为(精确)比率表示 1/10。 Sympy 使用 Rational 来描述数字的比率(因为输入 1/10 被 python 解释为浮点除法并自动转换为 0.1)。

以下代码有效。

from sympy.abc import x
from sympy import Poly, Rational
p = Poly( x**4 + Rational(1,10), x)
p.count_roots(0,2)

0

另请参阅 sympy.nsimplify 将任意浮点数(例如 12.21525)转换为(近似等于)有理数。