微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有用于查找矢量化方程的梯度和 Hessian 的 R 函数或包?

如何解决是否有用于查找矢量化方程的梯度和 Hessian 的 R 函数或包?

例如,如果我想找到关于 x of 的梯度和 Hessian:

f = function(x,y,alpha,A,b){
  return((1/n)*(y-alpha*x)%*%(y-alpha*x) + (A%*%x-b)%*%(A%*%x-b))
}

解决方法

CRAN 包 Deriv 可以计算 R 函数的符号导数。
在下面的代码中,我删除了在发布的函数 return 中对 f 的调用。
函数 DDerivthis RPubs post 的复制粘贴,改为使用 Deriv 而不是不接受函数作为其第一个参数的基 D

library(Deriv)

DDeriv <- function(expr,name,order = 1){
  if(order < 1) stop("Order must be >= 1")
  if(order == 1) Deriv(expr,name)
  else DDeriv(Deriv(expr,name),order - 1)
}


f <- function(x,y,alpha,A,b){
  (1/n)*(y-alpha*x)%*%(y-alpha*x) + (A%*%x-b)%*%(A%*%x-b)
}

直接使用函数Deriv

Deriv(f,"x")
#function (x,b) 
#{
#    .e1 <- -alpha
#    .e3 <- A %*% x - b
#    .e5 <- y - alpha * x
#    (.e1 %*% .e5 + .e5 %*% .e1)/n + .e3 %*% A + A %*% .e3
#}

使用函数DDeriv

DDeriv(f,"x",1)
#function (x,b) 
#{
#    .e1 <- -alpha
#    .e3 <- A %*% x - b
#    .e5 <- y - alpha * x
#    (.e1 %*% .e5 + .e5 %*% .e1)/n + .e3 %*% A + A %*% .e3
#}

DDeriv(f,2)
#function (x,b) 
#{
#    .e1 <- -alpha
#    2 * (.e1 %*% .e1/n) + 2 * A %*% A
#}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。