使用sympy求解具有绝对值的两侧不等式

问题描述 投票:0回答:1

相对简单的数学问题,找到

3 <= Abs[6 - x] <= 5
的范围。用手解决并不难,Mathematica 解决了这个问题,答案是
1 <= x <= 3 || 9 <= x <= 11

我能用 sympy 得到的最接近的是

from sympy import *
x = symbols('x', real=True)
reduce_inequalities([3 <= abs(6 - x), abs(6 - x) <= 5], x)

这会导致

1≤𝑥∧𝑥≤11∧(9≤𝑥∨𝑥≤3)

如果我没理解错的话,这是 sympy 的说法

1 <= x || x< 11 || (9 <= x || x <= 3)

这既奇怪又错误。我在这里缺少什么?

sympy inequality absolute-value
1个回答
0
投票

这是 SymPy 的输出:

In [1]: from sympy import *
   ...: x = symbols('x', real=True)
   ...: reduce_inequalities([3 <= abs(6 - x), abs(6 - x) <= 5], x)
Out[1]: 1 ≤ x ∧ x ≤ 11 ∧ (9 ≤ x ∨ x ≤ 3)

这意味着

1 <= x <= 11
AND (
x >= 9
OR
x <= 3
)。

这在逻辑上等同于您引用的 Mathematica 输出,尽管可能表达得不那么清楚。您可以使用以下命令将输出操作为相同的形式:

In [2]: r = reduce_inequalities([3 <= abs(6 - x), abs(6 - x) <= 5], x)

In [3]: r.as_set()
Out[3]: [1, 3] ∪ [9, 11]

In [4]: r.as_set().as_relational(x)
Out[4]: (1 ≤ x ∧ x ≤ 3) ∨ (9 ≤ x ∧ x ≤ 11)
© www.soinside.com 2019 - 2024. All rights reserved.