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

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

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Qt 下载安装

    Qt 下载安装文章目录Qt下载,安装多种渠道下载1Qt官方下载(慢)2Qt国内镜像下载(较快)3迅雷下载(快)安装Qt下载,安装多种渠道下载1Qt官方下载(慢)http://download.qt.io/archive和official_releases两个目录都有最新的Qt开发环境安装包。Archive—qt这个qt目录包含了所有的Qt版本,从1.0到目前的5….

  • Docker暴露2375端口导致服务器被攻击解决方法!

    Docker暴露2375端口导致服务器被攻击解决方法!相信了解过dockerremoteAPI的同学对2375端口都不陌生了,2375是docker远程操控的默认端口,通过这个端口可以直接对远程的dockerdaemon进行操作。当$HOST主机以dockerdaemon-H=0.0.0.0:2375方式启动daemon时,可以在外部机器对$HOST的dockerdaemon进行直接操作:docker-Htcp://$HOS…

  • 文件夾加鎖

    文件夾加鎖此加密方法會使这个特殊的文件夹用正常情况不可打開也不可删除,可以起到保护重要资料的作用。  在Windows中“\”符号是路径的分隔符,比如“C:\Windows\System.exe”的意思是C分区的Windows文件夹中的System.exe文件。如果文件名中有“\”符号会怎么样呢?假如“sexinsex\”是一个文件夹的名字,这个文件夹位于“F:\”,它的路径就是“F:\sexinsex\…

  • js操作DropDownList大全

    js操作DropDownList大全一:js设置DropDownList选中某项 1.根据Value值设置选中某项   例子如下: HTML代码: 选项0选项1  JS代码:document.getElementById(“ddlFolder”).value=”0″;//0为你要选中的项的value  2.根据Text值设置选中某项

    2022年10月16日
  • idea2021.10 激活码mac版本-激活码分享

    (idea2021.10 激活码mac版本)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • JS数组扁平化_扁平化js

    JS数组扁平化_扁平化jsJS 扁平化 (flatten) 数组

发表回复

您的电子邮箱地址不会被公开。

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