不等式求解器¶
在一般情况下,应使用 reduce_inequalities()
。其他函数是用于特殊专用操作的子类别,并将在需要时由 reduce_inequalities
内部调用。
备注
对于一个专注于解决不等式的新手指南,请参考 通过代数方法减少一个或一组单变量不等式。
备注
下面的一些例子使用了 poly()
,它只是将一个表达式转换为多项式;它不会改变表达式的数学意义。
- sympy.solvers.inequalities.solve_rational_inequalities(eqs)[源代码][源代码]¶
解决一个具有有理系数的有理不等式系统。
示例
>>> from sympy.abc import x >>> from sympy import solve_rational_inequalities, Poly
>>> solve_rational_inequalities([[ ... ((Poly(-x + 1), Poly(1, x)), '>='), ... ((Poly(-x + 1), Poly(1, x)), '<=')]]) {1}
>>> solve_rational_inequalities([[ ... ((Poly(x), Poly(1, x)), '!='), ... ((Poly(-x + 1), Poly(1, x)), '>=')]]) Union(Interval.open(-oo, 0), Interval.Lopen(0, 1))
- sympy.solvers.inequalities.solve_poly_inequality(poly, rel)[源代码][源代码]¶
解决一个具有有理系数的多项式不等式。
示例
>>> from sympy import solve_poly_inequality, Poly >>> from sympy.abc import x
>>> solve_poly_inequality(Poly(x, x, domain='ZZ'), '==') [{0}]
>>> solve_poly_inequality(Poly(x**2 - 1, x, domain='ZZ'), '!=') [Interval.open(-oo, -1), Interval.open(-1, 1), Interval.open(1, oo)]
>>> solve_poly_inequality(Poly(x**2 - 1, x, domain='ZZ'), '==') [{-1}, {1}]
- sympy.solvers.inequalities.solve_poly_inequalities(polys)[源代码][源代码]¶
解决具有有理系数的多项式不等式。
示例
>>> from sympy import Poly >>> from sympy.solvers.inequalities import solve_poly_inequalities >>> from sympy.abc import x >>> solve_poly_inequalities((( ... Poly(x**2 - 3), ">"), ( ... Poly(-x**2 + 1), ">"))) Union(Interval.open(-oo, -sqrt(3)), Interval.open(-1, 1), Interval.open(sqrt(3), oo))
- sympy.solvers.inequalities.reduce_rational_inequalities(
- exprs,
- gen,
- relational=True,
减少具有有理系数的有理不等式系统。
示例
>>> from sympy import Symbol >>> from sympy.solvers.inequalities import reduce_rational_inequalities
>>> x = Symbol('x', real=True)
>>> reduce_rational_inequalities([[x**2 <= 0]], x) Eq(x, 0)
>>> reduce_rational_inequalities([[x + 2 > 0]], x) -2 < x >>> reduce_rational_inequalities([[(x + 2, ">")]], x) -2 < x >>> reduce_rational_inequalities([[x + 2]], x) Eq(x, -2)
此函数查找非无限解集,因此如果未知符号被声明为扩展实数而非实数,则结果可能包括有限性条件:
>>> y = Symbol('y', extended_real=True) >>> reduce_rational_inequalities([[y + 2 > 0]], y) (-2 < y) & (y < oo)
- sympy.solvers.inequalities.reduce_abs_inequality(expr, rel, gen)[源代码][源代码]¶
减少带有嵌套绝对值的不等式。
示例
>>> from sympy import reduce_abs_inequality, Abs, Symbol >>> x = Symbol('x', real=True)
>>> reduce_abs_inequality(Abs(x - 5) - 3, '<', x) (2 < x) & (x < 8)
>>> reduce_abs_inequality(Abs(x + 2)*3 - 13, '<', x) (-19/3 < x) & (x < 7/3)
- sympy.solvers.inequalities.reduce_abs_inequalities(exprs, gen)[源代码][源代码]¶
减少带有嵌套绝对值的不等式系统。
示例
>>> from sympy import reduce_abs_inequalities, Abs, Symbol >>> x = Symbol('x', extended_real=True)
>>> reduce_abs_inequalities([(Abs(3*x - 5) - 7, '<'), ... (Abs(x + 25) - 13, '>')], x) (-2/3 < x) & (x < 4) & (((-oo < x) & (x < -38)) | ((-12 < x) & (x < oo)))
>>> reduce_abs_inequalities([(Abs(x - 4) + Abs(3*x - 5) - 7, '<')], x) (1/2 < x) & (x < 4)
- sympy.solvers.inequalities.reduce_inequalities(inequalities, symbols=[])[源代码][源代码]¶
简化一个具有有理系数的不等式系统。
示例
>>> from sympy.abc import x, y >>> from sympy import reduce_inequalities
>>> reduce_inequalities(0 <= x + 3, []) (-3 <= x) & (x < oo)
>>> reduce_inequalities(0 <= x + y*2 - 1, [x]) (x < oo) & (x >= 1 - 2*y)
- sympy.solvers.inequalities.solve_univariate_inequality(
- expr,
- gen,
- relational=True,
- domain=Reals,
- continuous=False,
解决一个实数域上的单变量不等式。
- 参数:
- 表达式关系型
目标不等式
- 生成符号
求解不等式的变量
- 关系型布尔
期望或不期望关系型输出
- 领域设置
方程求解的域
- continuous: bool
如果已知表达式在给定域上是连续的(因此不需要调用 continuous_domain()),则为真。
- Raises:
- NotImplementedError
由于
sympy.solvers.solveset.solvify()
的限制,不等式的解无法确定。
参见
sympy.solvers.solveset.solvify
solver 返回带有 solve 输出 API 的 solveset 解决方案
注释
目前,由于
sympy.solvers.solveset.solvify()
的限制,我们无法解决所有的不等式。此外,返回的三角不等式的解在其周期区间内受到限制。示例
>>> from sympy import solve_univariate_inequality, Symbol, sin, Interval, S >>> x = Symbol('x')
>>> solve_univariate_inequality(x**2 >= 4, x) ((2 <= x) & (x < oo)) | ((-oo < x) & (x <= -2))
>>> solve_univariate_inequality(x**2 >= 4, x, relational=False) Union(Interval(-oo, -2), Interval(2, oo))
>>> domain = Interval(0, S.Infinity) >>> solve_univariate_inequality(x**2 >= 4, x, False, domain) Interval(2, oo)
>>> solve_univariate_inequality(sin(x) > 0, x, relational=False) Interval.open(0, pi)