用Python绘制迭代图?

2024-09-29 17:11:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我用欧拉方法编写了以下代码,绘制了自由下落物体的速度与时间的关系图,最终达到了最终速度:

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循环中嵌入图形代码吗?在

谢谢


Tags: 代码关系as时间dtplt速度print

热门问题