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)

次に、これらの 2 つのベクトルを使用して関数を呼び出します。

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 に答える