在完成本科论文的中间步骤中,我试图通过显式有限差分方案来解决 R 中的 Black-Scholes PDE。到目前为止,我一直对同时向后迭代(沿着时间离散化)和沿着股票价格离散化感到困惑。我已经为欧式看涨期权实施了边界条件,并试图根据Phil Goddard对模型的描述来解决我的倒退问题。
R <- matrix(NA, ncol=length(t), nrow=length(S))
# Value at Maturity:
R[,length(t)] <- Vold <- pmax(S - K,0)
# Value at S = S_max; V = fwd
R[length(S),] <- V_max <- S_max - K * exp(-r_yr * (t_T - t))
# Value at S = S_0; V = 0
R[1,] = V_min <- t - t
# Run Model
# -----------------------------------------------------------------------------------------
# Define Coefficient-Functions a_j, b_j, and c_j
a_ <- function(j){
a_j <- (1/2) * dt * (r*j - sigma^2 * j^2)
return(a_j)
}
b_ <- function(j){
b_j <- 1 + dt * (sigma^2 * j^2 + r)
return(b_j)
}
c_ <- function(j){
c_j <- -(1/2) * dt * (r*j + sigma^2 * j^2)
return(c_j)
}
# Move backward in time stepping on each stock price within the BCs S = S_0, S = S_max
for (i in length(t):2){
for (j in (length(S)-1):2){
R[,(length(i)-1)][j] <- b_(j) * R[,length(i)][j] + c_(j) * R[,length(i)][j+1] +
a_(j) * R[,length(i)][j-1]
}
}
我已经离散化了时间和股票价格,以便用户可以指定所需的网格点数(分别产生“长度(t)”和“长度(S)”节点)。由于我指定了矩阵 R 的 3 个外边缘(2 个跨越时间在 S_max 和 S_0 跨越 R 的列;1 跨越初始期权价值在到期时,R 的最后一列),我迭代列的长度减去 1 和行的长度减去 2。
(请参阅图表链接以获取更多说明)
当我运行模型时,边界条件已正确制定,但我无法及时回到过去……任何关于我(可能是新手错误填充)代码的指导将不胜感激。如果我可以添加任何进一步的内容(代码或描述)来澄清,请告诉我。
谢谢,
杰克