當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。