如何在SymPy中展开和的乘积并引入哑指标?
解决SymPy展开求和乘积的问题
要将$(\sum_{i=1}^N \sum_{j=1}^N A_i A_j)^2$展开为四重求和形式,你需要使用SymPy专门处理多重求和乘积的工具,具体方案如下:
方法1:使用expand_multisum函数
显式将平方转换为两个求和的乘积,再调用expand_multisum展开:
from sympy import symbols, Dummy, IndexedBase, Sum, expand_multisum i, j, k, l = symbols('i, j, k, l', cls=Dummy) A = IndexedBase('A') N = symbols('N', integer=True, positive=True) s = Sum(A[i]*A[j], (i, 1, N), (j, 1, N)) expr = s * s # 写成两个求和的乘积而非平方形式 expanded_expr = expand_multisum(expr)
执行后expanded_expr即为$\sum_{i=1}^N \sum_{j=1}^N \sum_{k=1}^N \sum_{l=1}^N A_i A_j A_k A_l$。
方法2:使用expand的multisum参数
直接对平方形式的表达式调用expand并指定multisum=True参数:
from sympy import symbols, Dummy, IndexedBase, Sum i, j, k, l = symbols('i, j, k, l', cls=Dummy) A = IndexedBase('A') N = symbols('N', integer=True, positive=True) s = Sum(A[i]*A[j], (i, 1, N), (j, 1, N)) expr = s**2 expanded_expr = expr.expand(multisum=True)
此方法同样能得到目标的四重求和表达式。
为什么之前的方法无效?
doit()用于计算求和的具体数值结果(若可计算),不会处理求和的乘积展开;- 默认的
expand()和simplify()不会主动识别并展开求和的乘积结构,必须通过multisum相关参数或函数触发专门的展开逻辑。
内容的提问来源于stack exchange,提问作者cyfirx
相关产品推荐
相关产品推荐

