分段三次Hermite插值及其与三次样条的比较
分段三次 Hermite 插值多项式 (PCHIP)
语法
p = pchip(x,y,xq)pp = pchip(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 = -:;
y = [ ];
p = pchip(x,y);
xq = -:0.2:;
pp = ppval(p,xq); %返回插值函数的查询点处的y坐标
plot(x,y,'o',xq,pp,'-.')
ylim([-0.2 2.2])

例3
x = -:;
y = [ ];
p = pchip(x,y);
s = spline(x,y);
xq = -:0.1:;
pp = ppval(p,xq); %返回插值函数的查询点处的y坐标
ss = ppval(s,xq); %返回插值函数的查询点处的y坐标
figure();hold on;plot(x,y,'o',xq,pp,'-.',xq,ss,'b-')
ylim([-0.2 2.2])
figure();hold on ;legend('Sample Points','分段三次Hermite','分段三次样条','Location','SouthEast')

PCHIP是分段三次hermit插值,但书中的该方法必须知道点的值和导数值,为什么PCHIP的变量只有函数值而没有导数值?
在用pchip插值的过程中,matlab会基于所给的函数值来帮你估算各导数值。估算的原则是保证导数值能够正确的反映散点图的形状和变化趋势。比如在散点图是单调递增的区间内,相应点的导数值就会是正的;在散点图表现出存在局部极值点的区间,相应的导数也会产生正负的变化。
在matlab的帮助里可以找到详细的解释,但要了解算法的细节,就要看pchip的函数文件了。
分段三次Hermite插值及其与三次样条的比较的更多相关文章
- hermite插值
Hermite 插值就是要求插值函数不仅经过所给节点,而且要保证在该点的导数也相等.<备注:虽然还不理解这句话,但是还是先放这里!> 所谓样条曲线(Spline Curves)是指给定一组 ...
- SSE图像算法优化系列十八:三次卷积插值的进一步SSE优化。
本文是在学习https://blog.csdn.net/housisong/article/details/1452249一文的基础上对算法的理解和重新整理,再次非常感谢原文作者的深入分析以及分享. ...
- 数值计算方法实验之按照按三弯矩方程及追赶法的三次样条插值 (MATLAB 代码)
一.实验目的 在已知f(x),x∈[a,b]的表达式,但函数值不便计算,或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)= yi(i= 0,1…….,n)求出简单 ...
- [Python] Hermite 插值
# -*- coding: utf-8 -*- #Program 0.5 Hermite Interpolation import matplotlib.pyplot as plt import nu ...
- Vue学习之路第三篇:插值表达式和v-text的区别
上一篇说到插值表达式有一个问题: 页面频繁刷新或者网速加载很慢的时候,页面会先出现“{{ msg }}”,再一闪而过出现真实的数据. 对于这个问题Vue给予了解决办法,看具体事例. <div i ...
- 两点三次Hermiter插值C++代码
#include <math.h> #include <gl/glut.h> #include <iostream> using namespace std; st ...
- Matlab随笔之插值与拟合(上)
原文:Matlab随笔之插值与拟合(上) 1.拉格朗日插值 新建如下函数: function y=lagrange(x0,y0,x) %拉格朗日插值函数 %n 个节点数据以数组 x0, y0 输入(注 ...
- Matlab hermite
保形分段三次hermite插值 % 这是MATLAB里面的pchip.m文件.这里把它的凝视改写成汉语,主要是想弄清楚它是怎么计算在节点处的导数的. function v = pchip(x,y,xx ...
- 多普勒失真信号采样Matlab模拟分析
多普勒失真信号采样Matlab模拟分析 方案 水声通信指的是使用声信号在水中数据传输. 相对而言.电磁信号在水中吸收严重衰减过快,光信号受水中悬浮颗粒的影响,也无法完毕远距离传输. 这两种信号的传播距 ...
随机推荐
- 12 Cookie、Session和JSP基础
1.会话技术 (1)会话概念:一次会话中包含多次请求和响应.一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 (2)会话功能:在一次会话的范围内的多次请求间,共享数据 (3)会 ...
- [转帖]B树索引和位图索引的结构介绍
B树索引和位图索引的结构介绍 http://blog.itpub.net/12679300/viewspace-1174236/ 一 前言:? ROWID:包含键值的行的行ID,(查找块的最快方法, ...
- PMBOK(第六版) PMP备考知识总汇!
记录本人学习PMBOK第六版的学习笔记. 备考知识总汇! PMBOK序章 PMP备考指南之相关事项介绍 PMP备考指南之第一章:引论 PMP备考指南之第二章:项目运作环境 PMP备考指南之第三章:项目 ...
- tensorboard 拒绝访问解决方法
打开Anaconda Prompt,切换到TensorFlow环境(activate tensorflow) 切换成功之后,输入tensorboard --logdir='路径' 注意:--logdi ...
- C++学习笔记 之 循环
循环 循环语句允许我们多次执行一个语句或者语句组.(插入流程图) 循环类型 C++为我们提供的循环类型如下: 循环类型 描述 while循环 当给定条件为真时,重复语句或语句组.它会在执行循环主体之前 ...
- Oracle中的dual表简介
dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情,如下: 1.查看当前用户,可以在 SQL Plus中执行下面语句 sql代 ...
- SQL Server 索引优化-----数据库引擎优化顾问
本文将根据“数据库引擎优化顾问”(DTA)来发现无用或缺失的索引. 要使用“数据库引擎优化顾问”,首先需要对数据库负载进行监控,为数据库负载分析准备数据.从SSMS的工具中,打开SQL Server ...
- docker-每天5分钟玩转Docker容器技术
安装 https://www.cnblogs.com/qinxu/p/10032176.html 安装教程,目前只能安装到18版本的,安装完后执行下面命令更新到版本19 yum install doc ...
- SIM7600CE http post
SIM7600CE是一款SMT封装的模块,支持 LTE-TDD/LTE-FDD/HSPA+/TD-SCDMA/EVDO和GSM/GPRS/EDGE等频段,支持LTE CAT4(下行速度为150Mbps ...
- SVN 提交失败 非LF行结束符
来源:http://programerni.diandian.com/post/2012-09-06/40037220960 我使用svn一直很顺利,今天在改了两个地方之后,提交时输入了两句话(只有两 ...