Metoda Eulera-Maruyamy

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

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

dXt=a(Xt)dt+b(Xt)dWt

oraz

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

gdzie:

Wtproces Wienera,
a(Xt),b(Xt) – zadane funkcje procesu losowego Xt.

Poszukiwane jest rozwiązanie tego równania na przedziale [Tinit,Tend].

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 b, stojąca przed tą różniczka, pełni zaś rolę wzmacniania lub osłabiania efektu fluktuacji losowych.

Z drugiej strony, funkcja a, stojąca przed różniczką dt, 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 Xt powyższego równania jest łańcuch Markowa Yn taki że:

  • zdarzenia losowe łańcucha Yn, n=0,1,2,,N, zachodzą w dyskretnych chwilach czasu Tinit=τ0<τ1<<τN=Tend,

odległych od siebie o wartość skokową

Δt=(TendTinit)/N,
  • Y0=x0 – zadane zdarzenie początkowe,
  • Yn+1, n=0,1,2,,N1 – zdarzenia obliczane wzorem rekurencyjnym:
Yn+1=Yn+a(Yn)Δt+b(Yn)ΔWn,

przy czym:

ΔWn=Wn+1Wn,
a(Yn),b(Yn) – zadane funkcje Yn.

Dowodzi się, że zmienne losowe ΔWn 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 Δt.

Przykład: Równanie Ornsteina-Uhlenbecka

Cztery losowe trajektorie procesu Ornsteina-Uhlenbecka dla θ = 1, σ = 2:
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 Xt

dXt=θ(μXt)dt+σdWt,

o warunku początkowym

X0=0,

gdzie θ,μ,σ – stałe parametry; różniczka dWt 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ą

ΔYn=θ(μYn)Δt+σΔWn.

Ponieważ ΔYn=Yn+1Yn, to otrzymuje się równania rekurencyjne

Yn+1=Yn+θ(μYn)Δt+σΔWn,n=1,2,,N,

gdzie ΔWn – zmienne losowe o rozkładzie normalnym i wariancji Δt.

Warunek początkowy przyjmie postać:

Y0=0.

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 σ=0, otrzyma się ruch czysto deterministyczny,
  • przyjmując wartość parametru θ=0, 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 X=μ. 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.

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ż

Przypisy

Szablon:Przypisy

Bibliografia