卒業論文を完成させるための中間段階として、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]
}
}
ユーザーが必要な数のメッシュ ポイントを指定できるように、時間と株価を離散化しました (それぞれ "length(t)" ノードと "length(S)" ノードになります)。行列 R の 3 つの外側エッジ (R の列に対して S_max と S_0 で 2 時間にわたって指定し、R の最後の列である満期時の初期オプション値に対して 1) を指定しているため、列の長さから 1 を引いた値と行の長さから 2 を引いたもの
(詳細については、図へのリンクを参照してください)
モデルを実行すると、境界条件が正しく制定されますが、それ以上前に戻ることはできません...私の(おそらく初心者の間違いでいっぱいの)コードに関するガイダンスをいただければ幸いです。明確にするために追加できるもの (コードまたは説明) があれば教えてください。
ありがとう、
ジェイク