我有一个基本循环(实际上是更新数组值的时间循环):
for i in range(1,nt):
#Using roll
u = u - cfl/2*(roll(u,-1)- roll(u,1))
# Update time
t = t+dt
有了这个循环和roll
函数,模拟工作正常。你知道吗
我必须有周期边界条件(x[0] = x[n-1]
)
现在,我试着用经典的方法得到相同的等价代码,我的意思是写roll
移位函数的显式代码。你知道吗
在另一个论坛上,有人建议:
for i in range(1,nt):
utemp1 = u[0] - cfl/2*(u[nx-1] - u[1])
utemp2 = u[nx-1] - cfl/2*(u[nx-2] - u[0])
u[1:nx-2] = u[1:nx-2] - cfl/2*(u[0:nx-3] - u[2:nx-1])
u[0] = utemp1
u[nx-1] = utemp2
但是这个“等价代码”不会产生与第一个版本相同的结果(使用roll
python函数)。你知道吗
我想在我上面的任务中得到关于什么是错误的帮助。这似乎是一个覆盖值或边界更新错误的问题。你知道吗
更新1:
@B.M.给出的解决方案非常有效,而且很清楚。谢谢大家。你知道吗
两个等效函数:
指数、滚动符号和
v
类型错误:必须是float。你知道吗跑步:
相关问题 更多 >
编程相关推荐