我正在尝试编写一个函数,该函数将采用坐标矩阵p和正整数k,并返回相对于第k个坐标的E的偏导数(稍后我将给出)。 / p>
我正在尝试模拟m分子配置的能量。每个分子j具有位置coordinate http://rogercortesi.com/eqn/tempimagedir/eqn5356.png。 r http://rogercortesi.com/eqn/tempimagedir/eqn1000.png是分子i和j之间的距离:distance http://rogercortesi.com/eqn/tempimagedir/eqn6737.png
U http://rogercortesi.com/eqn/tempimagedir/eqn8027.png
sum http://rogercortesi.com/eqn/tempimagedir/eqn4293.png
我发现E相对于x1 http://rogercortesi.com/eqn/tempimagedir/eqn6885.png的偏导数是sum2 http://rogercortesi.com/eqn/tempimagedir/eqn2003.png,它可以推广到所有其他变量的偏导数。
p是mx3矩阵,其中每行包含一个坐标。我们想要找到第k个坐标的偏导数,其中k http://rogercortesi.com/eqn/tempimagedir/eqn7008.png
我相信下面的函数应该能够取p和k并计算E相对于第k个坐标的偏导数。
partial <- function(p,k){
m <- dim(p)
m <- m[1]
m <- as.numeric(m)
d1 <- k%/%3+1
d2 <- ifelse (k%%3 == 0, 3, k%%3)
distance = function(a,b){
r <- sqrt((p[a,1]-p[b,1])^2+(p[a,2]-p[b,2])^2+(p[a,3]-p[b,3])^2)
return(r)
}
sum <- 0
for(j in 1:m){
sum <- sum + (p[d1,d2]-p[j,d2])*(distance(d1,j)^(-8)-distance(d1,j)^(-14))
}
sum <- 12*sum
return(sum)
}
但是,当我使用以下内容测试该功能时:
coordinates <- matrix(c(0,0,0,1,0,0,1,1,0),nrow=3,byrow=T)
partial (coordinates,7)
我只是得到“NaN”,我不相信应该是这样的。我究竟做错了什么?我很感激任何指导。提前谢谢!
答案 0 :(得分:1)
在循环中,当j = 3 = d1时,距离(d1,j)为零。