正如标题所暗示的那样。查看代码块:m = 100a = -9.8y0 = 30000t0 = 0v0 = 0dt = 0.01yAF = np.array([])yAF = np.append(yAF, y0)tAF = np.array([])tAF = np.append(tAF, t0)speedAF = np.array([])speedAF = np.append(speedAF, v0)def dy_dt(t): return a * t i = 0while yAF[i] >= 0: i = i + 1 tAF = np.append(tAF, tAF[i-1] + dt) speedAF = np.append(speedAF, dy_dt(tAF[i-1])) yAF = np.append(yAF, yAF[i-1] + dt * dy_dt(tAF[i-1]))如您所见,我试图实现的条件是,当值 yAF[i] 低于零时,我不想将其添加到数组中,我希望循环结束。代码当前仍然在停止之前将小于 0 的第一个值添加到数组中。有什么办法可以解决这个错误吗?
2 回答
温温酱
TA贡献1752条经验 获得超4个赞
您颠倒了检查和附加的顺序。您应该首先检查,然后才附加:
yAF, yAF, speedAF = [], [], []
yAF_next, tAF_next, speedFA_next = y0, t0, v0
while yAF_next >= 0:
yAF.append(yAF_next)
tAF.append(t0_next)
speedAF.append(speedFA_next)
tAF_next = tAF[-1] + dt
speedAF_next = dy_dt(tAF[-1])
yAF_next = yAF[-1] + dt * dy_dt(tAF[-1])
有趣的是,您甚至不需要i变量。是的,使用列表,稍后将它们转换为数组。
明月笑刀无情
TA贡献1828条经验 获得超4个赞
只需将 while 条件更改为而> 0
不是为>= 0
自己节省一个循环。
此外,仅查看此代码,这将导致无限循环,因为您正在增加 i 但在 i 小于 0 时退出。
添加回答
举报
0/150
提交
取消