いわゆるLorenz95 モデル(1995 年に Ed Lorenz によって発明された) の時間ステップをインクリメントするコードがあります。通常は 40 変数のモデルとして実装され、無秩序な動作を示します。アルゴリズムの時間ステップを次のようにコーディングしました。
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
この関数 euler は遅くはありませんが、残念ながら、私のコードでは非常に多くの呼び出しを行う必要があります。タイムステッピングをコーディングして高速に実行する方法はありますか?
どうもありがとう。