如何在Python中实现双层Σ(双重求和)公式的计算
双层求和公式的Python实现方案
首先纠正认知误区:数学表达式中写在左侧的第一个Σ对应外层循环,右侧的第二个Σ对应内层循环,和你之前的理解刚好相反,这是此前代码无法正确运行的核心原因。
基础循环实现(最易理解)
直接对应数学公式的嵌套逻辑,代码如下:
def calc_f(x, y): res = 0 # 第一层求和:i从1到10,对应外层循环 for i in range(1, 11): # 第二层求和:j从1到10,对应内层循环 for j in range(1, 11): res += i * x**2 + j * y**3 return res
注意:Python的
range是左闭右开区间,要取到1到10的整数值,结束参数需要设为11。
简洁Pythonic实现
用内置sum函数嵌套实现,代码更精简:
def calc_f(x, y): return sum(sum(i*x**2 + j*y**3 for j in range(1, 11)) for i in range(1, 11))
优化版实现(数学简化后)
该累加项可以拆分化简,避免循环计算,运行效率更高:
原公式可拆分为:
$\sum_{i=1}{10}\sum_{j=1}{10}ix^2 + \sum_{i=1}{10}\sum_{j=1}{10}jy^3 = 10x2\sum_{i=1}{10}i + 10y3\sum_{j=1}{10}j$
已知1到10的整数和为55,代入后可直接得到结果:
def calc_f(x, y): return 550 * (x**2 + y**3)
内容的提问来源于stack exchange,提问作者Maria Evans
相关产品推荐
相关产品推荐

