【发布时间】:2014-10-18 03:50:12
【问题描述】:
如何在 R 中集成 PCHIP(分段三次 Hermite 插值多项式)函数? pchip {pracma} 返回插值点数据,而要进行积分我们当然需要一个函数。我在 pchip() 的帮助菜单下看到,“TODO: A `pchipfun' should be provided,”我不知道手动生成这有多难?还有其他建议吗?您可以将 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)
}
谢谢!
【问题讨论】:
-
它更像是单行:
pchipfun <- function(xi, yi) f <- function(x) pchip(xi, yi, x) -
感谢您的评论!我不认为这条线做我想要的?例如,我不能在这里绘制 pchipfun 图表。当我尝试通过 pchipfun 进行积分时,我收到一个错误“函数评估给出了错误长度的结果”,有人建议使用矢量化,但积分会给出错误“函数评估给出了错误类型的结果”。
标签: r function math interpolation