在R中求导数

bogh5gae  于 2023-03-10  发布在  其他
关注(0)|答案(2)|浏览(276)

我试着对一个表达式求导:

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是一个简单的整数向量,aw是我试图通过推导找到的变量。

"Function '`[`' is not in Table of Derivatives"

由于这是我第一次使用R,我现在不知道该怎么做,我假设R在表达式中的和函数有问题?
在遵循了这个建议之后,我现在做了以下事情:

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

推导这个给我带来了错误“和不在导数表中”。我如何确保表达式考虑了yz的每个值?
另一项更新:

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

我已经删除了“sum”函数,只输入了y和z。现在,有两个问题:
a)如何确定这仍然是预期行为?
B)Uniroot似乎不喜欢“w”和“a”,因为它们只是符号。我该如何解决这个问题?我得到的错误是“object 'w' not found”

izj3ouym

izj3ouym1#

这应该行得通:
因为你有两项相加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)
s2j5cfk0

s2j5cfk02#

expression只接受一个expr输入,而不是一个向量,并且它超出了r的能力来向量化它。你也可以使用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]])

相关问题