4

たとえば、次のようなラティスがあるとします。

          133.1
         /
       121
      /  \
    110   108.9
   /  \  / 
 100   99
   \  /  \
    90    89.1
      \  /
       81
         \
          72.9

ラティスは 100 から始まり、係数 1.1 で上昇し、係数 0.9 で下降します。この格子には、上下する 3 つの周期があります。このマトリックスがより多くの期間で満たされる可能性があることは明らかです。

行列形式の格子は次のようになります。

     [,1] [,2] [,3]  [,4]
[1,]  100  110  121 133.1
[2,]   NA   90   99 108.9
[3,]   NA   NA   81  89.1
[4,]   NA   NA   NA  72.9

私は R で作業しています。格子行列を生成するコードは次のとおりです。

#Parameters
S0 <- 100 #price at t0
u <- 1.1 #up factor
d <- 0.9 #down factor
n <- 3 #number of periods

#Matrix for the prices
prices <- matrix(data=NA, nrow=(n+1), ncol=(n+1))
prices[1,1] <- S0

#Fill the matrix
for(column in 2:(n+1)){

  for(row in 1:(column-1)){

    prices[row,column] <- u*prices[row,column-1];
  }

  prices[column,column] <- d*prices[column-1,column-1];
}

格子を通るすべての可能なパスを含む行列を生成するコードを作成したいと思います。この例では、次のようになります。

     [,1] [,2] [,3]  [,4]
[1,]  100  110  121 133.1
[2,]  100  110  121 108.9
[3,]  100  110   99 108.9
[4,]  100  110   99  89.1
[5,]  100   90   99 108.9
[6,]  100   90   99  89.1
[7,]  100   90   81  89.1
[8,]  100   90   81  72.9

私はこのコードに何時間も苦労してきたので、どんな助けも大歓迎です! 前もって感謝します!:)

4

3 に答える 3

2

同様に、次のようなこともできます。

next.period<-function(x) rep(x,2)*rep(c(u,d),each=length(x))

next.matrix<-function(x) {
  next.period.col<-next.period(x[,ncol(x)])
  cbind(rbind(x,x),next.period.col)
}

lattice.paths<-t(S0)
for (i in 1:(n-1)) lattice.paths<-next.matrix(lattice.paths)

         next.period.col next.period.col
[1,] 100             110             121
[2,] 100              90              99
[3,] 100             110              99
[4,] 100              90              81
于 2013-10-06T16:10:08.747 に答える