我正在尝试使用光谱模拟来生成空间变量的无条件高斯实现。该变量具有协方差函数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的初学者,我有点失落。
答案 0 :(得分: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
>
答案 1 :(得分:1)
您也可以使用outer
:
f <- function(i, j) {
exp(-sqrt((i-64)^2 + (j-64)^2) / 20)
}
n <- 5
outer(1:n, 1:n, f)