Model Lorenza 96
Model Lorenza 96 to system dynamiczny sformułowany przez Edwarda Lorenza w 1996 roku. Jest on zdefiniowany w następujący sposób. Dla :
gdzie zakłada się, że i i . Tutaj stan systemu a to powszechna wartość, o której wiadomo, że powoduje chaotyczne zachowanie.
Jest powszechnie stosowany jako problem modelowy w asymilacji danych .
Symulacja Pythona
z mpl_toolkits.mplot3d import Axes3D z scipy.integrate import odeint import matplotlib.pyplot as plt import numpy as np # To są nasze stałe N = 5 # Liczba zmiennych F = 8 # Wymuszanie def L96 ( x , t ): """ Model Lorenza 96 ze stałym wymuszeniem""" # Ustawienie wektora d
= np . zera ( N ) # Zapętla indeksy (z operacjami i indeksowaniem niedomiaru Pythona obsługującymi przypadki skrajne) dla i w zakresie ( N ): d [ i ] = ( x [( i + 1 ) % N ] - x [ i - 2 ] ) * x [ ja - 1 ] - x
0
[ ja ] + fa powrót re x0 = fa * np . jedynki ( N ) # Stan początkowy (równowaga) x0 [ ] += 0.01 # Dodaj małe zaburzenie do pierwszej zmiennej t = np . arange ( 0.0 , 30.0 , 0.01 ) x = odeint ( L96 , x0 , t
0
) # Wykreśl pierwsze trzy zmienne fig = plt . figura () topór = figura . gca ( projekcja = "3d" ) ax . wykres ( x [:, ], x [:, 1 ], x [:, 2 ]) ax . set_xlabel ( "$x_1$" ) topór . set_ylabel (
"$x_2$" ) topór . set_zlabel ( "$x_3$" ) plt . pokaż ()
Symulacja Julii
przy użyciu DynamicalSystems , PyPlot PyPlot . using3D () # parametry i warunki początkowe N = 5 F = 8,0 u₀ = F * jedynki ( N ) u₀ [ 1 ] += 0,01 # małe zaburzenie # Model Lorenza-96 jest predefiniowany w DynamicalSystems.jl: ds = Systems . lorenz96 ( N ; F
= F ) # Równoważnie, aby jawnie zdefiniować szybką wersję, wykonaj: struct Lorenz96 { N } end # Struktura dla funkcji typu rozmiaru ( obj :: Lorenz96 { N })( dx , x , p , t ) gdzie { N } F = p [ 1 ] # 3 skrajne przypadki jawnie (wydajność) @inbounds dx [
1 ] = ( x [ 2 ] - x [ N - 1 ]) * x [ N ] - x [ 1 ] + F @przychodzące dx [ 2 ] = ( x [ 3 ] - x [ N ]) * x [ 1 ] - x [ 2 ]
+ F @przychodzące dx [ N ] = ( x [ 1 ] - x [ N - 2 ]) * x [ N - 1 ] - x [ N ] + F # to ogólny przypadek dla n w 3 : ( N - 1 ) @przychodzące dx [ n ]
= ( x [ n + 1 ] - x [ n - 2 ]) * x [ n - 1 ] - x [ n ] + F koniec return nic koniec lor96 = Lorenz96 { N } () # utwórz struct ds = ContinuousDynamicSystem ( lor96 , u₀ ,
[ F ]) # A teraz rozwiń trajektorię dt = 0,01 # czas próbkowania Tf = 30,0 # czas końcowy tr = trajektoria ( ds , Tf ; dt = dt ) # I wykreśl w 3D: x , y , z = kolumny ( tr ) plot3D ( x , y , z )
Kategoria: