如何在R中集成PCHIP(分段立方Hermite插值多项式)函数? pchip {pracma}返回插值点数据,并且要集成我们当然需要一个函数。我在pchip()的帮助菜单下看到,“TODO:应该提供一个'pchipfun',”我不知道手动生成有多难?还有其他建议吗?你可以对插值点拟合n次多项式回归,然后将其整合得到粗略的近似值,但这很快就会变得混乱......
这是pchip {pracma}的源代码,它返回点而不是函数,我想返回一个函数更像是一个数学问题而不是一个R问题,但我对任何和所有建议都是开放的!请!
function (xi, yi, x)
{
h <- diff(xi)
delta <- diff(yi)/h
d <- .pchipslopes(h, delta)
n <- length(xi)
a <- (3 * delta - 2 * d[1:(n - 1)] - d[2:n])/h
b <- (d[1:(n - 1)] - 2 * delta + d[2:n])/h^2
k <- rep(1, length(x))
for (j in 2:(n - 1)) {
k[xi[j] <= x] <- j
}
s <- x - xi[k]
v <- yi[k] + s * (d[k] + s * (a[k] + s * b[k]))
return(v)
}
谢谢!
答案 0 :(得分:0)
什么对你不起作用?您必须使用 pchipfun()
定义一个函数,如下所示:
> library(pracma)
> xs <- linspace(0, pi, 10)
> ys <- sin(xs)
> pchipfun <- function(xi, yi) function(x) pchip(xi, yi, x)
> f <- pchipfun(xs, ys)
> integrate(f, 0, pi)
2.000749 with absolute error < 0.00017
我已在R-Forge上更新了pracma 1.7.2以包含pchipfun()
并在pchip()
添加了一些错误检查。