Najlepsze pytania
Chronologia
Czat
Perspektywa
Metoda Eulera-Maruyamy
Z Wikipedii, wolnej encyklopedii
Remove ads
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].
Remove ads
Opis metody
Podsumowanie
Perspektywa
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
Remove ads
Przykład: Równanie Ornsteina-Uhlenbecka
Podsumowanie
Perspektywa

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
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()
Remove ads
Zobacz też
Przypisy
Bibliografia
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads