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


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