相对简单的数学问题,找到
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 的输出:
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)