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


R integrate 一维函数的积分


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

说明

一个变量的函数在有限或无限区间内的自适应求积。

用法

integrate(f, lower, upper, ..., subdivisions = 100L,
          rel.tol = .Machine$double.eps^0.25, abs.tol = rel.tol,
          stop.on.error = TRUE, keep.xy = FALSE, aux = NULL)

参数

f

一个R函数采用数字第一个参数并返回相同长度的数字向量。返回非有限元将产生错误。

lower, upper

整合的局限性。可以是无限的。

...

要传递给 f 的附加参数。

subdivisions

子区间的最大数量。

rel.tol

要求的相对精度。

abs.tol

要求绝对准确。

stop.on.error

合乎逻辑的。如果为 true(默认值),则错误会停止该函数。如果为 false,某些错误将在 message 组件中给出带有警告的结果。

keep.xy

没用过。为了与 S 兼容。

aux

没用过。为了与 S 兼容。

细节

请注意,... 之后的参数必须完全匹配。

如果一个或两个极限都是无限的,则无限范围将映射到有限区间。

对于有限区间,全局自适应区间细分与Wynn的Epsilon算法外推结合使用,基本步骤是Gauss-Kronrod求积。

如果 abs.tol <= 0rel.tol 不能小于 max(50*.Machine$double.eps, 0.5e-28)

注意C源代码中的注释‘<R>/src/appl/integrate.c’ 提供更多详细信息,尤其是失败原因(内部错误代码ier >= 1)。

R版本 3.2.x,第一个条目lowerupper已使用,而如果它们的长度不是一,则现在会发出错误信号。

带有组件的类 "integrate" 的列表

value

积分的最终估计。

abs.error

绝对误差模的估计。

subdivisions

细分过程中产生的子区间的数量。

message

"OK" 或给出错误消息的字符串。

call

匹配的调用。

注意

与所有数值积分例程一样,这些例程在有限的点集上评估函数。如果函数在几乎所有范围内近似恒定(特别是零),则结果和误差估计可能会严重错误。

当在无限间隔上积分时,明确地这样做,而不是仅仅使用一个大数作为端点。这增加了获得正确答案的机会 - 任何在无限区间内积分有限的函数在该区间的大部分时间内都必须接近于零。

为了使有限点集处的值公平地反映函数在其他地方的行为,该函数需要是well-behaved,例如可微分,除了少量的跳跃或可积奇点。

f 必须接受输入向量并在这些点生成函数评估向量。 Vectorize 函数可能有助于将 f 转换为这种形式。

例子

integrate(dnorm, -1.96, 1.96)
integrate(dnorm, -Inf, Inf)

## a slowly-convergent integral
integrand <- function(x) {1/((x+1)*sqrt(x))}
integrate(integrand, lower = 0, upper = Inf)

## don't do this if you really want the integral from 0 to Inf
integrate(integrand, lower = 0, upper = 10)
integrate(integrand, lower = 0, upper = 100000)
integrate(integrand, lower = 0, upper = 1000000, stop.on.error = FALSE)

## some functions do not handle vector input properly
f <- function(x) 2.0
try(integrate(f, 0, 1))
integrate(Vectorize(f), 0, 1)  ## correct
integrate(function(x) rep(2.0, length(x)), 0, 1)  ## correct

## integrate can fail if misused
integrate(dnorm, 0, 2)
integrate(dnorm, 0, 20)
integrate(dnorm, 0, 200)
integrate(dnorm, 0, 2000)
integrate(dnorm, 0, 20000) ## fails on many systems
integrate(dnorm, 0, Inf)   ## works

integrate(dnorm, 0:1, 20) #-> error!
## "silently" gave  integrate(dnorm, 0, 20)  in earlier versions of R

来源

基于 R. Piessens 和 E. deDoncker-Kapenga 的 QUADPACK 例程 dqagsdqagi,可从 Netlib 获取。

参考

R. Piessens, E. deDoncker-Kapenga, C. Uberhuber, D. Kahaner (1983) Quadpack: a Subroutine Package for Automatic Integration; Springer Verlag.

相关用法


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