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
Równanie stochastyczne
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
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
Równanie stochastyczne
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
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
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
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.
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ż
Przypisy
- ↑ P.E. Kloeden, E. Platen: Numerical Solution of Stochastic Differential Equations. Berlin: Springer, 1992. ISBN 3-540-54062-8.
Bibliografia
- PaoloP. Brandimarte PaoloP., Numerical Methods in Finance: A Matlab Introduction, New York: Wiley, 2002, ISBN 0-471-39686-9, OCLC 47092043 .
- P. Jackel, Monte Carlo Methods in Finance, Wiley, 2002, ISBN 0-471-49741-X.