У меня есть некоторые данные измерений, отобранные с течением времени, и я хочу интегрировать их, набор тестовых данных содержит ~ 100000 выборок (~ 100 с, 1000 Гц) данных.
Мой первый подход был (table
содержит метку времени (0..100 с) и значение каждой точки данных (обе double
с))
# 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)
, но каким-то образом интеграция выполняется вечно (как бесконечный цикл и съедаетодин процессор полностью).Поэтому я посмотрел на значения:
> 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
, это работает (время вычисления <3 с), но следующая оценка (должна быть такой же) </p>
> integrate(data_fun, 0, 99, subdivisions=100000)$value
тоже никогда не заканчивается.И даже этот (который на самом деле является СУБинтегралом того, что работает выше) НЕ завершается:
> integrate(data_fun, 0, 89, subdivisions=100000)$value
Мне кажется немного случайным, когда он работает, а когда нет.Я делаю что-то не так или я могу как-то улучшить процесс?
Спасибо!
(СОВЕТ: точки выборки не обязательно распределены одинаково )