You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SymPy解不等式出错求助:(10000/x)-1<0结果不符

问题出在选错了求解函数!

你遇到的问题核心是用错了SymPy的工具函数:

  • solve_poly_inequality是专门用来处理多项式不等式的,而你要解的(10000/x) - 1 < 0是分式不等式,属于有理函数范畴,根本不是多项式(多项式要求所有变量的指数都是非负整数,这里x的指数是-1,不符合要求)。

为什么会得到错误结果?

当你把(10000/x)-1传入Poly时,SymPy无法将其正确解析为多项式——它可能强行把式子当成了-1 + 10000*x**(-1),但多项式不允许负指数,所以后续的求解逻辑完全偏离了你的需求,才会给出Interval.open(-oo, 1/10000)这种错误结果。

正确的解法有两种:

方法一:用通用的solve函数(最简便)

SymPy的solve是通用求解器,能自动识别分式不等式,直接传入式子即可:

from sympy import symbols, solve
x = symbols('x')
result = solve((10000/x) - 1 < 0, x)
print(result)

运行后会得到正确结果:(-oo, 0) U (10000, oo),也就是你手动计算的x < 0或x > 10000。

方法二:用专门的有理函数不等式求解器

如果你想针对性处理有理函数,可以用solve_rational_inequalities,先把不等式整理成(分子/分母) < 0的形式:

from sympy import symbols, Poly, solve_rational_inequalities
x = symbols('x')
# 把原式整理为 (10000 - x)/x < 0
result = solve_rational_inequalities([[((Poly(10000 - x), Poly(x)), '<')]])
print(result)

同样会得到正确的区间结果。

总结一下

  • 不同类型的不等式要匹配对应的SymPy求解函数,多项式用solve_poly_inequality,有理函数用solve_rational_inequalities,通用场景直接用solve更省心。
  • 不要强行把非多项式的式子塞进Poly里,这会导致解析错误,进而得到离谱的结果。

内容的提问来源于stack exchange,提问作者olidem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:16:26