[英]R: How to get piecewise coefficients of an interpolation spline for analytical integration?
动机
我正在数值上评估一个深层嵌套的多重积分。 在每个嵌套级别,我都在下面的级别获得积分的矢量,将其乘以密度函数的矢量,即可得到该级别上的被积数y
的矢量。 x
值间隔不均匀。
积分是弯曲的,梯形积分不够准确,所以我想做一个允许曲率的积分。 辛普森规则不适用,因为横坐标没有均匀分布。 因此,我建议进行三次样条插值,然后通过分析计算每个段中三次的积分来计算样条函数的积分。
题
我一直在研究spline
和splinefun
类的功能以及splines2
软件包中的功能。 但是我找不到任何能告诉我三次多项式系列的系数-结之间的每段一个的系数。
如果有人可以将我指向一个函数进行样条插值并提供三次系数数组的功能,我将不胜感激。
谢谢。
这是在这里扩展新答案的好机会: 如何在R中保存和加载样条插值函数? 通过分段参数化,可以很容易地计算分段积分。
这是用于计算的(向量化)函数:
## a function for integration on a piece
piecewise_int <- function (hi, yi, bi, ci, di) {
yi * hi + bi * hi ^ 2 / 2 + ci * hi ^ 3 / 3 + di * hi ^ 4 / 4
}
下面,我将以该线程中的一个小示例为例,展示如何集成样条线。
## the small example in the linked thread
set.seed(0)
xk <- c(0, 1, 2)
yk <- round(runif(3), 2)
f <- splinefun(xk, yk, "natural") ## natural cubic spline
construction_info <- environment(f)$z
## information for integration
int_info <- with(construction_info,
list(h = diff(x), y = y[-n], b = b[-n], c = c[-n], d = d[-n])
)
## cubic spline integration on all pieces
integral <- sum(do.call(piecewise_int, int_info))
#[1] 0.81375
我们还可以执行数值积分来验证此结果。
integrate(f, 0, 2)
#0.81375 with absolute error < 9e-15
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.