三次hermite插值多项式例题_分段三次Hermite插值及其与三
次样条的⽐较
将 spline 和 pchip 为两个不同函数⽣成的插值结果进⾏⽐较。
创建由 x 值、点 y 处的函数值以及查询点 xq 组成的向量。使⽤ spline和 pchip 计算查询点处的插值。绘制查询点处的插值函数值以进⾏⽐较。
clc;clear;
x = -3:3; %插值点x坐标
y = [-1 -1 -1 0 1 1 1]; %插值点y坐标
xq1 = -3:.01:3; %查询点
p = pchip(x,y,xq1); %返回查询点的y坐标
s = spline(x,y,xq1); %返回查询点的y坐标
plot(x,y,'o',xq1,p,'-',xq1,s,'-.')
legend('Sample Points','pchip','spline','Location','SouthEast')
注:蓝⾊圆圈是被插值样本点。
可以看到:样条曲线(其实也是分段多项式)在两边有轻微震荡现象,但更加光滑,因为它要求在插值点处插值函数连续,
插值函数⼀阶导连续,插值函数⼆阶导连续,⽽三次分段Hermite插值函数则⽐价稳定,但不如样条标线的那样光滑,因为
它只要求在插值点处插值函数连续,插值函数的⼀阶导连续。
例2
x = -5:5;
y= [1 1 1 1 0 0 1 2 2 2 2];
p=pchip(x,y);
xq= -5:0.2:5;
pp= ppval(p,xq); %返回插值函数的查询点处的y坐标
plot(x,y,'o',xq,pp,'-.')
ylim([-0.2 2.2])
例3
x = -5:5;
y= [1 1 1 1 0 0 1 2 2 2 2];
p=pchip(x,y);
s=spline(x,y);
xq= -5:0.1:5;
pp= ppval(p,xq); %返回插值函数的查询点处的y坐标
ss= ppval(s,xq); %返回插值函数的查询点处的y坐标
figure(1);hold on;plot(x,y,'o',xq,pp,'-.',xq,ss,'b-')
ylim([-0.2 2.2])
figure(1);hold on ;legend('Sample Points','分段三次Hermite','分段三次样条','Location','SouthEast')
PCHIP是分段三次hermit插值,但书中的该⽅法必须知道点的值和导数值,为什么PCHIP的变量只有函数值⽽没有导数值?hermit
在⽤pchip插值的过程中,matlab会基于所给的函数值来帮你估算各导数值。估算的原则是保证导数值能够正确的反映散点图的形状和变化趋势。⽐如在散点图是单调递增的区间内,相应点的导数值就会是正的;在散点图表现出存在局部极值点的区间,相应的导数也会产⽣正负的变化。
在matlab的帮助⾥可以到详细的解释,但要了解算法的细节,就要看pchip的函数⽂件了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。