我正在尝试绘制傅立叶积分,但在积分
时出错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给了我正常的结果。 你能提出一些建议吗?
答案 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))
增加容忍度:
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))