2012-02-10 668 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