ローレンツ96モデルは、エドワード・ローレンツが1996年に定式化した力学系である。[1]これは以下のように定義される。
ここで、およびおよびであると仮定します。ここで、はシステムの状態であり、は強制定数です。はカオス的な動作を引き起こすことが知られている一般的な値です。
これはデータ同化におけるモデル問題としてよく使われる。[2]
Pythonシミュレーション

scipy.integrateからodeintをインポートし、matplotlib.pyplotをpltとしてインポートし、 numpyをnpとしてインポートします。
# これらは定数です
N = 5 # 変数の数
F = 8 # 強制
def L96 ( x , t ): """一定の力を持つローレンツ96モデル""" return ( np . roll ( x , - 1 ) - np . roll ( x , 2 )) * np . roll ( x , 1 ) - x + F
x0 = F * np . ones ( N ) # 初期状態(平衡)
x0 [ 0 ] += 0.01 # 最初の変数に小さな摂動を加える
t = np . arange ( 0.0 , 30.0 , 0.01 )
x = odeint ( L96 , x0 , t )
# 最初の3つの変数をプロットします。
fig = plt . figure ()
ax = fig . add_subplot ( projection = "3d" )
ax . plot ( x [:, 0 ], x [:, 1 ], x [:, 2 ])
ax . set_xlabel ( "$x_1$" )
ax . set_ylabel ( "$x_2$" )
ax . set_zlabel ( "$x_3$" )
plt . show ()
Juliaシミュレーション
DynamicalSystems 、PyPlot 、PyPlot.using3D ()を使用する
# パラメータと初期条件
N = 5 F = 8.0 u₀ = F * ones ( N ) u₀ [ 1 ] += 0.01 # 小さな摂動
# Lorenz-96モデルはDynamicalSystems.jlで事前定義されてい
ます: ds = Systems.lorenz96 ( N ; F = F )
# 同様に、高速バージョンを明示的に定義するには、次のようにします。struct
Lorenz96 { N } end # サイズ型の構造体function ( obj :: Lorenz96 { N } )( dx , x , p , t ) where { N } F = p [ 1 ] # 3 つのエッジ ケースを明示的に (パフォーマンス) @inbounds dx [ 1 ] = ( x [ 2 ] - x [ N - 1 ]) * x [ N ] - x [ 1 ] + F @inbounds dx [ 2 ] = ( x [ 3 ] - x [ N ]) * x [ 1 ] - x [ 2 ] + F @inbounds dx [ N ] = ( x [ 1 ] - x [ N - 2 ]) * x [ N - 1 ] - x [ N ] + F # n in 3の一般的なケース: ( N - 1 ) @inbounds dx [ n ] = ( x [ n + 1 ] - x [ n - 2 ]) * x [ n - 1 ] - x [ n ] + F終了何も返さない終了
lor96 = Lorenz96 { N }() # 構造体ds = ContinuousDynamicalSystem ( lor96 , u₀ , [ F ])を作成
# そして軌道を進化させます
dt = 0.01 # サンプリング時間Tf = 30.0 # 最終時間tr = trajectory ( ds , Tf ; dt = dt )
# 3Dでプロットします:
x , y , z = columns ( tr ) plot3D ( x , y , z )
参考文献
- ^ ロレンツ、エドワード (1996). 「予測可能性 ― 部分的に解決された問題」(PDF) .予測可能性に関するセミナー、第1巻、ECMWF .
- ^ Ott, Edward; et al. (2002). 「大気データ同化のための局所アンサンブルカルマンフィルタ」. arXiv : physics/0203058 .