Python 为什么下面的代码给出的答案与分析答案相差甚远?
我正在学习Python,遇到了以下问题: 一个球从悬崖上垂直落下,高度为h。一段时间后球的位置为t 可以表示为: y(t)=v0*t− (在^2)/2+h时 式中,a是加速度(单位:m/s^2),v0是球的初始速度(单位:m/s)。 我们想知道t1带球通过一定高度h1的时间。换句话说, 我们希望求出t1的值,使得y(t1)=h1。球的位置是根据δt测量的 秒。 编写一个程序,找出球到达高度h1之前需要多长时间t1 使用while循环。这里,我们让h=10m,y1=5m,delta_t=0.01 s,v0=0m/s,a=9.81 m/s^2。” 我用Python编写了以下代码。问题是,当我在纸上解决问题时,我得到的答案与我预期的不同(对于y1=5m,t=1.01s,对于y1=3.6m,t=1.14s)。我不确定问题到底出在哪里。这是我的密码:Python 为什么下面的代码给出的答案与分析答案相差甚远?,python,python-3.x,Python,Python 3.x,我正在学习Python,遇到了以下问题: 一个球从悬崖上垂直落下,高度为h。一段时间后球的位置为t 可以表示为: y(t)=v0*t− (在^2)/2+h时 式中,a是加速度(单位:m/s^2),v0是球的初始速度(单位:m/s)。 我们想知道t1带球通过一定高度h1的时间。换句话说, 我们希望求出t1的值,使得y(t1)=h1。球的位置是根据δt测量的 秒。 编写一个程序,找出球到达高度h1之前需要多长时间t1 使用while循环。这里,我们让h=10m,y1=5m,delta_t=0.01
import math
import numpy as np
h = 10
y1 = float(input("Enter the height you want:"))
delta = 0.01
t = v_i = 0
a = 9.81
y = v_i * t - (a * pow(t, 2)/2) + h
while True:
if y <= y1:
print("The object will be at height",format(y, "0.3") ,y1, "around the time", format(t, ".3"), "s")
break
else:
t += delta
h = y
v_i = v_i - a*t
y = v_i * t - (a * pow(t, 2)/2) + h
导入数学
将numpy作为np导入
h=10
y1=浮动(输入(“输入所需高度:”)
δ=0.01
t=v_i=0
a=9.81
y=v_i*t-(a*pow(t,2)/2)+h
尽管如此:
如果y您似乎想要导出一个时间t
,其距离与用户要求的距离相同
为此,您尝试创建一个循环,以猜测时间t
犯了错误
这比你想象的要简单:
h=10
y1=浮动(输入(“输入所需高度:”)
δ=0.01
t=0
a=9.81
y=h#y从悬崖顶部开始
当y>y1时:
t+=delta#这里仍然可以猜测时间t
y=h-(a*pow(t,2)/2)#只需重新计算新时间t的y
打印(f“对象将在时间{t}前后处于高度{y1}”)
请注意,您的v_i
可以始终假定为0
。给定的公式使用v0
,无论您计算的是什么时间。但是您的代码使用的是v_i
,它在每个时间步都会更新。@jasonharper v0(或v_i)必须在每次时间步前进时更新,因为它受到加速度的影响。而且,即使我消除了这个术语(v_I*t),它仍然不会给出预期的答案。所以基本上,我不必每次迭代都更新位置(h)?它工作得很好,但我不明白为什么我不应该每次迭代都更新位置(h)。公式给出了任何给定时间的确切高度t
。它本身根本不是迭代的。您插入一个给定的t
,然后收到结果h
。但是,您所追求的是一个时间t
,给定用户请求的h
,这与此相反,因此您需要一个循环来尝试t
的各种值(从0.0
开始,然后递增0.01
)查看哪个将为您提供所请求的h
。