R 二维数组中唯一相邻对的乘积求和
我的代码的第一部分生成一个20 x 20的矩阵,随机填充1和-1个元素。据我所知,这个部件工作得很好 接下来我要做的是找到所有唯一相邻元素对的乘积,并将它们相加。然后这个数字应该乘以'D'得到一个最终值。理论上,结果应该在0到800D之间 到目前为止,我得到的是一个函数,它首先创建一个新的22 x 22矩阵,这是原始矩阵,第一行重复为第22行,第20行也成为新的第1行。对第1列和第20列也执行相同的操作 当时的想法是,原始矩阵第20列中的数据将与第1列中的数据相邻,因此原始矩阵中的每个元素将有4个相邻元素R 二维数组中唯一相邻对的乘积求和,r,R,我的代码的第一部分生成一个20 x 20的矩阵,随机填充1和-1个元素。据我所知,这个部件工作得很好 接下来我要做的是找到所有唯一相邻元素对的乘积,并将它们相加。然后这个数字应该乘以'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])
n你忘了把上一笔加进去:E太好了,谢谢!
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)