You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:43:21