我需要帮助解决挑战问题。
假设球在距离大气极限250公里的恒定加速度g = 8.87ms2处落在金星上。将球的运动建模1小时15分钟(包括数据点中的第二个00和第二个4,500)。在初始状态之后,模拟5,000次状态更新(总共5,001个点。)您的模拟应该使用float64 numpy数组来计算时间(t)和高度(y)。时间应以秒表示,高度应以米为单位。
为了模拟弹跳,我们将做一些简化的假设(因为碰撞检测可能很复杂)。如果球的高度小于或等于0,我们将假设球在我们模拟的时间步之前撞到地面并且已经开始弹跳。你应该:
计算球在名为bounces的整数变量中反弹的次数。
您的提交应包含正确尺寸和值的数组t和y,以及名为反弹的int。
到目前为止,这是我的代码。它说我的y值不正确。
import numpy as np
import matplotlib.pyplot as plt
g=-8.87
t=np.linspace(0,4500,5001,dtype=np.float64)
v=np.zeros(5001)
y=np.zeros(5001)
bounces=0
y[0]=250000
for i in range(1,5001):
if y[i-1]+0.9*v[i-1]>0:
v[i]=v[i-1]+g*(0.9)
y[i]=y[i-1]+0.9*v[i-1]
if y[i-1]+0.9*v[i-1]<=0:
v[i]=-0.9*v[i]
y[i]=0
bounces+=1
答案 0 :(得分:1)
缩进有一些问题,for循环没有缩进,弹跳迭代器位于错误的位置。所以我解决了这个问题。
此外,在底部的第3行,您可以设置v[i] = -0.9*v[i]
,这是当前时间步长,当您需要前一个时间步长时。那应该是v[i]=-0.9*v[i-1]
import numpy as np
import matplotlib.pyplot as plt
g=-8.87
t=np.linspace(0,4500,5001,dtype=np.float64)
v=np.zeros(5001)
y=np.zeros(5001)
bounces=0
y[0]=250000
for i in range(1,5001):
if y[i-1]+0.9*v[i-1]>0:
v[i]=v[i-1]+g*(0.9)
y[i]=y[i-1]+0.9*v[i-1]
if y[i-1]+0.9*v[i-1]<=0:
v[i]=-0.9*v[i-1]
y[i]=0
bounces+=1
您可以在此处查看示例https://repl.it/NCWu
答案 1 :(得分:0)
向Chasmani致谢,以帮助他们解决这个问题,但是内部循环不正确。因为在for循环中不应是两个if语句,而应该是一个。这是因为这些计算应该在每个间隔中进行。这是答案:)
import numpy as np
import matplotlib.pyplot as plt
g=-8.87
t=np.linspace(0,4500,5001,dtype=np.float64)
v=np.zeros(5001)
y=np.zeros(5001)
bounces=0
y[0]=250000
for i in range(1,5001):
v[i]=v[i-1]+g*(0.9)
y[i]=y[i-1]+0.9*v[i-1]
if y[i]<=0:
v[i]=-0.9*v[i]
y[i]=0
bounces+=1
希望这会有所帮助。