Kvôli tomu, že sme výpočet obmedzili na ohraničený interval, musíme k rovnici dodať okrajové podmienky v krajných bodoch. Krajné body zodpovedajú cenám akcie, ktoré sú veľmi malé, blízke nule (x=-L) a cenám, ktoré sú veľmi veľké a približujú sa k nekonečnu (x=L). Pre takéto limitné hodnoty použijeme aproximácie:
Prvý prístup (explicitná schéma) vyzerá byť jednoduchší. Máme začiatočnú podmienku. Z nej vypočítame hodnoty v nasledujúcej časovej vrstve. Tieto použijeme na výpočet riešenia v ďalšej časovej vrstve, atď. Na konvergenciu metódy je však potrebné splnenie podmienky na vzťah časového a priestorového kroku. Táto podmienka môže prakticky viesť k nevyhnutnosti zvoliť veľmi malý časový krok - kvôli konvergencii metódy, nie kvôli tomu, že by sme riešenie potrebovali v mnohých tak blízkych časových okamihoch.
V druhom prístupe (implicitná schéma) riešime na každej časovej vrstve sústavu lineárnych rovníc.
E <- 50 r <- 0.04 D <- 0.12 sigma <- 0.4
L <- 2a parametre delenia:
n <- 20 h <- L/n T <- 1 m <- 12 k <- T/m
alpha <- (r-D)/(sigma^2) - 0.5 beta <- (r+D)/2 + (sigma^2)/8 + ((r-D)^2)/(2*sigma^2)
phi <- function(tau) 0 psi <- function(tau) E*exp(alpha*L + beta*tau)*(exp(L - D*tau) - exp(-r*tau))a začiatočnú podmienku:
u0 <- function(x) E*exp(alpha*x)*pmax(0, exp(x)-1)
sol <- matrix(0, nrow=2*n + 1, ncol=m+1)a body delenia v čase a v priestore:
x <- seq(from=-L, by=h, to=L) tau <- seq(from=0, by=k, to=T)
a <- -0.5*(sigma^2)*k/(h^2) b <- 1 - 2*aPri výpočte prvej časovej vrstvy (teda hodnoty v čase k) máme nasledovnú pravú stranu:
rhs <- sol[c(2:(2*n)),1] rhs[1] <- rhs[1] - a*phi(k) rhs[2*n-1] <- rhs[2*n-1] - a*psi(k)
Môžete použiť funkciu:
gs <- function(a,b,rhs,v0,eps,N) { n.system <- length(v0) v <- v0 for (iter in 1:N) { v[1] <- (rhs[1] - a*v[2])/b for (i in 2:(n.system-1)) v[i] <- (rhs[i] - a*(v[i-1] + v[i+1]))/b v[n.system] <- (rhs[n.system] - a*v[n.system - 1])/b } gs <- v }
vOld <- v[1] vGS <- (rhs[1] - a*v[2])/b; v[1] <- omega*vGS + (1-omega)*vOld