如何为多步长h循环应用lambda函数并修正TypeError报错?
多步长求解微分方程的问题修正
问题背景
需要遍历多个步长h求解微分方程dy/dx = x³,原单步长代码可正常运行,但修改为多步长迭代时出现TypeError,报错提示整数和列表无法执行除法运算,同时存在循环变量冲突、初始值未重置等问题,需修正以实现每个步长独立计算并输出误差(4 - y_var[-1])。
错误原因分析
- 步长类型错误:代码中
n = int((xf - xi) / h)里的h是列表类型,无法和整数执行除法运算,n需要针对每个步长单独计算。 - 循环变量冲突:外层遍历步长的变量
i和内层循环计数器i重复,会覆盖步长值导致逻辑错误。 - 初始值未重置:每次处理新步长时,
x、y、x_var、y_var未重新初始化,会沿用上次计算的结果,导致后续计算错误。 - 误用列表变量:内层循环中使用整个
h列表参与计算,而非当前迭代的单个步长值。
修正后的代码
# 定义微分方程 dy = lambda x,y: x**3 # 初始条件 xi = 0 xf = 2 # 待遍历的步长列表 h_list = [0.5, 0.25, 0.125, 0.0625, 0.03125, 0.015625, 0.0078125, 0.00390625] # 遍历每个步长 for current_h in h_list: print(f"\n=== 当前步长 h = {current_h} ===") # 重置初始值和存储列表 x = xi y = 0 x_var = [] y_var = [] # 计算当前步长对应的迭代次数 n = int((xf - xi) / current_h) print('x \t\t y') print('%f \t %f'% (x, y)) for i in range(1, n+1): y = y + dy(x, y) * current_h x = x + current_h y_var.append(y) x_var.append(x) print('%f \t %f'% (x, y)) # 计算并输出误差 error = 4 - y_var[-1] print(f"步长h={current_h}时的误差为: {error}")
代码说明
- 将步长列表命名为
h_list,避免和单个步长变量混淆,遍历每个步长时用current_h指代当前值。 - 每个步长的迭代次数
n在循环内计算,确保和当前步长匹配。 - 每次处理新步长时,重置
x、y以及存储结果的列表,保证每个步长的计算独立。 - 内层循环使用
current_h参与计算,避免误用列表变量。 - 添加分隔线和清晰的提示信息,方便区分不同步长的计算结果。
内容的提问来源于stack exchange,提问作者s_o_c_account
相关产品推荐
相关产品推荐

