当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R numericDeriv 用数值方法评估导数


R语言 numericDeriv 位于 stats 包(package)。

说明

numericDeriv 对表达式的梯度进行数值计算。

用法

numericDeriv(expr, theta, rho = parent.frame(), dir = 1,
             eps = .Machine$double.eps ^ (1/if(central) 3 else 2), central = FALSE)

参数

expr

expressioncall需区分。应计算为 numeric 向量。

theta

character expr 中使用的数值变量名称向量。

rho

environment 包含评估 expr 所需的所有变量。

dir

方向的数值向量,通常使用 -1, 1 中的值用于有限差分;将被回收到 theta 的长度。

eps

正数,用作近似数值导数 或中心版本的单位步长 ,请参阅 central

central

逻辑指示是否应计算中心划分差异,即 。这些通常更准确,但需要对 进行更多评估。

细节

这是 C 函数 numeric_deriv 的前端,在编写 R 扩展中对此进行了说明。

数值变量的类型必须是 double 而不是 integer

eval(expr, envir = rho) 的值加上矩阵属性 "gradient" 。该矩阵的列是值相对于 theta 中列出的变量的导数。

例子

myenv <- new.env()
myenv$mean <- 0.
myenv$sd   <- 1.
myenv$x    <- seq(-3., 3., length.out = 31)
nD <- numericDeriv(quote(pnorm(x, mean, sd)), c("mean", "sd"), myenv)
str(nD)

## Visualize :
require(graphics)
matplot(myenv$x, cbind(c(nD), attr(nD, "gradient")), type="l")
abline(h=0, lty=3)
## "gradient" is close to the true derivatives, you don't see any diff.:
curve( - dnorm(x), col=2, lty=3, lwd=2, add=TRUE)
curve(-x*dnorm(x), col=3, lty=3, lwd=2, add=TRUE)
##
## IGNORE_RDIFF_BEGIN
# shows 1.609e-8 on most platforms
all.equal(attr(nD,"gradient"),
          with(myenv, cbind(-dnorm(x), -x*dnorm(x))))
## IGNORE_RDIFF_END

作者

Saikat DebRoy saikat@stat.wisc.edu; tweaks and eps, central options by R Core Team.

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Evaluate Derivatives Numerically。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。