Metoda Euler – Maruyama - Euler–Maruyama method - Wikipedia
v Itô kalkul, Metoda Euler – Maruyama (nazývané také Eulerova metoda) je metoda přibližné numerické řešení a stochastická diferenciální rovnice (SDE). Jedná se o jednoduché zobecnění Eulerova metoda pro obyčejné diferenciální rovnice na stochastické diferenciální rovnice. Je pojmenován po Leonhard Euler a Gisiro Marujama. Stejné zobecnění bohužel nelze provést pro žádnou libovolnou deterministickou metodu.[1]
Zvažte stochastickou diferenciální rovnici (viz Itô kalkul )
s počáteční stav X0 = X0, kde Žt znamená Wienerův proces, a předpokládejme, že chceme tento SDE vyřešit v určitém časovém intervalu [0,T]. Pak Euler – Marujama aproximace ke skutečnému řešení X je Markovův řetězec Y definováno takto:
- rozdělit interval [0,T] do N stejné podintervaly šířky :
- soubor Y0 = X0;
- rekurzivně definovat Yn pro 1 ≤n ≤ N podle
- kde
The náhodné proměnné ΔŽn jsou nezávislé a identicky distribuované normální náhodné proměnné s očekávaná hodnota nula a rozptyl .
Příklad
Numerická simulace
Oblast, která významně těží z SDE, je biologie nebo přesněji matematická biologie. Zde rostl počet publikací o použití stochastického modelu, protože většina modelů je nelineární a vyžaduje numerická schémata.
Grafika zobrazuje stochastickou diferenciální rovnici řešenou pomocí Eulerova schématu. Rovněž je uveden deterministický protějšek.
Počítačová implementace
Následující Krajta kód implementuje metodu Euler – Maruyama a používá ji k řešení Proces Ornstein – Uhlenbeck definován
Náhodná čísla pro jsou generovány pomocí NumPy balíček matematiky.
1 # - * - kódování: utf-8 - * - 2 import numpy tak jako np 3 import matplotlib.pyplot tak jako plt 4 5 num_sims = 5 # Zobrazit pět běhů 6 7 t_init = 3 8 t_end = 7 9 N = 1000 # Vypočítejte 1000 bodů mřížky10 dt = plovák(t_end - t_init) / N11 y_init = 012 13 c_theta = 0.714 c_mu = 1.515 c_sigma = 0.0616 17 def mu(y, t):18 "" "Implementovat nástroj Ornstein – Uhlenbeck mu." "" # = theta ( mu-Y_t)19 vrátit se c_theta * (c_mu - y)20 21 def sigma(y, t):22 "" "Implementujte sigma Ornstein – Uhlenbeck." "" # = sigma23 vrátit se c_sigma24 25 def dW(delta_t):26 "" "Ukázka náhodného čísla při každém hovoru." ""27 vrátit se np.náhodný.normální(loc=0.0, měřítko=np.čtv(delta_t))28 29 ts = np.divný(t_init, t_end + dt, dt)30 ys = np.nuly(N + 1)31 32 ys[0] = y_init33 34 pro _ v rozsah(num_sims):35 pro i v rozsah(1, ts.velikost):36 t = (i - 1) * dt37 y = ys[i - 1]38 ys[i] = y + mu(y, t) * dt + sigma(y, t) * dW(dt)39 plt.spiknutí(ts, ys)40 41 plt.xlabel(„čas“)42 h = plt.ylabel("y")43 h.set_rotation(0)44 plt.ukázat()
Následuje jednoduchý překlad výše uvedeného kódu do MATLAB (R2019b) programovací jazyk:
1 %% Inicializace a obslužnost 2 zavřít Všechno; 3 Průhledná Všechno; 4 5 numSims = 5; % zobrazí pět běhů 6 tBounds = [3 7]; % Hranice t 7 N = 1000; % Vypočítejte 1 000 bodů mřížky 8 dt = (tBounds (2) - tBounds (1)) / N ; 9 y_init = 1; % Počáteční podmínka y 10 11 12 pd = makedista('Normální',0,čtv(dt)); % Inicializovat rozdělení pravděpodobnosti pro naše 13 % náhodná proměnná s průměrem 0 a 14 % stdev z sqrt (dt)15 16 C = [0.7, 1.5, 0.06]; % počáteční Theta, Mu a Sigma17 18 ts = linspace (tBounds (1), tBounds (2), N); % Od t0 -> t1 s N body19 ys = nuly (1, N); % 1xN Matice nul20 21 ys(1) = y_init;22 %% výpočet procesu23 pro j = 1:numSims24 pro i = 2: numel (ts)25 t = (i-1) .* dt;26 y = ys(i-1);27 mu = c (1). * (c (2) - y);28 sigma = c (3);29 dW = náhodně (pd);30 31 ys(i) = y + mu .* dt + sigma .* dW;32 konec33 postava()34 držet na;35 spiknutí(ts, ys, 'Ó')36 konec
Viz také
Reference
- ^ Kloeden, P.E. & Platen, E. (1992). Numerické řešení stochastických diferenciálních rovnic. Springer, Berlín. ISBN 3-540-54062-8.