我有一段代碼,它爲所謂Lorenz95 model(由Ed Lorenz於1995年發明)增加了一個時間步長。它通常作爲40-變量模型實現,並顯示混沌行爲。我已經編寫了時間步的算法如下:如何優化python中的時間步進算法?
class Lorenz:
'''Lorenz-95 equation'''
global F, dt, SIZE
F = 8
dt = 0.01
SIZE = 40
def __init__(self):
self.x = [random.random() for i in range(SIZE)]
def euler(self):
'''Euler time stepping'''
newvals = [0]*SIZE
for i in range(SIZE-1):
newvals[i] = self.x[i] + dt * (self.x[i-1] * (self.x[i+1] - self.x[i-2]) - self.x[i] + F)
newvals[SIZE-1] = self.x[SIZE-1] + dt * (self.x[SIZE-2] * (self.x[0] - self.x[SIZE-3]) - self.x[SIZE-1] + F)
self.x = newvals
此功能歐拉不慢,但不幸的是,我的代碼需要做出一個非常大量的調用它。有沒有一種方法可以編寫時間步進以使其運行更快?
非常感謝。
到底是在做什麼'global'? – 2013-05-08 15:44:30
你可以展開'for'循環並且明確它所做的一系列計算 - 但是沒有得到解決它們每個都必須完成的事實。可能要考慮寫一個C擴展來完成實際的數字處理。 – martineau 2013-05-08 16:14:02
正如我們都知道'global'的使用是懶惰編程的標誌。 ;-)我想確保類「Lorenz」的所有實例的數據數組大小相同。因此,迫使SIZE成爲這個課程的全球化是確保這一點的最簡單方法。 – 2013-05-09 08:20:45