使用替换将总和与因子重新排列为双和

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

我想重新整理一个复杂的表达式,简化的形式可以表示为:

i, j, N = symbols("i j N", integers=True, finite=True, nonnegative=True)
a, b, c, d, e = symbols("a b c d e", cls=IndexedBase)

expr = (Sum(a[i] * Sum(b[i] * d[j], (j, 1, N)) * c[i], (i, 1, N)) 
        + Sum(a[i] * Sum(b[i] * e[j], (j, 1, N)) * c[i], (i, 1, N)))
expr

original expression

理想情况下,我想转换为如下所示:

target expression

我以前没有使用过

replace
,但看起来它对于这种类型的操作可能很有用。不幸的是,我的尝试没有正确捕获虚拟变量:

ws1, ws2, ws3, wd1, wd2, wl1 = symbols("ws1 ws2 ws3 wd1 wd2 wl1", cls=Wild)

expr.replace(
    Sum(ws1 * Sum(ws3, (wd1, 1, wl1)), (wd2, 1, wl1)) * ws2,  
    Sum(ws1 * ws2 * ws3, (wd1, 1, wl1), (wd2, 1, wl1))
)

output from replace attempt

想知道是否有人可以提供任何建议?

replace sum sympy
1个回答
0
投票

我找到了一种通过使用过滤器/函数组合来实现这一点的方法。它似乎适用于我上面发布的简单示例,但需要进一步测试。我是这样做的:

replace

sum denest output

© www.soinside.com 2019 - 2024. All rights reserved.