metoda Milsteina

W matematyce metoda Milsteina jest techniką przybliżonego numerycznego rozwiązania stochastycznego równania różniczkowego . Jej nazwa pochodzi od Grigorija N. Milsteina, który po raz pierwszy opublikował ją w 1974 roku.

Opis

Rozważ autonomiczne stochastyczne równanie różniczkowe Itō :

z warunkiem początkowym oznacza Wienera , chcemy rozwiązać to SDE w czas . Wtedy przybliżenie Milsteina do prawdziwego rozwiązania to Markowa zdefiniowany w następujący sposób:
  • podzielić przedział na równe podprzedziały szerokości }
  • ustaw
  • rekurencyjnie zdefiniuj dla przez:
    gdzie oznacza pochodną b w odniesieniu do :
    niezależnymi i identycznie rozłożonymi normalnymi zmiennymi losowymi o wartości oczekiwanej zero i wariancji . Wtedy będzie w przybliżeniu zwiększa się da lepsze przybliżenie.

Należy zauważyć, że gdy , czyli termin dyfuzji nie zależy od , ta metoda jest równoważna z Metoda Eulera-Maruyamy .

, jak i silny rząd zbieżności , który jest lepszy od metody Eulera – Maruyamy rząd zbieżności, , ale gorszy silny rząd zbieżności, .

Intuicyjne wyprowadzenie

W tym wyprowadzeniu przyjrzymy się tylko geometrycznemu ruchowi Browna (GBM), którego stochastyczne równanie różniczkowe jest określone wzorem:

ze stałymi rzeczywistymi i . Korzystając z lematu Itō otrzymujemy:

Zatem rozwiązaniem GBM SDE jest:

Gdzie

Patrz rozwiązanie numeryczne przedstawiono powyżej dla trzech różnych trajektorii.

Numeryczne rozwiązanie dla przedstawionego właśnie stochastycznego równania różniczkowego, dryf jest dwukrotnie większy od współczynnika dyfuzji.

Implementacja komputerowa

Poniższy kod Pythona implementuje metodę Milsteina i używa jej do rozwiązania SDE opisującego geometryczny ruch Browna zdefiniowany przez




   
   

    


   0 
   
      


  # -*- kodowanie: utf-8 -*-  # Metoda Milsteina  import  numpy  as  np  import  matplotlib.pyplot  as  plt  num_sims  =  1  # Jeden przykład  # Jedna sekunda i tysiąc punktów siatki  t_init  ,  t_end  =  ,  1  N  =  1000  # Oblicz 1000 punkty siatki  dt  =  float  (  t_end  -  t_init  )  /  N  ## Warunki początkowe  y_init  =  
    


 
    
      


   1  μ  ,  σ  =  3  ,  1  # dw Proces losowy  def  dW  (  Δt  ):  """Rozkład normalny próby losowej"""  return  np  .  przypadkowy  .  normal  (  loc  =  0.0  ,  scale  =  np  .  sqrt  (  Δt  ))  # wektory do wypełnienia  ts  =  np  .  aranżacja  (  t_init     
    
0  


   
        
              ,  t_koniec  +  dt  ,  dt  )  ys  =  np  .  zera  (  N  +  1  )  ys  [  ]  =  y_init  # Pętla  for  _  in  range  (  num_sims  )  for  i  in  range  (  1  ,  ts  .  size  ):  t  =  (  i  -  1  )  *  
            
        
          
                                
     dt  y  =  ys  [  i  -  1  ]  # Metoda Milsteina  dw_  =  dW  (  dt  )  ys  [  i  ]  =  y  +  μ  *  dt  *  y  +  σ  *  y  *  dw_  +  0,5  *  σ  **  2  *  y  *  (  dw_  **  2  -  dt  )  cz  




  
0
 .  plot  (  ts  ,  ys  )  # Działka  plt  .  xlabel  (  "czas(y)"  )  plt  .  siatka  ()  h  =  pl  .  yetykieta  (  "y"  )  h  .  set_rotation  (  )  plt  .  pokaż  () 

Zobacz też

Dalsza lektura

  •   Kloeden, PE i Platen, E. (1999). Numeryczne rozwiązanie stochastycznych równań różniczkowych . Springera w Berlinie. ISBN 3-540-54062-8 . {{ cite book }} : CS1 maint: wiele nazwisk: lista autorów ( link )