【发布时间】:2011-09-27 00:38:32
【问题描述】:
我有一些随时间采样的测量数据并希望对其进行整合,test dataset 包含约 100000 个样本(约 100 秒,1000 赫兹)的数据。
我的第一种方法是(table 包含时间戳(0..100s)和每个数据点的值(两者都是doubles))
# test dataset available (gzipped, 720k) here: http://tux4u.de/so.rtab.gz
table <- read.table("/tmp/so.rtab", header=TRUE)
time <- table$t
data <- table$val
start <- min(time)
stop <- max(time)
sampling_rate <- 1000
divs <- (max(time) - min(time)) * sampling_rate
data_fun <- approxfun(time, data, method="linear", 0, 0)
result <- integrate(data_fun, start, stop, subdivisions=divs)
但不知何故,集成永远运行(就像一个无限循环并完全吃掉一个 CPU)。所以我查看了这些值:
> start
[1] 0
> stop
[1] 98.99908
> divs
[1] 98999.08
奇怪的是,当我评估时
> integrate(data_fun, 0, 98, subdivisions=100000)$value + integrate(data_fun, 98, 99)$value
[1] 2.640055
它可以工作(计算时间
> integrate(data_fun, 0, 99, subdivisions=100000)$value
也永远不会终止。甚至这个(实际上是上面工作的一个 SUBintegral)也不会终止:
> integrate(data_fun, 0, 89, subdivisions=100000)$value
对我来说,当它起作用和不起作用时,它似乎有点随机。我做错了什么还是我可以以某种方式改进流程?
谢谢!
(提示:采样点不一定均匀分布)
【问题讨论】:
-
integrate() 努力查看函数在何处归零。以前曾报道过不稳定的结果。在详细信息部分中您阅读:“像所有数值积分例程一样,这些例程在有限的点集上评估函数。如果函数在几乎所有范围内近似恒定(特别是零),则结果和错误可能估计可能严重错误。”
标签: r integration interpolation measurement