在具有3个边界条件的二维阵列中迭代有限差分格式

dun*_*nno 6 arrays for-loop r numerical-methods pde

在完成本科毕业论文的中间步骤中,我试图通过显式有限差分方案来解决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]
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经将时间和股票价格离散化,以便用户可以指定所需的网格点数量(分别产生"长度(t)"和"长度(S)"节点).因为我指定了矩阵R的3个外边缘(在S_max和S_0之间的时间跨越R的列;在成熟时的初始选项值上的1,R的最后一列),我迭代列的长度减1并且行的长度减去2.
(请参阅图表链接以获得进一步说明)

链接到BC图像,位于页面底部

当我运行模型时,边界条件被正确地制定,但是我不能再及时移动了...对我(可能是新手错误填充)代码的任何指导都将非常感激.如果我还可以添加任何内容(代码或说明)以澄清,请告诉我.

谢谢,

可靠的人