[医]pchip
分段三次Hermite插值多项式(PCHIP)。
库::`工程师`
争论
输入参数
# xq — 查询点
+
标量,标量 | 向量资料 | 矩阵 | 阵列
Details
指定为标量、向量、矩阵或数组的查询点。 参数中指定的点 xq系列,代表 -插值函数值的坐标 yq,使用函数计算 pchip.
| 数据类型 |
|
例子:
数据插值使用 样条 和 pchip
Details
让我们比较使用函数获得的插值结果 样条 和 pchip 于两个不同的数据集。 所有这些函数都实现了各种形式的分段三次Hermite插值。 每个函数都有不同的计算插值斜率的方法,这会导致不同的行为,具体取决于源数据中是否存在平坦区域或不规则性。
让我们比较插值在连接平坦区域的样本数据上的结果。 创建值向量 [参数:x],这些点的函数的值 [参数:y] 和查询点 [参数:xq]. 让我们使用函数计算查询点的插值 样条 和 pchip. 让我们在查询点绘制插值函数值以进行比较。
import EngeeDSP.Functions: pchip, spline
x = -3:3
y = [-1, -1, -1, 0, 1, 1, 1]
xq1 = -3:0.01:3
p = pchip(x, y, xq1)
s = spline(x, y, xq1)
plot(x, y,
seriestype = :scatter,
markercolor = :white,
label = "Sample Points",
legend = :bottomright)
plot!(xq1, p, label = "pchip")
plot!(xq1, s, linestyle = :dashdot, label = "spline")
在这种情况下,功能 pchip 避免了异常值,可以准确地连接平坦区域。
让我们使用采样波动函数进行第二次比较。
import EngeeDSP.Functions: pchip, spline, besselj
x = 0:15
y = besselj.(1, x)
xq2 = 0:0.01:15
p = pchip(x, y, xq2)
s = spline(x, y, xq2)
plot(x, y,
seriestype = :scatter,
markercolor = :white,
label = "Sample Points")
plot!(xq2, p, label = "pchip")
plot!(xq2, s, linestyle = :dashdot, label = "spline")
如果基函数是振荡的, 样条 它更好地捕捉点之间的运动。 pchip,其在局部极值附近被强烈地平滑。