繁体   English   中英

Python模块中的for循环

[英]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 

TN都是整数并且T < N是否有可能? 在那种情况下, h = 0y保持全零),因为它是整数除法( 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

在您的示例中,如果TN为整数且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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM