Para hacer esta sencilla consideremos el Geométrico Browniano Movimientos.
Mis preguntas:
- 1. ¿Cómo puedo mostrar que el de Euler-Maruyama Método es convergente el uso de GBM?
- 2. ¿Cómo puedo determinar el orden de convergencia
De acuerdo con el Análisis Numérico de la teoría de Un SDE solver tiene orden p si el valor esperado del error es de pth pedido en el tiempo el tamaño de paso de
Ahora dejando $S_t$ ser una GBM con $S_0=1,$ $\mu=0.1$ y $\sigma=0.15$ entonces $E[S_{10}] =e$
Cuando yo ejecute el solucionador de $10,000$ veces para diferentes tamaños de $dt$ me sería de esperar que la diferencia entre la media muestral y la media real, $e$ , disminuirá a medida que $dt$ se hace más pequeño. Cómo siempre, cuando ejecuto estas simulaciones esto es lo que obtengo: Esto no indica que el error converge a cero como $dt$ va a cero? Por eso es que .....
Si alguien está interesado en el código
import matplotlib.pyplot as plt
import numpy as np
T = 10
mu = 0.1
sigma = 0.15
S0 = 1
ns = 10000
solution = S0*np.exp( mu*T )
dt_ = np.array([0.1,0.05,0.01,0.005])
err = np.zeros( len(dt_ ));
for j in range ( len(dt_ )):
dt = dt_[j]
Sn = np.zeros( (ns) )
for i in range(ns):
N = int(round(T/dt))
t = np.linspace(0, T, N)
ex= np.linspace(0, T, N)
W = np.random.standard_normal(size = N)
W = np.cumsum(W)*np.sqrt(dt) ### standard brownian motion ###
X = (mu-0.5*sigma**2)*t + sigma*W
S = S0*np.exp(X) ### geometric brownian motion ###
Sn[i]= S[-1]
mn = np.mean(Sn)
print(mn)
err[j] = abs( mn - solution)
plt.clf();
plt.loglog(dt_,err, color ="black", label = "Error (abs)");plt.xlabel("dt",fontsize = 20); plt.ylabel("Error (abs)",fontsize = 20)
plt.loglog(dt_,err, 'o', color ="black" , label = "x")
plt.title("loglog-plot",fontsize = 30);
plt.loglog(dt_,0.05*dt_**0.5, linestyle = ":")
El código es en su mayoría sólo copia-pega de StackOverflow