将二维阵列中唯一相邻对的乘积相加

时间:2018-03-11 10:47:32

标签: r

我的代码的第一部分生成一个随机填充1和-1元素的20 x 20矩阵。据我所知,这部分工作正常。

接下来我要做的是找到所有唯一相邻元素对的乘积并将它们加在一起。那么这个数字应该乘以' D'给出最终价值。从理论上讲,结果应介于0到800D之间。

到目前为止我所拥有的是一个函数,它首先创建一个新的22 x 22矩阵,这是第一行重复为第22行的原始矩阵,第20行也成为新的第1行。同样的事情是用第1和第20列。

有人认为原始矩阵第20列的数据与第1列的数据相邻,因此原始矩阵中的每个元素都有4个邻居。

n <- 20

spin <- sample(c(-1, 1), n^2, replace = TRUE)

S <- array(spin, dim = c(n, n))

energy <- function(S, D = 1){

S1 <- S

S1 <- rbind(S[n,], S1, S[1,])

S1 <- cbind(S1[,n], S1, S1[,1])

接下来,我试图找到原始矩阵的每个元素的邻居产品,将它们加在一起,然后乘以D.(i = 2到i = 21,j = 2到j = 21是原始矩阵的元素

  for(i in 2:(n+1)) {
    for(j in 2:(n+1)) {
      E <- D * (sum((S1[i, j] * S1[(i-1), j]), (S1[i, j] * S1[i, (j-1)]),  
             (S1[i, j] * S1[i, (j+1)]), (S1[i, j] * S1[(i+1), j])))
}
}
return(E)
}

energy(S)

我得出的是-4到4之间的值,所以我假设只找到一个元素的邻居产品,而不是依次找到每个元素,然后将每个元素的结果加在一起。谁能告诉我为什么会这样?

此外,如果此代码确实有效,它会将每个相邻对计数两次。 (即它会找到x b和b x a)。我可以将最终结果除以2来找到唯一的邻居对的值吗?

由于

1 个答案:

答案 0 :(得分:0)

我正在做一个类似的问题,我想知道什么是digEmAll意味着&#34;你忘了添加到前一个总和:E&lt; - E + D(总和...... *&#34 ;。

提前致谢