Sympy 不执行嵌套求和

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

我正在尝试执行这样的简单嵌套求和

from sympy import *

# Define the symbols
S, T = symbols('S T', integer=True)
s, t, u = symbols('s t u', cls=Idx)
mu = symbols('mu')
a = IndexedBase('a')



S = 1
T = 1

# Define the summand
summand = a[t,u,s]*(-(s+2)*(s+3+2*t))

# Define the outer sum
outer_sum = Sum(Sum(Sum(summand, (u, -t, t)), (t, 0, T)), (s, 0, S))

# Evaluate the nested double sum
result = outer_sum.doit()

pprint(result)

结果只是象征性地写成这样:

1     1     t                                     
 ___   ___   ___                                    
 ╲     ╲     ╲                                      
  ╲     ╲     ╲                                     
  ╱     ╱     ╱    (-s - 2)⋅(s + 2⋅t + 3)⋅a[t, u, s]
 ╱     ╱     ╱                                      
 ‾‾‾   ‾‾‾   ‾‾‾                                    
s = 0 t = 0 u = -t         

但是,我希望有明确的形式 coeff1a[0,0,0] + coeff2a[1,0,0] + ... 如果我摆脱内部总和或将边界从 -t,t 更改为某些数字,它会起作用,但这不是我需要的。有什么方法可以在 sympy 中做到这一点吗?

sympy
1个回答
0
投票

我不知道为什么它不计算,但由于外部总和是有限的,有数字限制,你可以用Python的普通

sum
函数来完成:

In [29]: sum(Sum(summand, (u, -t, t)).subs({t:ti, s:si}).doit() for ti in [0,1] for si in [0,1])
Out[29]: -6⋅a[0, 0, 0] - 12⋅a[0, 0, 1] - 10⋅a[1, -1, 0] - 18⋅a[1, -1, 1] - 10⋅a[1, 0, 0] - 18⋅a[1, 0, 1] - 10⋅a[1, 1, 0] - 18⋅a[1, 1, 1]
© www.soinside.com 2019 - 2024. All rights reserved.