[英]for-loops in Python modules
我正在为隐式方案编写函数,用于求解特定的微分方程。 该函数如下所示:
import numpy as np
def scheme(N,T):
y = np.zeros(N+1) # Array for implicit scheme
h = T/N # Step length
for i in range(N):
y[i+1] = y[i] + h*(1+4*y[i])
print y
我保存了文件,然后以通常的方式导入它,但是当我运行scheme函数时, y = [0 ... 0]
其中...
是N-1
零。 似乎这些值在for循环的范围内丢失了。
如果我改为在解释器中编写整个函数(在我的情况下为Spyder),则一切正常。
为什么从模块导入功能时不起作用?
h = T/N
T
和N
都是整数并且T < N
是否有可能? 在那种情况下, h = 0
( y
保持全零),因为它是整数除法( 1/2 == 0
)。
尝试将其替换为
h = 1. * T / N
并查看结果。
y[i+1] = y[i] + h*(1+4*y[i])
可以改写成
y[i+1] = y[i] + h + 4 * h * y[i]
^^^
这意味着对于y[i] = 0
,新的y[i+1]
将为h
。 如果整数除法T/N
使其为零,那么这就是您得到的。
通常,如果在python中将两个整数相除,则整数也将朝着负无穷大四舍五入。 所以
1/3 == 0
在您的示例中,如果T和N为整数且T < N ,则h将为0。如果h为0,则y的所有元素也将为0。这可以通过将值强制转换为float来固定,即
float(1)/3 == 0.333
在您的情况下:
h = float(T)/N
不熟悉Spyder,但快速浏览文档说明,它是给科学家的。 也许这个解释器总是使用浮点除法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.