我正在使用一个函数,该函数依赖于由cobs
同一R
包中的函数预先估计的二次 B 样条插值。估计的结和相应的系数在代码中给出。更进一步,我需要这个函数从 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
函数上集成,并相应地转换结果。但是,我很想知道为什么会发生这种奇怪的行为。