PCHIP(Piecewise Cubic Hermite Interpolating Polynomial)是一种把离散采样点连接成平滑曲线,同时尽量保留原始走势的插值方法。 中文常称"分段三次 Hermite 保形插值"。
什么是连续化
例如,你有几个时间点的位置:
text
时间 t:0 1 2 3
位置 x:0 1 1 2
PCHIP 会构造连续函数 x(t)x(t)x(t),通过所有采样点,让你能查询任意中间时刻的位置。这里的"连续化"就是从离散数据得到可连续求值的函数,并不代表恢复出了真实的中间运动。
名称的含义
- 分段三次:每两个相邻采样点之间,用一段三次多项式连接。
- Hermite:每段曲线由两端的数值和两端的斜率决定。
- 保形 :根据相邻数据自动选择斜率,使原本单调的区间保持单调,避免普通三次样条可能产生的过冲、振荡。上例中 x=1x=1x=1 的平台会保持平坦。
插值公式
在区间 ti,ti+1t_i,t_{i+1}ti,ti+1 内,令 h=ti+1−tih=t_{i+1}-t_ih=ti+1−ti、s=(t−ti)/hs=(t-t_i)/hs=(t−ti)/h,有:
x(t)=(2s3−3s2+1)xi+(s3−2s2+s)hmi+(−2s3+3s2)xi+1+(s3−s2)hmi+1. x(t)= (2s^3-3s^2+1)x_i +(s^3-2s^2+s)h m_i +(-2s^3+3s^2)x_{i+1} +(s^3-s^2)h m_{i+1}. x(t)=(2s3−3s2+1)xi+(s3−2s2+s)hmi+(−2s3+3s2)xi+1+(s3−s2)hmi+1.
其中 mi,mi+1m_i,m_{i+1}mi,mi+1 是 PCHIP 根据数据估计的端点斜率。关键在斜率的选择:相邻区间斜率反号或其中一个为零时,内部节点斜率设为零;同号时,采用加权调和平均,限制曲线弯曲程度。整条曲线最外侧的两个端点使用单边斜率估计,并进行保形限制。
与其他插值方法的区别
| 方法 | 通过采样点 | 节点处平滑性 | 保形特点 |
|---|---|---|---|
| 线性插值 | 是 | 数值连续,斜率可能跳变 | 不过冲,但有折角 |
| PCHIP | 是 | 数值、一阶导数连续(C1C^1C1) | 保持标量单调性,避免过冲 |
| 普通三次样条 | 是 | 通常二阶导数也连续(C2C^2C2) | 更光滑,但可能过冲 |
这些保形性质针对采样范围内的插值,不能直接推广到范围外的外推。
用于运动轨迹时的含义
用于时间---位置轨迹时,PCHIP 意味着位置和速度连续,但加速度在分段节点处可能跳变。
对三维坐标分别插值,只能保证各坐标分量的保形性质,不能自动保证整条轨迹满足速度、曲率或其他物理约束。