r - 是否有用于查找矢量化方程的梯度和 Hessian 的 R 函数或包?
问题描述
例如,如果我想找到关于 x 的梯度和 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
。
函数DDeriv
是来自此 RPubs 帖子的复制和粘贴,更改为使用而不是不接受函数作为其第一个参数Deriv
的 base 。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), 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, y, alpha, A, 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, y, alpha, A, b)
#{
# .e1 <- -alpha
# .e3 <- A %*% x - b
# .e5 <- y - alpha * x
# (.e1 %*% .e5 + .e5 %*% .e1)/n + .e3 %*% A + A %*% .e3
#}
DDeriv(f, "x", 2)
#function (x, y, alpha, A, b)
#{
# .e1 <- -alpha
# 2 * (.e1 %*% .e1/n) + 2 * A %*% A
#}
推荐阅读
- php - WooCoomerce:单击条款复选框时打开弹出窗口
- python-3.x - 我在 pip 中不断收到环境错误,如何解决?
- spring-boot - (jar 冲突)java.lang.VerifyError:堆栈映射与异常处理程序中的不匹配
- r - 使用 geom_tiles 对列进行排序
- function - 如何通过 Powershell 删除程序?
- javascript - 使用 Nodejs Express Multer 将图像从 React Native 上传到 MongoDB Atlas
- c - 操作系统线程是否在 go-routine 执行的 io 上被阻塞?
- c# - 如果它们位于不同的 Prism 区域中,如何使用 RoutedCommands 定位未聚焦的 DataGrid?
- python - 无序逃逸——Google Foobar 2020 未通过测试用例
- flutter - 为什么 SizedBox 不限制 Text 小部件的宽度?