SymPy整数逻辑表达式化简失效,如何实现Eq(n,0)|(n≥1)到n≥0的转换?
解决SymPy中整数逻辑表达式的化简问题
我之前也碰到过类似的情况,SymPy的默认simplify()函数对整数域下的逻辑条件合并支持确实不够针对性,所以直接调用expr.simplify()没法得到你预期的n >= 0。不过有个专门的工具可以完美解决这个问题:
方法:使用reduce_inequalities()函数
这个函数会结合变量的假设(比如你定义的integer=True)来处理逻辑组合的不等式/等式,能正确合并你的表达式。
具体代码如下:
from sympy import Symbol, Eq, reduce_inequalities n = Symbol("n", integer=True) expr = Eq(n, 0) | (n >= 1) # 执行化简 simplified_expr = reduce_inequalities(expr, n) print(simplified_expr) # 输出: n >= 0
为什么默认simplify()不行?
SymPy的通用simplify()是一个多策略的化简器,但它没有优先处理整数变量的逻辑条件合并逻辑。而reduce_inequalities()是专门为处理不等式和逻辑组合设计的,会充分利用你给变量设置的整数假设,把n=0和n>=1这两个条件合并成更简洁的n>=0。
另外,你已经向上游提交反馈是个很棒的做法,SymPy社区一直在优化这类化简逻辑,后续版本说不定会让默认simplify()也能处理这类场景~
内容的提问来源于stack exchange,提问作者Albert
相关产品推荐
相关产品推荐

