通过PCHIP功能集成

时间:2014-08-25 02:50:23

标签: r function math interpolation

如何在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)
}

谢谢!

1 个答案:

答案 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()添加了一些错误检查。