如何针对不同e、m常数取值运行同一定积分并将结果存入列表
你需要调整被积函数的参数结构,遍历e和m的对应取值逐个计算积分即可,具体实现如下:
完整可运行代码
import numpy as np from scipy import integrate, special # 请根据你的实际场景修改以下物理常量取值 alpha_elm = 1/137 # 精细结构常数示例值 Nc = 3 # 色荷数示例值 Q2 = 10 # Q平方示例值 def f(z, r, e, m): return (e**2) * (alpha_elm * Nc / 2 * np.pi**2) * 4 * Q2 * (z**2) * ((1-z)**2) * (special.k0(r * (z * (1-z) * Q2 + m**2)) **2) m_list = [0.14, 0.14, 0.14, 1.30, 4.50] e_list = [2/3, -1/3, -1/3, 2/3, -1/3] result_list = [] for m_val, e_val in zip(m_list, e_list): # 传入当前组e、m参数,执行积分 integral_res, error = integrate.nquad(f, [[0, 1], [0, np.inf]], args=(e_val, m_val)) result_list.append(integral_res) # 输出所有积分结果 print(result_list)
关键修改说明
- 原被积函数没有将
e、m作为入参,调整后通过nquad的args参数传入每次计算的对应取值,避免全局变量冲突 - 用
zip配对两个列表相同位置的m和e,保证参数对应关系正确 - 积分返回值第一个为积分计算结果,第二个为误差估计值,可按需决定是否保存误差
内容的提问来源于stack exchange,提问作者Henrique
相关产品推荐
相关产品推荐

