这个问题在这里已有答案:
我在Python 2.7.15中定义了一个函数,它接受两个输入(b,v)
,但我注意到f(50,0.1)
产生的结果与f(50.0,0.1)
的结果非常不同。这是功能:
def f(b,v):
h=b*v/math.sqrt(1-v**2)
def dJ_dp(J,p):
return [J[1],-J[0]+3.0/2*J[0]**2+1/(2*h**2)]
J0 = [0.0000001,1/b]
ps = np.linspace(0,15,50)
Js = odeint(dJ_dp, J0, ps)
us = Js[:,0]
return (ps,1/us)
我需要在dJ_dp
中定义f(b,v)
,因为它需要值h
。为什么输出如此不同?为什么他们有所不同?
我的假设是在定义h
时出现了问题,但事实似乎并非如此。
问题可能在这里:J0 = [0.0000001,1/b]
。
如果b
是int 50
,1/b
将使用整数除法,并导致0
。如果b
是浮点50.0
,它将用浮点除法完成,并将导致0.02
。
您可以使用1.0
而不是1
来强制浮点运算:
J0 = [0.0000001, 1.0/b]
# Here -----------^