2012-05-23 42 views
0

我正在爲隱式方案寫一個函數來求解一個特定的微分方程。功能如下:Python模塊中的for循環

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]其中...N-1零。似乎這些值在for循環的範圍內丟失了。

如果我在解釋器中編寫整個函數(在我的情況下是Spyder),那麼所有的東西都可以正常工作。

爲什麼從模塊導入函數時不工作?

+7

每次調用'scheme'時'y'初始化;這完全是可以預料的。 –

+1

@lime,你的意思是「值在for循環的範圍內丟失了?」 – Vikas

回答

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使其爲零,那麼它就是你所得到的。

1

通常情況下,如果你在python中劃分兩個整數,你也會有一個向負無窮大的整數。 所以

1/3 == 0 

在您的例子中,如果ŤÑ是整數,並且Ť < Ñħ將爲0 如果ħ爲0,那麼將所有元件的也將爲0. 這可以通過將值浮動來固定,即

float(1)/3 == 0.333 

你的情況:

h = float(T)/N 

不熟悉的Spyder,但快速瀏覽文檔顯示,這是科學家。 也許這個翻譯總是使用浮動分割。