1

我正在尝试创建一个程序,该程序将计算出从特定高度掉落时某物撞击地面需要多长时间,并且它使用已知的二次公式。该程序似乎正在做我想做的事情,直到它到达第 7 行,在那里我认为存在一个涉及 sqrt 的数学问题。有人可以帮忙吗?

到目前为止,我已经想出了...

v = float(input())
lowerSum = 2*(-4.9)
upperSum1 = -4*(-4.9)
upperSum2 = (upperSum1)*(11000)
upperSum3 = (v)**2 - (upperSum2)
from math import sqrt
upperSum4 = (v) - sqrt(upperSum3)
t = (upperSum4) / (lowerSum)
print (t)

当我运行程序时,它指出存在数学域错误;我是编程新手,我不知道这意味着什么。

我正在尝试打印出 t 的值。

4

4 回答 4

1

您误读了公式(页面底部)

具体来说,您在 v**2 之后应用减号两次:

首先你在这里应用它(不正确,好像它是一个负号):

upperSum1 = -4*(-4.9)

然后在这里再次应用它(正确地,作为减号)。

upperSum3 = (v)**2 - (upperSum2)

upperSum1应该:

upperSum1 = 4*(-4.9)
于 2013-08-17T01:44:45.203 回答
0

只是通过做数学更深入地解决这个问题......

v = float(input())
lowerSum = -9.8
upperSum1 = 19.6
upperSum2 = 215600
upperSum3 = (v)**2 - (215600)
from math import sqrt
upperSum4 = (v) - sqrt(upperSum3)
t = (upperSum4) / (lowerSum)
print (t)

所以你必须让第 5 行中的 v 的平方大于 215600,这样等式才不会向 sqrt() 返回负数,这就是导致错误的原因。

V 必须大于 465 才能使 upperSum3 为正数,并且通过运行各种数字,它实际上永远不会变为正数,因此您使用的方程式或设置本身肯定有问题。

如果我自己不知道公式(我找不到),我无法判断代码的哪一部分实际上是错误的。

于 2013-08-09T18:24:35.083 回答
0

“数学域错误”告诉​​您您已向sqrt函数传递了一个超出其“域”的值。函数的域sqrt是正数。在某些时候,upperSum3 变为负数,这让对方sqrt很不高兴,所以它会向你抛出一个错误。

您可以通过添加 if 语句来更改代码在 upperSum3 小于 0 时执行的操作来解决此问题,例如:

if upperSum3 < 0:
    #do something other than take the sqrt
else:
    upperSum4 = (v) - sqrt(upperSum3)
于 2013-08-09T15:58:25.267 回答
0
import math
v=float(input())
t=float()
Result1=float(v-(math.sqrt(float(v**2)-float(4*(-4.9))*(11000))))
Result2=float(2*(-4.9))
t=float(Result1/Result2)
print(t)

这行得通。但是,我是 python 新手,在将结果转换为整数时遇到了问题。所以....如果我对“float”的使用似乎过度了,那是因为它是:-) 足足有半个小时,我试图在一条线上执行所有计算,但放弃了并将其分解。如果有人有更好的解决方案可以在一条线上执行计算,我会全力以赴。

于 2013-08-16T23:11:57.570 回答