使用 sympy 对一系列符号求和

问题描述 投票:0回答:0

考虑两个集合 i,j,它们都有 m 个元素。假设我们有一个描述项总和的表达式。每一项都可以描述为 i 和 j 的元素的乘积。现在,我想对 j 的每个元素求和,其中每个元素的范围为 [i1,i2,...,im].

在 python 和 sympy 的上下文中,这很困难,因为 sympy 的 Sum(symbol,start,stop) 描述求和变量,它假定整数步长。

为了证明我的意思,请考虑以下代码:

>>> from sympy import *
>>> i = symbols('i1,i2,i3,i4') # for the case m = 4
>>> j = symbols('j1,j2,j3,j4')

这里我使用排列来设置表达式:

>>> from itertools import permutations as perm
>>> c = list(perm(range(4),2))
>>> a,b = c[0]
>>> expr = i[a]*j[b]
>>> for a,b in c[1:]:
>>>     expr += i[a]*j[b]
>>> print(expr)
i1*j2 + i1*j3 + i1*j4 + i2*j1 + i2*j3 + i2*j4 + i3*j1 + i3*j2 + i3*j4 + i4*j1 + i4*j2 + i4*j3

现在,对范围为 j 的每个 i 使用 Sum。如果我能写出以下内容之一,那就太理想了:

>>> s = Sum(expr,(j,i))
>>> s = Sum(expr,(j1,i),(j2,i),...,(jm,i))

但这在 sympy 文档中并不规范。有没有其他方法可以用来解决这个问题?

python sympy symbolic-math
© www.soinside.com 2019 - 2024. All rights reserved.