2012-02-10 664 views
3

给定一个向量t。如何填充矩阵,如布朗运动和协方差矩阵

t[1] t[1] t[1] ... t[1] 
t[1] t[2] t[2] ... t[2] 
t[1] t[2] t[3] ... t[3] 
... ... ... ... ... 
t[1] t[2] t[3] ... t[n] 

对应于时间t时布朗运动的协方差矩阵?

回答

3

这是一种方法。

t <- 11:15 
m <- vapply(seq_along(t), function(i) c(t[seq_len(i)], rep(t[i], length(t)-i)), numeric(length(t))) 
m 
#  [,1] [,2] [,3] [,4] [,5] 
#[1,] 11 11 11 11 11 
#[2,] 11 12 12 12 12 
#[3,] 11 12 13 13 13 
#[4,] 11 12 13 14 14 
#[5,] 11 12 13 14 15 

你可以使用sapply太 - 有点短,但也有点慢(你不指定什么函数返回):

m <- sapply(seq_along(t), function(i) c(t[seq_len(i)], rep(t[i], length(t)-i))) 
4

第(i,j)的系数的值是min(i,j):

m <- matrix(NA, nr=5, nc=5) # Empty matrix with the right size 
m <- pmin(col(m), row(m)) 
+0

看起来像这个解决方案比@ Tommy's更快一点。 – 2012-02-11 13:20:17

+0

@Vincent我试着将你的答案概括为一般向量t,如下:m < - pmin(t [col(m)],t [row(m)])'但是这给了我一个大小为nc * nr的向量,所以我再次应用了矩阵命令 – jmbarrios 2012-02-13 18:39:21

+1

那应该是 'pmin(col(t),row(t))', 如果你的矩阵真的叫做't'。 因为't'已经是转置功能,所以我将矩阵的名字从't'改为'm' 。 – 2012-02-13 22:40:30