Sympy求解有理不等式报错:仅允许单变量多项式问题咨询
解决SymPy中
solve_rational_inequalities处理分式有理不等式的报错问题 问题根源
你遇到的PolynomialError: only univariate polynomials are allowed错误,本质是因为SymPy的Poly类只能处理单变量多项式——也就是变量的指数都是非负整数的表达式,而10100.00/x这种形式是10100 * x^(-1),属于分式,不是多项式,直接用Poly包裹自然会报错。
solve_rational_inequalities的要求是每个约束项必须是((分子多项式Poly, 分母多项式Poly), 不等式符号)的格式,所以我们需要先把分式不等式整理成分子分母都是多项式的标准有理函数形式,再传入函数。
具体解决步骤
对于你的示例不等式组:
10100.00/x > 0
直接转化为有理函数形式:10100.00 / x > 0,对应分子是常数多项式10100.00,分母是一次多项式x。10100.00/x < 0.19
先移项通分:10100/x - 0.19 < 0 (10100 - 0.19x)/x < 0此时分子是一次多项式
-0.19x + 10100,分母是x,都是合法的多项式。
修正后的代码示例
from sympy import Poly, solve_rational_inequalities, symbols x = symbols('x') # 整理后的约束项 constraints = [ [ ((Poly(10100.00, x), Poly(x, x)), '>'), # 对应10100/x > 0 ((Poly(-0.19*x + 10100.00, x), Poly(x, x)), '<') # 对应(10100 - 0.19x)/x < 0 ] ] # 求解 result = solve_rational_inequalities(constraints) print(result)
运行这段代码就能得到正确的解集,不会再抛出多项式错误。
额外注意事项
- 对于所有分式形式的有理函数,都要先通过移项、通分转化为
P(x)/Q(x) 符号 0的形式,确保P(x)和Q(x)都是仅含非负整数次幂的单变量多项式。 - 当你的有理函数是多项式(比如f(x)=x)时,分母就是常数多项式
Poly(1, x),这也是为什么之前的示例能正常运行。
内容的提问来源于stack exchange,提问作者olidem
相关产品推荐
相关产品推荐

