我的问题主要是语法问题,这是由我模糊的编程能力引起的。
我已经实现了能量函数:
NRG <- function(y, x, h, beta, eta){
y2 <- addmargins(y, FUN=function(y) 1)
neigh <- matrix(nrow=nrow(y), ncol=ncol(y))
for (i in 1:nrow(y)) {
for (j in 1:ncol(y)) {
neigh[i,j] <- sum(prod(y[i,j], y2[i-1, j]),+ prod(y[i,j], y2[i, j-1]) +
prod(y[i,j], y2[i+1, j]) + prod(y[i,j], y2[i, j+1]))
}
}
E <- h * sum(y) - beta * sum(neigh) - eta * sum(y*x)
return(E)
}
然后我想使用ICM技术找到能量最低的配置。
我的数据= y我想要迭代的是一个尺寸为300x300的矩阵,每个值都是-1或+1。 x最初是y的副本。 我最初的方法是创建一个矩阵作为副本,每个值乘以-1 = rv_y。然后我会迭代我的数据的每个值,并将x中的每个值替换为rv_y的值,如果它在我的功能NRG中给出一个较低的值:
ICM <- function(y, x, h, beta, eta){
rv_y <- y*-1
for (i in 1:y){
if (NRG(y, x, h, beta, eta) > NRG(rv_y, x, h, beta, eta)) {
x[i] <- x[i*-1]
}
}
return(x)
}
我是在正确的轨道上还是我的方法错了?