我想寫一個函數,它將採用一個座標矩陣p和一個正整數k,並返回E的偏導數(我將在稍後給出)關於第k個座標。排除函數來計算第k個座標的導數
我想模擬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
我發現,電子的相對於偏導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)
我只是得到「南」,我不認爲應該是這樣的。我究竟做錯了什麼?我會很感激任何指導。先謝謝你!
我發現保存'p = c(0,0,0,1,0,0,1,1,0)'和'k = 7'是有幫助的,然後遍歷函數行中的代碼線。通過這個簡單的調試,你會發現問題在於'distance(d1,j)^( - 8)'中的一個調用,特別是當Brad在他的答案中指出距離爲零時。 – kdauria