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].
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.
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).
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.
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
importnumpyasnpimportmatplotlib.pyplotasplt#Dane:liczba_symulacji=5t_0=0# chwila początkowat_1=7# chwila końcowaN=200# liczba punktów podziału przedziałutheta=0.7mu=1.4sigma=0.06#Definicja funkcji, która generuje liczbę losową przy każdym wywołaniudefDW(Dt):returnnp.random.normal(loc=0.0,scale=np.sqrt(Dt))# Część główna programuDt=(t_1-t_0)/Nt=np.arange(t_0,t_1,Dt)# tablica dyskretnych chwil czasuY=np.zeros(N)# tablica dyskretnych położeń cząstkifor_inrange(liczba_symulacji):Y[0]=0foriinrange(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 wykresuplt.show()
↑P.E. Kloeden, E. Platen: Numerical Solution of Stochastic Differential Equations. Berlin: Springer, 1992. ISBN 3-540-54062-8. Brak numerów stron w książce
PaoloP.BrandimartePaoloP., Numerical Methods in Finance: A Matlab Introduction, New York: Wiley, 2002, ISBN 0-471-39686-9, OCLC47092043. Brak numerów stron w książce
P. Jackel, Monte Carlo Methods in Finance, Wiley, 2002, ISBN 0-471-49741-X.