为简化问题,我将在此处使用玩具示例。我想导出多项式函数的梯度和Hessian,如 库(pracma)
dummy <- function(x) {
z <- x[1]; y <- x[2]
rez <- (z^2)*(y^3)+3
rez
}
grad(dummy, c(1,2))
hessian(dummy, c(1,2))
M问题是有没有一种有效的方法,所以我可以从dummy
中的不同常数项推导出渐变和Hessian?例如,来自(z^2)*(y^3)+a
z=1
和y=2
的{{1}}的渐变和Hessians,其中a=[0.01,3]
。
谢谢!
答案 0 :(得分:3)
pracma::hessian
和pracma::grad
都将...
作为&#34;变量传递给f
&#34;。如果您希望a
成为变量,您只需要将dummy
函数作为参数:
dummy <- function(x, a) {
z <- x[1]; y <- x[2]
rez <- (z^2)*(y^3)+a
rez
}
grad(dummy, c(1,2), a = 0.01)
# [1] 16 12
hessian(dummy, c(1,2), a = 3)
# [,1] [,2]
# [1,] 16 24
# [2,] 24 12
sapply(seq(0.01, 3, length.out = 10), function(a) grad(dummy, c(1, 2), a = a))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 16 16 16 16 16 16 16 16 16 16
# [2,] 12 12 12 12 12 12 12 12 12 12
当然结果都是一样的,你改变一个常数,然后取衍生物;任何常数的导数都是0.但是这个想法会推广到更有趣的案例。