我用欧拉方法编写了以下代码,绘制了自由下落物体的速度与时间的关系图,最终达到了最终速度:
import numpy as np
import matplotlib.pyplot as plt
g = -9.81
Cd = 0.47
p0 = 1.2
A = 0.0034
k = (Cd*p0*A)/2
m = 0.058
def euler(vyn, yn): #takes the starting velocity and height as arguments
i = 0
while i < 10000:
dt = 0.01
i += 1
vyn = vyn - dt * (g + ((k/m) * abs(vyn) * vyn))
yn = yn - dt * vyn
print(vyn, yn)
if yn < 0: #stops iterations when ball hits ground
break
return vyn
NumPoints = 2000
xmin = 0
xmax = 1000
dx = (xmax - xmin) / (NumPoints - 1)
xvals = [0.0] * NumPoints
yvals = np.zeros(NumPoints)
for i in range(NumPoints):
xvals[i] = xmin + i * dx
yvals[i] = euler(0,1000)
plt.plot(xvals,yvals)
plt.show()
顺便说一下,我把print语句放在while循环中,这样每次迭代它都会从地面打印出对象的速度和高度,而break则是在球落地时从循环中跳出。但是,当我在底部添加绘图代码时,由于某种原因,迭代会循环,不会中断。图形也不会打印出来。在
删除print语句确实会生成一个图形,但它只是一条水平线。在
如何修改代码以生成速度与时间的关系图,以及高度与时间的关系图?我需要在while循环中嵌入图形代码吗?在
谢谢
目前没有回答
相关问题 更多 >
编程相关推荐