【发布时间】:2021-11-07 20:45:48
【问题描述】:
我正在探索 autodiff,我想使用 Deriv 来计算函数 wrt 对向量的导数。我写
library(numDeriv)
library(Deriv)
h = function(x) c(1,2)%*%x
grad(h,c(1,2)) #ok
#[1] 1 2
dh=Deriv(h,x='x')
#Error in c(1, 2) %*% 1 : non-conformable arguments
dh(c(1,2))
有没有人有好的方法来做到这一点?
来自help(Deriv),似乎应该能够让参数成为一个向量
这是向量长度的副作用。例如。 in Deriv(~a+bx, c("a", "b")) 结果是 c(a = 1, b = x)。为了避免差异 a 和 b 分量的长度(当 x 是向量时),可以使用 可选参数 combine Deriv(~a+bx, c("a", "b"), combine="cbind") 这使得 cbind(a = 1, b = x) 产生一个两列矩阵,它是 可能是这里想要的结果。
我想避免将每个向量分量作为函数的不同参数。
例如上面的numDeriv 让我们可以轻松地得到一个导数 wrt 向量x
【问题讨论】:
-
问题不在于 Deriv,它不能将单个数字向量传递给矩阵乘法。即 h(1) 会给你你看到的错误,但 h(c(1,4)) 不会。
-
madness包对您有用吗...? -
@BenBolker - 谢谢 - 我已经研究了一下,但我想先检查
Deriv是否支持 autodiff wrt 向量,以及我是否只是犯了一个错误。也许我会朝那个方向走 -
@HenryHolm 谢谢 - 你能提供一个使用 Deriv 的例子吗?