我试着对一个表达式求导:
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在表达式中的和函数有问题?
在遵循了这个建议之后,我现在做了以下事情:
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。现在,有两个问题:
a)如何确定这仍然是预期行为?
B)Uniroot似乎不喜欢“w”和“a”,因为它们只是符号。我该如何解决这个问题?我得到的错误是“object 'w' not found”
2条答案
按热度按时间izj3ouym1#
这应该行得通:
因为你有两项相加
f+g
,导数D(f+g) = D(f) + D(g)
,所以让我们这样分开:从表达式f中删除了
sum()
,因为乘法常数被移到了sum()
和D(sum()) = sum(D())
中,并且删除了第一个常数,因为导数为0。因此:
其中应给予:
s2j5cfk02#
expression只接受一个expr输入,而不是一个向量,并且它超出了r的能力来向量化它。你也可以使用for循环来完成这个任务: