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

时间:2014-06-01 16:56:16

标签: r plot 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))

错误:

maximum number of subdivisions reached

我发现&#34; cos(l * x)&#34;导致此错误,但Wolfram给了我正常的结果。 你能提出一些建议吗?

1 个答案:

答案 0 :(得分:14)

在超过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))

enter image description here

增加容忍度:

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))

enter image description here