r - 为 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`?
解决方案
原因不是你的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
要求对其被积函数进行矢量化。(我对绝对错误有点怀疑。)
您也可以尝试处理无限集成域并且不需要对函数进行矢量化quadinf
的pracma包。
f = function(x)
prod(dnorm(c(250, 265, 259), mean = x + 258, sd = 2))
pracma::quadinf(f, -Inf, Inf)$Q
## [1] 1.487658e-08
尽管如此,它仍需要能够“看到”峰值。
推荐阅读
- image - 在反应导航的抽屉导航器菜单上将图像设置为背景
- ios - 在 UserControl 中使用自定义字体使我的字体变粗
- python - 当底层pdf不完全已知时,有没有办法制作平滑的内核密度图?
- angular - 简化从简单 json 返回多个值的 rxjs 代码
- java - Android Studio如何为单次和双次后退按钮执行不同的任务
- java - 基因组处理服务器 - 方法返回 0,我不明白为什么(java)
- time - 如果我知道算术复杂度,我可以计算程序运行所需的时间吗?
- wpf - 如何为 WPF .Net Core 3 应用程序创建 MSI?
- google-cloud-platform - GCP:限制和配额
- java - 为什么我在使用方法更改变量值时无法更改 onCreate 中的变量值?