u(x,t)数组Lax-Wendroff方法周期边界条件实现正确性问询
Lax-Wendroff方法周期边界实现问题排查
结论
你当前的周期边界实现完全错误,同时代码还存在语法、未定义变量等其他问题,都是导致运行报错的原因。
具体问题说明
语法缩进错误
Python对缩进敏感,你现有代码的边界赋值行、return语句缩进层级全部错误:- 两行边界赋值代码属于外层时间步循环的内容,需要和内部的
for j in countx循环保持相同缩进 return语句需要和函数内的顶层语句(如x = np.linspace行)保持相同缩进
否则运行时会直接抛出IndentationError,无法执行。
- 两行边界赋值代码属于外层时间步循环的内容,需要和内部的
周期边界逻辑错误
你当前写的边界逻辑属于零梯度(外推)边界,完全不符合周期边界的要求:你写的
u_arr[-1,l+1] = u_arr[-2,l]是把最后一个点的值设为前一个内部点的上一时间步值,属于无通量边界的实现,和周期边界「首尾点数值等价、定义域首尾相连」的核心要求无关。
正确的周期边界赋值逻辑参考如下:for l in countt: # 原有内部点计算逻辑 for j in countx: u_arr[j,l+1] = u_arr[j,l] - c*(u_arr[j,l]+(((1-c)/2)*(u_arr[j+1,l]-u_arr[j,l])*flux) - (u_arr[j-1,l]+((1-c)/2)*(u_arr[j,l]-u_arr[j-1,l])*flux)) # 正确周期边界赋值:首尾点和对侧内部点对齐 u_arr[0,l+1] = u_arr[-2,l+1] u_arr[-1,l+1] = u_arr[1,l+1]未定义变量错误
你代码中直接使用了变量L,但该变量没有作为函数参数传入,也没有在函数内定义,运行时会抛出NameError。
内容的提问来源于stack exchange,提问作者Vonny
相关产品推荐
相关产品推荐

