Я работаю с функцией, которая зависит от квадратичной интерполяции B-сплайна, предварительно оцененной функцией cobs
в том же пакете R
. Расчетные узлы и соответствующие коэффициенты приведены в коде. Далее мне нужен интеграл этой функции от 0 до некоторого значения, например 0,6 или 0,7. Поскольку моя функция строго положительна, значение интеграла должно увеличиваться, если увеличивается верхняя граница интеграла. Однако для некоторых значений это не так, как показано при использовании 0,6 и 0,7.
library(cobs)
b <- 0.6724027
xi1 <- 0.002541667
xi2 <- 2.509625
knots <- c(5.000010e-06, 8.700000e-05, 3.420000e-04, 1.344000e-03, 5.292000e-03, 2.082900e-02, 8.198800e-02, 3.227180e-01, 1.270272e+00, 5.000005e+00)
coef <- c(2.509493, 2.508141, 2.466733, 2.378368, 2.239769, 2.063977, 1.874705, 1.601780, 1.288163, 1.262683, 1.432729)
fn <- function(x) {
z <- (2 - b) * (cobs:::.splValue(2, knots, coef, x, 0) - 2 * x * xi1) / xi2 - b
return (z)
}
x <- seq(0, 0.7, 0.0001)
plot(x, fn(x), type = 'l')
integrate(f = fn, 0, 0.6)
# 0.1049019 with absolute error < 1.2e-15
integrate(f = fn, 0, 0.7)
# 0.09714124 with absolute error < 1.1e-15
Я знаю, что могу интегрировать непосредственно в функцию cobs:::.splValue
и соответствующим образом преобразовать результаты. Однако мне интересно узнать, почему происходит это странное поведение.