0

我正在为求解特定微分方程的隐式方案编写函数。该函数如下所示:

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

我保存文件,然后以通常的方式导入它,但是当我运行方案函数时,零在y = [0 ... 0]哪里。似乎这些值在 for 循环的范围内丢失了。...N-1

如果我改为在解释器(在我的例子中是 Spyder)中编写整个函数,那么一切都会正常工作。

为什么从模块导入函数时不起作用?

4

2 回答 2

2
h = T/N 

是否可能TN都是整数和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使其为零,那么这就是你得到的。

于 2012-05-23T10:31:32.980 回答
1

通常,如果你在 python 中将两个整数相除,你也会将整数四舍五入到负无穷大。所以

1/3 == 0

在您的示例中,如果TN是整数并且T < N,则h将为 0。如果h为 0,则y的所有元素也将为 0。这可以通过将 value 转换为 float 来修复,即

float(1)/3 == 0.333

在你的情况下:

h = float(T)/N 

不熟悉 Spyder,但快速查看文档显示,它是为科学家准备的。也许这个解释器总是使用浮点除法。

于 2012-05-23T10:33:13.333 回答