Metoda Eulera-Maruyamy

Metoda Eulera-Maruyamy – metoda numerycznego rozwiązywania stochastycznych równań różniczkowych. Nazwa metody pochodzi od nazwiska japońskiego matematyka Gisiro Maruyamy (1916-1986), który rozszerzył metodę Eulera z 1768, stosowaną do numerycznego rozwiązywania równań różniczkowych zwyczajnych. Metoda ta jest jedną z niewielu metod numerycznych, które pozwalają metody numeryczne stosowane do równań deterministycznych rozszerzyć do równań stochastycznych[1].

Opis metody edytuj

Równanie stochastyczne edytuj

Niech dane będzie stochastyczne równanie różniczkowe postaci

 

oraz

  – zadany warunek początkowy (położenie cząstki w chwili początkowej  ),

gdzie:

 proces Wienera,
  – zadane funkcje procesu losowego  

Poszukiwane jest rozwiązanie tego równania na przedziale  

Analiza równania stochastycznego

O stochastycznym charakterze powyższego równania decyduje różniczka procesu losowego Wienera: gdyby była równa zeru, to proces byłby deterministyczny. Funkcja   stojąca przed tą różniczka, pełni zaś rolę wzmacniania lub osłabiania efektu fluktuacji losowych.

Z drugiej strony, funkcja   stojąca przed różniczką   decyduje, na ile proces deterministyczny dominuje nad procesem losowym – gdyby funkcja ta była zerowa, to proces byłby czysto losowy.

Powyższe własności łatwo sprawdzić, rozwiązując podane dalej przykładowe równanie stochastyczne, zmieniając odpowiednio jego parametry.

Przybliżenie Eulera-Maruyamy edytuj

Przybliżeniem Eulera-Maruyamy dokładnego rozwiązania   powyższego równania jest łańcuch Markowa   taki że:

  • zdarzenia losowe łańcucha     zachodzą w dyskretnych chwilach czasu  

odległych od siebie o wartość skokową

 
  •   – zadane zdarzenie początkowe,
  •     – zdarzenia obliczane wzorem rekurencyjnym:
 

przy czym:

 
  – zadane funkcje  

Dowodzi się, że zmienne losowe   jako różnice zmiennych losowych o rozkładzie normalnym (proces Wienera) są niezależne oraz mają rozkład normalny o wartości oczekiwanej zero i wariancji  

Przykład: Równanie Ornsteina-Uhlenbecka edytuj

 
Cztery losowe trajektorie procesu Ornsteina-Uhlenbecka dla θ = 1, σ =  
niebieska: położenie początkowe a = 10, μ = 0
pomarańczowa: położenie początkowe a = 0, μ = 0
zielona: położenie początkowe a = −10, μ = 0
czerwona: położenie początkowe a = 0, μ = −10
E(X) określa trajektorię, po której poruszałby się układ, gdyby czynniki losowe były zerowe (σ = 0).

Równanie stochastyczne edytuj

Niech dane będzie stochastyczne równanie różniczkowe jednej zmiennej  

 

o warunku początkowym

 

gdzie   – stałe parametry; różniczka   odpowiada za proces losowy Wienera.

Powyższe równanie opisuje tzw. proces Ornsteina-Uhlenbecka.

Zamiana na postać dyskretna edytuj

Zgodnie z metodą Eulera-Maruyamy zamienia się to równanie na postać dyskretną

 

Ponieważ   to otrzymuje się równania rekurencyjne

 

gdzie   – zmienne losowe o rozkładzie normalnym i wariancji  

Warunek początkowy przyjmie postać:

 

Analiza zależność ruchu układu od parametrów równania edytuj

Zmieniając parametry równania stochastycznego, można otrzymać ruchu układu w zależności od różnych warunków otoczenia, z jakim układ oddziałuje. Np.

  • przyjmując wartość parametru   otrzyma się ruch czysto deterministyczny,
  • przyjmując wartość parametru   otrzyma się ruch czysto losowy,
  • parametr   określa położenie, do którego zmierza układ po dłuższym czasie, jeżeli czynniki losowe nie są zbyt duże, tj. dla odpowiednio małej wartości   na rysunku pokazano cztery trajektorie układu w takich warunkach; mimo różnych wartości położeń początkowych układu (na rys. oznaczonych literą a), układ zmierza po pewnym czasie do położenia   Przykładem jest ruch wahadła poddanego działaniu losowego oddziaływania od otoczenia i jednocześnie tłumionego – niezależnie od położenia początkowego wahadło przyjmie ostatecznie najniższe położenie.

Kod programu edytuj

Poniżej podano przykład kodu w języku Python, całkujący równanie Ornsteina-Uhlenbecka. Program można testować, korzystając np. z darmowego notatnika colab google online.

Na ilustracji pokazano wynik symulacji komputerowej dla przyjętych w programie wartości parametrów.

 
Pięć przykładowych rozwiązań stochastycznego równania różniczkowego opisującego proces Ornsteina-Uhlenbecka, znalezionych numerycznie za pomocą metody Eulera-Maruyamy dla θ = 0.7, σ = 0.06, μ = 1.4 i identycznych położeń początkowych X= 0; na osi pionowej jest położenie układu, na osi poziomej czas. Każde rozwiązanie przedstawia możliwą, losowo przebiegającą trajektorią układu, która dla dłuższych czasów oscyluje wokół punktu X=μ =1.4
import numpy as np
import matplotlib.pyplot as plt

#Dane:
liczba_symulacji = 5
t_0 = 0    # chwila początkowa
t_1 = 7    # chwila końcowa
N   = 200  # liczba punktów podziału przedziału

theta  = 0.7
mu     = 1.4
sigma  = 0.06

#Definicja funkcji, która generuje liczbę losową przy każdym wywołaniu
def DW(Dt): 
    return np.random.normal(loc = 0.0, scale = np.sqrt(Dt))

# Część główna programu
Dt   = (t_1 - t_0) / N
t    = np.arange(t_0, t_1, Dt) # tablica dyskretnych chwil czasu
Y    = np.zeros(N)             # tablica dyskretnych położeń cząstki

for _ in range(liczba_symulacji):
    Y[0] = 0
    for i in range(0, N-1):
        Y[i+1]=Y[i] + theta*(mu -Y[i])*Dt +sigma*DW(Dt)
    plt.plot(t, Y)

plt.grid(True)  # Dodanie siatki do wykresu
plt.show()

Zobacz też edytuj

Przypisy edytuj

  1. P.E. Kloeden, E. Platen: Numerical Solution of Stochastic Differential Equations. Berlin: Springer, 1992. ISBN 3-540-54062-8.

Bibliografia edytuj