Metoda Eulera-Maruyamy: Różnice pomiędzy wersjami
start |
(Brak różnic)
|
Wersja z 19:08, 15 sty 2018
Metoda Eulera-Maruyamy – w analizie stochastycznej, metoda numerycznego (przybliżonego) rozwiązywania stochastycznych równań różniczkowych, będąca rozwinięciem klasycznej metody Eulera z teorii równwań różniczkowych zwyczajnych. Jest jedną z niewielu metod, które dają się rozszerzyć z teorii deterministycznej do stochastycznej teorii równań różniczkowych[1].
Metoda
Niech dane będzie stochastyczne równanie różniczkowe postaci
z warunkiem początkowym X0 = x0, gdzie Wt oznacza proces Wienera. Poszukiwane jest rozwiązanie tego równania na przedziale [0, T]. Przybliżeniem Eulera–Maruyamy (prawdziwego) rozwiązania X rzeczonego równania jest łańcuch Markowa Y zdefiniowany jak następuje:
- przedział zapisywany jest w postaci N przedziałów o długości :
- ,
- przy czym
- Y0 = x0;
- Zmienna Yn jest dla 1 ≤ n ≤ N zdefiniowana rekursywnie wzorem
- gdzie
Z niezależności przyrostów procesu Wienera wynika, że zmienne losowe ΔWn są niezależne oraz mają rozkład normalny o wartości oczekiwanej zero oraz wariancji .
Symulacja komputerowa przybliżeń
Niech dane będzie stochastyczne równanie rózniczkowe
którego rozwiązaniem jest proces Ornsteina-Uhlenbecka
Można posłużyć się pakietem numpy
środowiska Python by symulować
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
num_sims = 5 ### liczba symulacji
t_init = 3
t_end = 7
N = 1000 ### liczba punktów na które dzielimy przedział
dt = float(t_end - t_init) / N
y_init = 0
c_theta = 0.7
c_mu = 1.5
c_sigma = 0.06
def mu(y, t):
"""Implement the Ornstein–Uhlenbeck mu.""" ## = \theta (\mu-Y_t)
return c_theta * (c_mu - y)
def sigma(y, t):
"""Implement the Ornstein–Uhlenbeck sigma.""" ## = \sigma
return c_sigma
def dW(delta_t):
"""Sample a random number at each call."""
return np.random.normal(loc = 0.0, scale = np.sqrt(delta_t))
ts = np.arange(t_init, t_end, dt)
ys = np.zeros(N)
ys[0] = y_init
for _ in range(num_sims):
for i in range(1, ts.size):
t = (i-1) * dt
y = ys[i-1]
ys[i] = y + mu(y, t) * dt + sigma(y, t) * dW(dt)
plt.plot(ts, ys)
plt.show()
- ↑ P.E. Kloeden,, E. Platen: Numerical Solution of Stochastic Differential Equations. Berlin: Springer, 1992. ISBN 3-540-54062-8.
Bibliografia
- P. Brandimarte, Numerical Methods in Finance: A Matlab Introduction, Wiley, 2002, ISBN 0-471-39686-9.
- P. Jackel, Monte Carlo Methods in Finance, Wiley, 2002, ISBN 0-471-49741-X.