gpt4 book ai didi

python - matplotlib.pyplot 和 numpy 中的递减

转载 作者:行者123 更新时间:2023-12-01 02:11:17 26 4
gpt4 key购买 nike

import matplotlib.pyplot as plt
import numpy as np
import os
import sys
import time


MissionName = "Mars"
savename = "Mission"
start_time = time.time()
t = np.arange(0.0, 200.0, 10)
M0 = 2970000
mps = 12857.1429
mT = (mps * t)
m = (M0 - mT)
Fstuw = 35100000
a = Fstuw / m
for time in t:
if time >= 50:
vE = 0
for time in t:
if time < 50:
vE = 2580
h1 = (vE * M0/mps)
h2 = (1-(m / M0))
h3 = (np.log(M0 / m) / np.log(2.718281828)) + 1
h = h1 * h2 * h3
v = vE * (np.log(M0 / m) / np.log(2.718281828))

plt.plot(t,v)
plt.xlabel('time (s)')
plt.ylabel('Velocity (m/s)')
plt.title('Model raketmissie ' + str(MissionName))
plt.grid(True)
plt.savefig(savename + ".png")
plt.show()

好吧,我遇到的问题是,当时间大于或等于 50 时,它不会将 vE 更改为 0,我得到的结果是这样的:

enter image description here

最佳答案

您的问题出在这部分代码中:

for time in t:
if time >= 50:
vE = 0
for time in t:
if time < 50:
vE = 2580

现在你的 vE 只是一个值,而不是列表或其他集合。你迭代两次。第一次设置vE=0,第二次设置为vE=2580,覆盖之前设置的零。

如果您想要每个时间点的值,您可以执行以下操作:

vE=[0.0]*len(t)
for i, time in enumerate(t):
if time < 50:
v[i] = 2580.0

因此,您初始化一个与 t 长度相同且仅包含零的列表,并将对应于时间 <50 的每个元素的值更改为 2580。

更好的方法,如Mad Physicist建议的那样是使用 numpy 数组:

t = np.arange(0.0, 200.0, 10)
vE = np.zeros_like(t);
vE[t < 50] = 2580

或者一行

vE = np.where(t<50, 2580, 0)

因此您不必使用循环来填充列表。

关于python - matplotlib.pyplot 和 numpy 中的递减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48680197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com