matlab interp1 pchip,matlab多项式插值interp1深入研究(1)「建议收藏」

matlab interp1 pchip,matlab多项式插值interp1深入研究(1)「建议收藏」学习matlab不久,遇到了多项式插值interp1,在网上没有找到研究其插值方法的文章,在此,对其中插值方法做了一些研究,属于matlab范畴之外,但是无聊研究一下总的来说不会有坏处。interp1的具体运用也比较低,个人理解主要属于样本丢失,补充样本用,所以最后还介绍了傅里叶增值法。正文:首先介绍一个多项式插值函数:Y=interp1(x,y,X,’mothod’)本文主要讨论’mothod…

大家好,又见面了,我是你们的朋友全栈君。

学习matlab不久,遇到了多项式插值interp1,在网上没有找到研究其插值方法的文章,

在此,

对其中插值方法做了一些研究,属于matlab范畴之外,但是无聊研究一下总的来说不会有坏处。

interp1的具体运用也比较低,个人理解主要属于样本丢失,补充样本用,所以最后还介绍了傅里叶增值法。

正文:

首先介绍一个多项式插值函数:

Y=interp1(x,y,X,’mothod’) 本文主要讨论’mothod’的4个类型,

linear线性插值,默认。

nearst最近邻插值。

spline是三次样条插值。

cubic是三次多项式插值方式。%之后版本改为PCHIP

v5cubic是MATLAB5中使用的三次多项式插值,本文不做谈论,但是一同做出演示

先通过举例方法matlab代码看一下一维插值4个类型有什么不同吧:

首先给一组数a4c26d1e5885305701be709a3d33442f.png

M代码,也可以直接输入在命令窗口

x0=-4:0.5:4;

y0=1./(2+x0.^3);

x=-4:0.2:4;

y1=interp1(x0,y0,x,’linear’);

y2=interp1(x0,y0,x,’nearst’);

y3=interp1(x0,y0,x,’spline’);

y4=interp1(x0,y0,x,’PCHIP’); %PCHIP和’cubic’是版本不同,老版本用y4=interp1(x0,y0,x,’cubic’);

y5=interp1(x0,y0,x,’v5cubic’);%MATLAB5中使用的三次多项式插值

subplot(2,3,1),plot(x0,y0,’r-p’);title(‘y=1/(x^3+2)’);

subplot(2,3,2),plot(x0,y0,’r-‘,x,y1);title(‘linear’);

subplot(2,3,3),plot(x0,y0,’r-‘,x,y2);title(‘nearst’);

subplot(2,3,4),plot(x0,y0,’r-‘,x,y3);title(‘spline’);

subplot(2,3,5),plot(x0,y0,’r-‘,x,y4);title(‘cubic’);

subplot(2,3,6),plot(x0,y0,’r-‘,x,y5);title(‘v5cubic’);

有matlab的同学不放敲一下代码,结果如下:

a4c26d1e5885305701be709a3d33442f.png

下面是几个函数的二维插值,举例看看有何不同

[x0,y0]=meshgrid(-3:0.8:3);%完成网格矢量

z0=peaks(x0,y0); %由平移和放缩高斯分布函数获得z0

[x,y]=meshgrid(-3:0.25:3);

z1=interp2(x0,y0,z0,x,y,’linear’);

z2=interp2(x0,y0,z0,x,y,’nearst’);

z3=interp2(x0,y0,z0,x,y,’spline’);

z4=interp2(x0,y0,z0,x,y,’cubic’);

subplot(2,3,1),surf(x0,y0,z0);title(‘原始数据’);

subplot(2,3,2),surf(x,y,z1);title(‘linear’);

subplot(2,3,3),surf(x,y,z2);title(‘nearst’);

subplot(2,3,4),surf(x,y,z3);title(‘spline’);

subplot(2,3,5),surf(x,y,z4);title(‘cubic’);

显示的不是很清晰,如果有matlab的朋友复制上面代码就可以显示了。

a4c26d1e5885305701be709a3d33442f.png

从上面图例可以看出这些插值方法还是有区别的,本文研究了一下具体的算法,在何种情况应用;

linear默认方法线性插值,就是线性回归,不懂的可以去看看http://t.cn/RtktoiB

nearst最近邻插值法,又称泰森多边形(Thiesen又叫Dirichlet或Voronoi多边形)分析法,是荷兰气象学家A.H.Thiessen提出的一种分析方法。简单的说,是求离散分布的气象站的降雨量数据,计算平均降雨量,现在GIS和地理分析中经常采用这种方法进行快速赋值。在泰森多边形的构建中,首先要将离散点构成三角网。这种三角网称为Delaunay三角网。北京奥运会的水立方即是基于此原理设计。首先创造网络,无数据的网络要被赋为空值,使最近相邻的数据点之间的距离相等。

查看很多百科,不去手动复制了,总体讲,这种方法适用于数据紧密完整,只有少数点无值。对均匀数据进行插值很有用,对填充无值区域很有效。

spline三次样条插值法。在用pchip插值的过程中,matlab会基于所给的函数值来帮你估算各导数值。估算的原则是保证导数值能够正确的反映散点图的形状和变化趋势。比如在散点图是单调递增的区间内,相应点的导数值就会是正的;在散点图表现出存在局部极值点的区间,相应的导数也会产生正负的变化。

样条插值是一种工业设计中常用的、得到平滑曲线的一种插值方法,三次样条又是其中用的较为广泛的一种。

原理:假设有以下节点

a4c26d1e5885305701be709a3d33442f.png

样条曲线a4c26d1e5885305701be709a3d33442f.png

是一个分段定义的公式。给定n+1个数据点,共有n个区间,三次样条方程满足以下条件:

a. 在每个分段区间a4c26d1e5885305701be709a3d33442f.png

(i = 0, 1, …, n-1,x递增), a4c26d1e5885305701be709a3d33442f.png 都是一个三次多项式。

b. 满足a4c26d1e5885305701be709a3d33442f.png

(i = 0, 1, …, n )

c. a4c26d1e5885305701be709a3d33442f.png ,导数a4c26d1e5885305701be709a3d33442f.png

,二阶导数a4c26d1e5885305701be709a3d33442f.png

在[a, b]区间都是连续的,即a4c26d1e5885305701be709a3d33442f.png曲线是光滑的。

所以n个三次多项式分段可以写作:

a4c26d1e5885305701be709a3d33442f.png

,i = 0, 1, …, n-1

其中ai, bi, ci, di代表4n个未知系数。

cubic立方插值法,matlab新版本叫做pchip三次hermite插值,与spline插值差不多,因为两者X(j)处斜率选择方法不同。spline函数s(x)在X(j)的二节数D^2s(x)也是连续的,导致了不同结果,也就是说,spline更加光滑,D^2s(x)是连续的。

只是spline更光滑一些,总的说,数据是更光滑的函数,spline更加准确,如果数据不光滑,PCBIC不会太震荡,也不会超过目标值,建立难度较小。pchip是保持形状的,而spline不一定保持形状。

总的来说,插值的类型要求数学功底比较深,纯编程朋友还是多多学习,否则随便用起来对数据产生不必要影响就不好了。 再遇到插值问题时,多问问数学专家为妙。

数据过少时,MATLAB可是实现利用傅里叶插值实现数据一维增值

%傅里叶增值

x0=0:1.2:10;

y0=sin(x0);

n=4*length(x0);%采样数据增加

y=interpft(y0,n);

x=0:0.3:10.5;

hold on

plot(x0,y0,’ro’);

plot(x,y,’b.-‘);

title(‘一维傅里叶插值’);

legend(‘原始数据’,’插值结果’);

MATLAB中效果如图:

a4c26d1e5885305701be709a3d33442f.png

傅里叶主要是波动,用在函数上非常准确,如果上面y换成a4c26d1e5885305701be709a3d33442f.png,n=2,那么结果是这样的:

a4c26d1e5885305701be709a3d33442f.png

傅里叶变换是在数字信号处理方面很有用的一个方法,在通信和信息专业有很强的应用。

具体理论详见傅里叶分析,傅里叶变换

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132461.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【leetcode】23. Merge k Sorted Lists

    【leetcode】23. Merge k Sorted Lists

    2021年6月10日
    112
  • Python中的多线程「建议收藏」

    Python中的多线程「建议收藏」什么是多线程:进程:正在运行的程序,QQ360……线程:就是进程中一条执行程序的执行路径,一个程序至少有一条执行路径。(360中的杀毒电脑体检电脑清理同时运行的话就需要开启多条路

    2022年7月3日
    31
  • Cover Letter实用指南

    Cover Letter实用指南1、什么是CoverLetter?指的是投稿信2、coverletter的内容主要包括那些?应该简述所投稿件的核心内容、主要发现和意义,拟投期刊,对稿件处理有无特殊要求等(如“nottoreview”list)。另外,请附上主要作者的中文姓名、通讯地址、电话、传真和e-mail地址。此外有的杂志要求推荐几位审稿人及其联系方式。以及谁已经阅读过该文(当然是牛人)。

    2022年5月1日
    49
  • vs2019配置opengl环境_vs2010配置opengl

    vs2019配置opengl环境_vs2010配置opengl这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Mar

    2022年10月25日
    0
  • 计算机组成原理知识点

    计算机组成原理知识点计算机体系结构(ComputerArchitecture)主要研究硬件和软件功能的划分,确定硬件和软件的界面,哪部分功能由硬件系统来完成,哪部分功能由软件系统来完成。计算机组成原理(ComputerOrganization)是依据计算机体系结构,在确定且分配了硬件子系统的概念结构和功能特性的基础上,设计计算机各部件的具体组成,以及它们之间的连接关系,实现机器指令级的各种功能和特性,这点上说

    2022年6月1日
    33
  • windows 10安装sqlyog详细步骤

    windows 10安装sqlyog详细步骤sqlyog下载链接:链接:https://pan.baidu.com/s/1D_iRna8V90omfHsKHyeBtg提取码:bqht复制这段内容后打开百度网盘手机App,操作更方便哦1.下载完以后解压,双击SQLyog-12.0.9-0.x642.如下图,选择Ok3.如图,点击下一步4.选择“我接受“许可证协议”中的条款(A)”单击下一步…

    2022年5月28日
    76

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号