簡體   English   中英

獲取R中的導數

[英]Get derivative in R

我正在嘗試采用表達式的派生形式:

x = read.csv("export.csv", header=F)$V1
f = expression(-7645/2* log(pi) - 1/2 * sum(log(w+a*x[1:7644]^2)) + (x[2:7645]^2/(w + a*x[1:7644]^2)),'a')
D(f,'a')

x只是一個整數向量,a和w是我試圖通過推導找到的變量。 但是,我得到了錯誤

“函數' [ '不在導數表中”

由於這是我第一次使用R,因此我現在一無所知。 我假設R在表達式內部的sum函數有問題嗎?


遵循建議后,我現在執行以下操作:

y <- x[1:7644]
z <- x[2:7645]

f = expression(-7645/2* log(pi) - 1/2 * sum(log(w+a*y^2)) + (z^2/(w + a*y^2)),'a')

派生這給我的錯誤是“和不在派生表中”。 如何確定表達式考慮y和z的每個值?


另一個更新:

y <- x[1:7644]
z <- x[2:7645]

f = expression(-7645/2* log(pi) - 1/2 * log(w+a*y^2) + (z^2/(w + a*y^2)))

d = D(f,'a')

uniroot(eval(d),c(0,1000))

我取消了“求和”功能,只輸入了y和z。 現在,有兩個問題:

a)我如何確定這仍然是預期的行為? b)Uniroot似乎不喜歡“ w”和“ a”,因為它們只是象征性的。 我將如何解決此問題? 我得到的錯誤是“找不到對象'w'”

這應該工作:

因為您有兩個要加f+g ,所以導數D(f+g) = D(f) + D(g) ,所以讓我們像這樣將兩者分開:

g = expression((z^2/(w + a*y^2)))
f = expression(- 1/2 * log(w+a*y^2))

看到從表達式f中刪除了sum() ,因為將乘法常數移到了sum() ,並且D(sum()) = sum(D()) 由於導數為0,因此也刪除了第一常數。

所以:

D(sum(-7645/2* log(pi) - 1/2 * log(w+a*y^2)) + (z^2/(w + a*y^2)) = D( constant + sum(f) + g ) = sum(D(f)) + D(g)

哪個應該給:

sum(-(1/2 * (y^2/(w + a * y^2)))) + -(z^2 * y^2/(w + a * y^2)^2)

表達式只接受一個expr輸入,而不是一個向量,對它進行向量化已超出了能力。 您也可以使用for循環執行此操作:

foo <- c("1+2","3+4","5*6","7/8") 
result <- numeric(length(foo))
foo <- parse(text=foo)
for(i in seq_along(foo))
    result[i] <- eval(foo[[i]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM