1

我正在尝试使用光谱模拟来生成空间变量的无条件高斯实现。该变量具有协方差函数 c(h) = exp(-h/a),其中 a 是协方差函数的范围,h 是距离。第一步,我需要将协方差函数离散化为数组/矩阵。矩阵中的条目对应于空间中的物理位置(即矩阵索引对应于 x 和 y 坐标):

cov(i,j) = exp(-sqrt((i-64)^2 + (j-64)^2) / 20) for i,j = 1 to 128

我希望在 R 中生成一个矩阵,并用与数组索引相关的协方差函数填充它。作为 R 的初学者,我有点迷茫。

4

2 回答 2

2

将该表达式填充到函数中:

myfun <- function(i, j) {
  exp(-sqrt((i-64)^2 + (j-64)^2) / 20)
}

i, j然后制作可能组合的“矩阵” :

n <- 128
combos <- expand.grid(i=1:n, j=1:n)

然后用这两个向量调用你的函数:

matrix(myfun(combos$i, combos$j), nrow=n)

使用较小的数字:

> n <- 5
> combos <- expand.grid(i=1:n, j=1:n)
> matrix(myfun(combos$i, combos$j), nrow=n)
           [,1]       [,2]       [,3]       [,4]       [,5]
[1,] 0.01162296 0.01203954 0.01246747 0.01290681 0.01335761
[2,] 0.01203954 0.01247458 0.01292166 0.01338085 0.01385221
[3,] 0.01246747 0.01292166 0.01338860 0.01386840 0.01436113
[4,] 0.01290681 0.01338085 0.01386840 0.01436960 0.01488451
[5,] 0.01335761 0.01385221 0.01436113 0.01488451 0.01542247
> 
于 2012-06-20T21:48:43.043 回答
1

你也可以使用outer

f <- function(i, j) {
  exp(-sqrt((i-64)^2 + (j-64)^2) / 20)
}
n <- 5

outer(1:n, 1:n, f)
于 2012-06-21T04:30:30.053 回答