如何用SymPy.simplify消除正奇数表达式中的math.floor?
SymPy无法化简正奇数的floor表达式问题
我正在用SymPy化简含正奇数变量的表达式,但SymPy无法展开floor函数,导致化简卡壳。具体来说,x是正奇数(实际场景约束更严格,但SymPy仅支持设定奇数和正数,这已足够),按数学逻辑x // 2恒等于(x - 1) / 2,但SymPy无法完成这个等价替换。
示例代码:
from sympy import Symbol, simplify x = Symbol('x', odd=True, positive=True) expr = x // 2 - (x - 1) / 2 print(simplify(expr))
代码输出-x/2 + floor(x/2) + 1/2,而预期输出应为0。
已尝试的方法
- 化简
(x - 1) // 2 - (x - 1) / 2,结果为0,无问题。 - 将整个表达式乘以2:
2 * (x // 2 - (x - 1) / 2),得到-x + 2*floor(x/2) + 1,仍无法化简为0。 - 自定义
measure为FLOOR操作增加权重,无效。 - 使用
sympy.core.evaluate(False)上下文创建表达式,无效。 - 调整
ratio、rational等参数,尝试expand、factor、collect等函数,均无效果。
补充:其他工具可以完成这个化简,但SymPy不行。
我检查了变量假设,发现(x - 1) / 2.is_integer返回None(即SymPy无法识别这个表达式是整数)。现在没思路了,甚至在找SymPy的替代工具,求解决思路?
内容的提问来源于stack exchange,提问作者Scott Chang
相关产品推荐
相关产品推荐

