R 计算第k坐标导数的故障排除功能
我试图写一个函数,它将取一个由坐标p和一个正整数k组成的矩阵,并返回E(稍后我将给出)对第k个坐标的偏导数R 计算第k坐标导数的故障排除功能,r,function,R,Function,我试图写一个函数,它将取一个由坐标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
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)
}
我试图模拟m分子构型的能量。每个分子j都有位置(来源:)
.
(来源:)
是分子i和j之间的距离:
(来源:)
(来源:)
(来源:) 我发现E关于
(来源:)
是
(来源:)
,可以推广到所有其他变量的偏导数 p是一个mx3矩阵,其中每行包含一个坐标。我们要求第k坐标的偏导数,其中
(来源:) 我相信下面的函数应该能够取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)
}
partial在循环中,当j=3=d1时,距离(d1,j)为零。刚刚发现了相同的东西。再加上这个,负指数的0被计算为Inf
(无穷大)。然后循环执行0*Inf
,这将为您提供NaN
。我发现保存p=c(0,0,0,1,0,0,1,1,0)
和k=7
,然后逐行遍历函数中的代码是有帮助的。通过这个简单的调试,您会发现问题在于对距离(d1,j)^(-8)
的调用之一,特别是当距离为零时,正如Brad在回答中指出的那样。