使用SymPy求解含绝对值双向不等式的结果异常问题排查
关于SymPy求解绝对值双向不等式结果的解读问题
问题背景
求解双向绝对值不等式 $3 \leq |6 - x| \leq 5$,手动计算及Mathematica的正确解集为 $1 \leq x \leq 3$ 或 $9 \leq x \leq 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输出中的符号含义:
∧代表逻辑与(对应Python的and)∨代表逻辑或(对应Python的or)
按逻辑优先级拆解表达式:(1 ≤ x ≤ 11) ∧ (x ≤ 3 ∨ x ≥ 9)
等价于两组条件的组合:
(1 ≤ x ≤ 11) 且 (x ≤ 3)→ 推导得 $1 ≤ x ≤ 3$(1 ≤ x ≤ 11) 且 (x ≥ 9)→ 推导得 $9 ≤ x ≤ 11$
这两组结果的并集就是正确解集,和手动计算、Mathematica的结果完全一致。
用户误读的原因是将∧(与)错误理解为∨(或),导致对表达式的逻辑关系判断偏差。
更直观的输出方式
如果觉得逻辑表达式不够直观,可以将结果转换为集合形式:
from sympy import * x = symbols('x', real=True) res = reduce_inequalities([3 <= abs(6 - x), abs(6 - x) <= 5], x) print(res.as_set())
运行后会得到 Interval(1, 3) ∪ Interval(9, 11),直接呈现两个区间的并集,更易理解。
内容的提问来源于stack exchange,提问作者Michael Stern
相关产品推荐
相关产品推荐

