Python如何遍历Energy参数生成多次积分计算的结果数组
实现方案
不需要把for循环写入积分函数改动原有计算逻辑,核心修改是把硬编码在函数内部的E提取为函数入参,在外层遍历能量序列收集结果即可,原积分计算规则可以完全保留:
- 调整函数定义,将E设为输入参数,替换函数内硬编码的
E=2.1,同步把积分公式里硬编码的1./2.1替换为1./E,这一步只是参数化,没有改动计算逻辑 - 角度采样数组
vtheta是固定值,放在循环外预计算一次即可,避免重复生成浪费性能 - 在外层遍历
Energy数组,逐个传入E值调用积分函数,将所有返回值整理为结果数组
完整可运行代码如下:
import numpy as np from math import pi, sqrt vtheta = np.linspace(0.0, pi, 1000) Energy = np.arange(2.1, 102.1, 0.1) def f(theta, E): # 积分计算逻辑与原代码完全一致,仅替换硬编码的E值 val = 2.0 / np.sqrt(E - 1 + np.cos(theta)) result = (val.sum() - (sqrt(1./E) + sqrt(1./298.))) * (pi / 999.) return result # 遍历所有能量点收集结果 res_all = np.array([f(vtheta, e) for e in Energy])
验证一致性可以直接对比res_all[0]和之前硬编码E=2.1得到的res1,二者计算结果完全相同。最终res_all的长度与Energy数组一致,索引i对应的结果就是能量取Energy[i]时的积分值。
内容的提问来源于stack exchange,提问作者code
相关产品推荐
相关产品推荐

