获得R中的衍生物

时间:2016-11-15 13:09:20

标签: r math derivative

我试图采用表达式的衍生物:

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')

得出这个给了我错误&#34;总和不在衍生物表中#34;。如何确保表达式考虑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))

我已经淘汰了&#34;总和&#34;功能,刚输入y和z。现在,2个问题:

a)我怎样才能确定这仍然是预期的行为? b)Uniroot似乎并不喜欢&#34; w&#34;和&#34; a&#34;因为它们只是象征性的。我该如何解决这个问题呢?我得到的错误是&#34;对象&#39; w&#39;找不到&#34;

2 个答案:

答案 0 :(得分:1)

这应该有效:

由于您添加了两个词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))

看到sum()已从表达式f中删除,因为乘法常量已移至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)

答案 1 :(得分:1)

表达式只接受一个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]])