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
)转换为(近似等于)有理数。
我正在使用 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
)转换为(近似等于)有理数。