Sympy版本1.1.1:'solve()'包含'summation()'。

6

如何解决包含求和表达式的方程,例如:类似于以下内容。

Simple Equation

我会考虑使用以下代码片段来解决这个方程:

from sympy import *

i, N, x = symbols("n, N, x")
y       = Function("y")
eq      = summation(x + y(i), (i, 0, N)) 

print solve(eq, [x])

然而,虽然这个方程很简单,solve()没有产生结果。预期的解决方案是:

enter image description here


1
我编辑了问题并添加了期望的结果。 - Frank-Rene Schäfer
1
很棒的最小示例!五年过去了,SymPy仍然无法解决它。 - nimcap
1个回答

3

我相信简单的答案是,对于当前系统来说进行所需的替换过于复杂。

话虽如此,在这里可能存在求和扩展的问题。

我成功地通过将expand输出中的Sum更改为summation来获得正确的答案,请参见下面的控制台会话。

我认为最后一个可行的原因是,summation(x,(i,0,N))计算为x*(N + 1)summation函数的影响),而由扩展返回的Sum(x,(i,0,N))仍然是一个简单的Sum对象,在solve函数内部扩展后没有对其进行替换。

>>> from sympy import *
>>>
>>> i, N, x, y = symbols("i, N, x, y")
>>> eq         = summation(x + y(i), (i, 0, N))
>>>
>>> expand(eq)
Sum(x, (i, 0, N)) + Sum(y(i), (i, 0, N))
>>>
>>> solve(summation(x, (i, 0, N)) + summation(y(i), (i, 0, N)), x)
[Sum(-y(i), (i, 0, N))/(N + 1)]

顺便说一下,该解决方案是按N+1划分的,因为求和包含0和N(因此,0到N总共有N+1个数字)。

1
我认为你说得很对。在当前的开发状态下,solve()函数似乎没有执行expand()步骤。当然,你关于N+1也是正确的。 - Frank-Rene Schäfer
@Frank-ReneSchäfer 我添加了最后一段,The reason which...。我认为这就是原因,如果是这样的话,那么这可能是一个意外的错误。 - Uriel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接