我正在尝试求表达式的导数:
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
是我试图通过推导找到的变量。但是,我收到错误
"Function '`[`' is not in Table of Derivatives"
由于这是我第一次使用 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))
我删除了“sum”函数,只输入 y 和 z。现在,有 2 个问题:
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))
看到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)
关于r - 在 R 中获取导数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40610642/