共根:使用实多项式时类型不匹配

2024-04-27 00:57:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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

我应该怎么做才能提供正确的类型来计算根?你知道吗


Tags: fromimportdomaincountrrabcsympy我会
1条回答
网友
1楼 · 发布于 2024-04-27 00:57:56

在可能的情况下,在符号表达式中使用精确(而不是浮点)数字(这一原则适用于所有符号数学软件,而不仅仅是sympy)。你知道吗

在这种情况下,p定义中的常数项0.1可以用(精确的)比率表示1/10代替。Sympy使用Rational来描述数字的比率(因为,python将输入1/10解释为浮点除法并自动转换为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)转换为(近似相等)有理数。你知道吗

相关问题 更多 >