首页 > 解决方案 > 为什么 sympy 不能简化索引变量的这些 Sum 表达式

问题描述

我已经达到了 SymPy 的限制。在尝试一个小项目的过程中,我注意到 SymPy 无法简化以下表达式

n, N = symbols('n N', cls=Idx)
x = IndexedBase('x')
eq = Sum(x[n], (n, 0, N)) - Sum(x[n], (n, 0, N-1))
simplify(eq)

输出很简单

在此处输入图像描述

这应该可以“简化”为简单的 X N

我尝试用 Symbol(, integer=True) 替换其中之一和两者,n以及N添加假设“正”和“非零”的所有组合。我也尝试过让 X 成为一个函数

N = symbols('N', cls=Idx)
n = Symbol('n')
x = Function('x')

eq = Sum(x(n), (n, 0, N)) - Sum(x(n), (n, 0, N-1))
simplify(eq)

无论哪种方式 SymPy 都无法识别可能的简化

有什么办法可以让 SymPy 能够进行这种简化吗?我可以添加一个假设吗?还有其他功能可以简化吗?

更新:在 SymPy github 上打开了一个问题,要求实现此功能。任何新信息都将在此处更新。

标签: sympy

解决方案


正如 Oscar Benjamin 在评论中所指出的,这只是一个没有实施的案例。就目前而言,我还没有找到解决这个问题的任何好方法,所以如果其他人遇到同样的问题,我建议只是等待实现这个的更新,或者如果这是一个交易破坏者,试图找到另一个可以处理此用例的库。


推荐阅读