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
edytujRównanie stochastyczne
edytujNiech 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
edytujPrzybliż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
edytujRównanie stochastyczne
edytujNiech 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
edytujZgodnie 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
edytujZmieniają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
edytujPoniż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ż
edytujPrzypisy
edytuj- ↑ P.E. Kloeden, E. Platen: Numerical Solution of Stochastic Differential Equations. Berlin: Springer, 1992. ISBN 3-540-54062-8.
Bibliografia
edytuj- Paolo Brandimarte , 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.