随笔 - 1762  文章 - 0  评论 - 109  阅读 - 431万

分段三次Hermite插值及其与三次样条的比较

分段三次 Hermite 插值多项式 (PCHIP)

语法

p = pchip(x,y,xq)
pp = pchip(x,y)
 

说明

p = pchip(x,y,xq) 返回与 xq 中的查询点对应的插值 p 的向量。p 的值由 x 和 y 的保形分段三次插值确定。

pp = pchip(x,y) 返回一个分段多项式结构体以用于 ppval 和样条实用工具 unmkpp

例1

使用 spline 和 pchip 插入数据

将 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的变量只有函数值而没有导数值?

在用pchip插值的过程中,matlab会基于所给的函数值来帮你估算各导数值。估算的原则是保证导数值能够正确的反映散点图的形状和变化趋势。比如在散点图是单调递增的区间内,相应点的导数值就会是正的;在散点图表现出存在局部极值点的区间,相应的导数也会产生正负的变化。
在matlab的帮助里可以找到详细的解释,但要了解算法的细节,就要看pchip的函数文件了。

来源:https://zhidao.baidu.com/question/573024605.html

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on   一杯明月  阅读(13098)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2018-07-12 Python小知识点
2018-07-12 字典
2018-07-12 带*号的参数的问题
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示