不等式求解器

在一般情况下,应使用 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)