python - 为什么 f(50) 与 f(50.0) 截然不同?
问题描述
我在 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)
因为它需要 value 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 -----------^
推荐阅读
- javascript - 开玩笑 - 将模拟实例作为类构造函数参数传递
- google-apps-script - 如何在 Google Apps 脚本中使用单元格值作为工作表名称
- api - 谁应该创建对象
- javascript - Javascript 搜索和过滤表
- docker - 无法运行 celery-prometheus-exporter
- php - 如何在 0h 0m 0s 获得日期?
- php - 没有扩展能够加载“vich_uploader”的配置
- python - 如何从熊猫数据框中绘制具有百分比分布的水平条形图?
- javascript - 使用选择选项显示不同的组件
- python - keras.metrics.Accuracy() 和“准确度”之间的区别