在同情中解决不平等问题

时间:2018-01-16 14:58:35

标签: python sympy

我想在同情中解决以下不平等

(10000 / x) - 1 < 0

所以我发出命令

solve_poly_inequality( Poly((10000 / x) - 1 ), '<')

结果我得到了

[Interval.open(-oo, 1/10000)]

然而,我的手动计算给出x&lt; 0或x> 10000

我错过了什么?由于-1,我不能将它表示为理性函数,因为-1。

提前致谢!

2 个答案:

答案 0 :(得分:6)

您正在使用低级别的解决程序。我建议使用更高级别的例程solvesolveset,例如

>>> solveset((10000 / x) - 1 < 0, x, S.Reals)
(−∞, 0) ∪ (10000, ∞)

您的尝试是正确但看起来不对的原因是您没有指定要使用的生成器,因此Poly使用1/x作为其变量(让我们称之为g)所以它解决了问题1000*g - 1 < 0 ...当g小于你发现的1/1000时,这是真的。

您可以通过编写

来查看此生成器标识
>>> Poly(1000/x - 1)
Poly(1000*1/x - 1, 1/x, domain='ZZ')

答案 1 :(得分:2)

10000/x-1不是x中的多项式,而是1/x中的多项式。相反,10000/x-1x中的rational function。虽然您可能会尝试放置Poly(1000*1/x - 1, x, domain='ZZ'),但会出现错误

PolynomialError: 1/x contains an element of the generators set

因为根据定义10000/x-1不能是x中的多项式。因此,你不能用这个做计算。

您也可以尝试跟踪或解决其他问题。

from sympy.solvers.inequalities import reduce_rational_inequalities
from sympy import Poly
from sympy.abc import x
reduce_rational_inequalities([[10000/x - 1 < 0]], x)
((-oo < x) & (x < 0)) | ((10000 < x) & (x < oo))