积分错误:达到的最大细分数

Eug*_*kov 12 plot r numerical-integration

我试图绘制傅里叶积分,但我在积分时得到错误

X <- seq(-10, 10, by = 0.05)
f_fourier <- function(X) {
    Y <- sapply(X, function(x) {
        integrand <- function(l) {
            y <- (2 / pi) * cos(l * x) / (l^2 + 1)
        }
        integrate(integrand, lower = 0, upper = Inf)$value
    })
}
plot(X,f_fourier(X))
Run Code Online (Sandbox Code Playgroud)

错误:

maximum number of subdivisions reached
Run Code Online (Sandbox Code Playgroud)

我发现"cos(l*x)"会导致这个错误,但Wolfram给了我正常的结果.你能提出什么建议吗?

Mat*_*erg 15

在超过100个细分之前,算法没有收敛.您可以增加允许的细分数量,或增加容差:

更多允许细分:

f_fourier <- function(X) {
    Y <- sapply(X, function(x) {
        integrand <- function(l) {
            y <- (2 / pi) * cos(l * x) / (l^2 + 1)
        }
        integrate(integrand, lower = 0, upper = Inf, subdivisions=2000)$value
    })
}

plot(f_fourier(X))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

容忍度增加:

f_fourier <- function(X) {
    Y <- sapply(X, function(x) {
        integrand <- function(l) {
            y <- (2 / pi) * cos(l * x) / (l^2 + 1)
        }
        integrate(integrand, lower = 0, upper = Inf, rel.tol=.Machine$double.eps^.05)$value
    })
}

plot(f_fourier(X))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述