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

Wykres pierwszych trzech zmiennych symulacji
   
   
   
   


    
    


  
    
    
     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  )