2012-06-20 2 views
1

Я экспериментирую со спектральным моделированием для создания безусловных гауссовских реализаций пространственной переменной. Переменная имеет ковариационную функцию c (h) = exp (-h/a), где a - диапазон ковариационной функции, h - расстояние. На первом этапе мне нужно дискретизировать функцию ковариации в массив/матрицу. Записи в матрице соответствуют физическим месту в пространстве (т.е. индексы матрицы соответствуют координатам х и у):R: Заполните матрицу ковариационной функцией

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

Я ищу, чтобы создать матрицу в R и заполнить его с ковариационной функцией, связанной к индексы массива. Будучи новичком с R, я немного теряюсь.

+0

'varcov.spatial' в пакете' geoR'. – mnel

ответ

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 
> 
+0

Спасибо. И как я могу получить доступ к записям в матрице? Например, если я хотел распечатать cov (3,2)? –

+0

назначить вывод последней команды новой переменной. 'output <- matrix (...)'. то вы можете получить доступ, как и следовало ожидать. 'output [3,2]' – Justin

+0

Еще раз спасибо ... Вот еще вопрос: Как получилось, когда я делаю nrow (covmat), я получаю 16384 и ncol (covmat) = 2? Я должен иметь матрицу размером 128 x 128. –

1

Вы также можете использовать outer:

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

outer(1:n, 1:n, f) 
Смежные вопросы