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
相关产品推荐
相关产品推荐

