1 votos

Discretización de Euler código python

Escribe la discretización de Euler de la ecuación estocástica unidimensional

$dXt = b (t, X_t) \space dt + \sigma (t, X_t) \space dW_t$

Para esta parte diría que todo bien porque es una parte puramente teórica que encuentro en cualquier libro de cálculo estocástico.

El problema surge en la parte opcional: Establecer $b (t, x) = tx$ , $\sigma (t, x) = \sqrt {t (x + 1)}$ e $X_0 = 1$ , se aproxima numéricamente al valor esperado $max$ { $0, 1 - (X_{0.5})^2$ } utilizando el método Euler-Monte Carlo.

La ecuación discretizada será:

$$dX_{t,j+1} = X_{t,j} tX_{t,j} + t_j X_{t,j} \Delta + \sqrt {t_j (X_{t,j} + 1)^+} \Delta W_j$$ con $X_{t_0} = 1$

¿Podría indicarme un libro o un sitio con un código python para escribir este método? Gracias.

Encuentro este código:

# Create Brownian Motion
np.random.seed(1)
dB = np.sqrt(dt) * np.random.randn(N)
B  = np.cumsum(dB)

# Exact Solution
Y = X0 * np.exp((mu - 0.5*sigma**2)*t + (sigma * B))

# EM Approximation - small dt
X_em_small, X = [], X0
for j in range(N):  
    X += mu*X*dt + sigma*X*dB[j]
    X_em_small.append(X)

# EM Approximation - big dt
X_em_big, X, R = [], X0, 2
coarse_grid = np.arange(dt,1+dt,R*dt)
for j in range(int(N/R)):
    X += mu*X* (R*dt) + sigma*X*sum(dB[R*(j-1):R*j])
    X_em_big.append(X)    

# Plot
plt.plot(t, Y, label="Exact ($Y_t$)", color=pal[0])
plt.plot(t, X_em_small, label="EM ($X_t$): Fine Grid", color=pal[1], ls='--')
plt.plot(coarse_grid, X_em_big, label="EM ($X_t$): Coarse Grid", color=pal[2], ls='--')
plt.title('E-M Approximation vs. Exact Simulation'); plt.xlabel('t'); plt.legend(loc = 2);

¿cómo puedo aplicarlo a mi texto? Muchas gracias.

2voto

dmuir Puntos 146

Creo que en este enlace encontrará lo que busca.

Métodos numéricos en Python -- Capítulo 22.3

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X