You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为多步长h循环应用lambda函数并修正TypeError报错?

多步长求解微分方程的问题修正

问题背景

需要遍历多个步长h求解微分方程dy/dx = x³,原单步长代码可正常运行,但修改为多步长迭代时出现TypeError,报错提示整数和列表无法执行除法运算,同时存在循环变量冲突、初始值未重置等问题,需修正以实现每个步长独立计算并输出误差(4 - y_var[-1])。

错误原因分析

  1. 步长类型错误:代码中n = int((xf - xi) / h)里的h是列表类型,无法和整数执行除法运算,n需要针对每个步长单独计算。
  2. 循环变量冲突:外层遍历步长的变量i和内层循环计数器i重复,会覆盖步长值导致逻辑错误。
  3. 初始值未重置:每次处理新步长时,x、y、x_var、y_var未重新初始化,会沿用上次计算的结果,导致后续计算错误。
  4. 误用列表变量:内层循环中使用整个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:20:42