首页 > 解决方案 > 为 R 中的曲线积分返回 0

问题描述

我想知道为什么integrate在我下面显示的曲线的下面代码中正在返回0

我猜它与 有什么关系Vectorize,但有解决办法吗?

L = Vectorize(function(x) prod(dnorm(c(250, 265, 259), mean = x, sd = 2)))

curve(L, 252, 263)

integrate(L, -Inf, Inf)[[1]] ## why gives '0' ## is it due to `Vectorize`? 

在此处输入图像描述

标签: rfunctionintegrate

解决方案


原因不是你的L函数值太小。您在一个很大的范围内-Inf进行积分,Inf这使得数值积分程序很难真正“看到”积分域中的这个峰值。

integrate如果您将其移至该峰,则该峰将被识别,0因为该过程将确定地在那里查看。

L = Vectorize(function(x) prod(dnorm(c(250, 265, 259),
              mean = x + 258, sd = 2)))
# curve(L, -10, 10)

integrate(L, -Inf, Inf)
## 1.487655e-08 with absolute error < 1.1e-10

这与Vectorize. 并integrate要求对其被积函数进行矢量化。(我对绝对错误有点怀疑。)

您也可以尝试处理无限集成域并且不需要对函数进行矢量化quadinfpracma包。

f = function(x)
        prod(dnorm(c(250, 265, 259), mean = x + 258, sd = 2))
pracma::quadinf(f, -Inf, Inf)$Q
## [1] 1.487658e-08

尽管如此,它仍需要能够“看到”峰值。


推荐阅读