Python使用Trapezium rule求积分报TypeError的代码调整方法
问题原因
你定义的n_vals、h_vals均为存储多组参数的列表,不能直接作为单个整数/数值传入梯形法计算逻辑:
range(1, n_vals)要求传入整数参数,传入列表直接触发类型错误- 后续
k*h_vals、h_vals*S也属于列表与数值的非法运算
修正方案
在外层添加循环遍历每一组n与对应的h,每次单独计算对应参数下的积分值,所有结果可存入列表方便后续调用。
修正后代码
import math # 定义积分上下限 a = 0 b = 2 # 生成n的取值列表:n=2^p,p取值1到20 n_vals = [2**p for p in range(1, 21)] # 生成对应h的取值列表 h_vals = [(b - a)/n for n in n_vals] # 定义被积函数 f = lambda x: math.exp(x) + x**2 # 存储多组积分结果的列表 integral_results = [] # 遍历每一组参数计算积分 for n, h in zip(n_vals, h_vals): S = 0.5 * (f(a) + f(b)) for k in range(1, n): S += f(a + k * h) integral = h * S integral_results.append(integral) # 打印所有计算结果 for p, n, res in zip(range(1,21), n_vals, integral_results): print(f"p={p}, n={n}, 积分结果={res:.6f}")
结果验证
被积函数的解析解为∫₀² (eˣ + x²)dx ≈ 9.055736,随着n增大,计算结果会逐步逼近该精确值,符合梯形法的收敛规律。
内容的提问来源于stack exchange,提问作者Ryan McAree
相关产品推荐
相关产品推荐

