-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexplicit_fd.py
48 lines (30 loc) · 969 Bytes
/
explicit_fd.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import numpy as np
def explicit_fd(E,r,sigma,T,s_max,Nx,M,pay_off,u_m_inf,u_p_inf):
s_min = 0.00000001
#x = log_2(S/E)
xLeft = np.log(s_min/E)
xRight = np.log(s_max/E)
# tau = 1/2sigma^2(T-t)
tau_max = 0.5*(sigma**2)*T
dx = (xRight-xLeft)/Nx
dt = tau_max/M
a = dt/(dx**2) # page 140
print("a = ",a)
xgrid = np.linspace(xLeft,xRight,Nx)
k = r/(0.5*sigma**2) # page 136
# initial conditions
tau = 0.0
oldu = pay_off(xgrid,k)
newu = np.zeros((int(Nx)))
values = np.zeros((int(Nx)))
for m in range(1,int(M+1)):
tau = m*dt
# update endpoints
newu[0] = u_m_inf(xgrid[0],tau,k)
newu[-1] = u_p_inf(xgrid[-1],tau,k)
# update newu
newu[1:-1] = oldu[1:-1] + a*(oldu[0:-2] - 2*oldu[1:-1] + oldu[2:])
# prepare for new iteration
oldu = newu.copy()
values = oldu
return values,xgrid