我想使用两个索引Array
和arr
来总结一个符号i
(称为j
)。对arr[i]
求和将得到一个整数,如下所示的In [4]
。但是,对arr[j]
求和不会得到数字(请参见下面的In [5]
)。为什么会这样?
In [1]: from sympy import *
In [2]: i, j = symbols("i j", integer=True)
In [3]: arr = Array([1, 2])
In [4]: summation(
...: arr[i],
...: (j, 0, i), (i, 0, len(arr)-1)
...: )
Out[4]: 5
In [5]: summation(
...: arr[j],
...: (j, 0, i), (i, 0, len(arr)-1)
...: )
Out[5]: Sum([1, 2][j], (j, 0, i), (i, 0, 1))
答案 0 :(得分:0)
SymPy将评估总和(如果有)
从左到右执行嵌套求和。在第一个版本中,
summation(arr[i], (j, 0, i))
属于项目2:由于求和不依赖于索引j
,因此总和的符号计算结果为(i + 1)*arr[i]
。然后外部和变成
summation((i + 1)*arr[i], (i, 0, len(arr)-1))
这属于项目1:求和和限制都是明确的。
但是在第二个版本中,
summation(arr[j], (j, 0, i))
既不适合1也不适合2。求和取决于j,我们没有任何公式(只是一些数字[1、2]),和的上限为象征性的SymPy与这样的金额无关,因此仍未完成。随后,由于未完成内部总和,因此外部总和没有去任何地方。
在第二种情况下,将外部和替换为Python sum会使内部的一个显式显示,因此可以对其求值。
>>> sum([summation(arr[j], (j, 0, i)) for i in range(len(arr))])
4
当然,这并没有真正使用SymPy的符号功能:内部总和也可以是Python的sum
。