matlab自带的插值函数interp1的几种插值方法

matlab自带的插值函数interp1的几种插值方法插值法    插值法又称“内插法”,是利用函数f(x)在某区间中已知的若干点的函数值,作出适当的特定函数,在区间的其他点上用这特定函数的值作为函数f(x)的近似值,这种方法称为插值法。如果这特定函数是多项式,就称它为插值多项式。线性插值法    线性插值法是指使用连接两个已知量的直线来确定在这两个已知量之间的一个未知量的值的方法。    假设我们已知坐标(x0,y0)与…

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

插值法

        插值法又称“内插法”,是利用函数f (x)在某区间中已知的若干点的函数值,作出适当的特定函数,在区间的其他点上用这特定函数的值作为函数f (x)的近似值,这种方法称为插值法。如果这特定函数是多项式,就称它为插值多项式。


线性插值法

        线性插值法是指使用连接两个已知量的直线来确定在这两个已知量之间的一个未知量的值的方法。

        假设我们已知坐标(x0,y0)(x1,y1),要得到[x0,x1]区间内某一位置x在直线上的值。根据图中所示,我们得到两点式直线方程:

matlab自带的插值函数interp1的几种插值方法

matlab自带的插值函数interp1的几种插值方法

        假设方程两边的值为α,那么这个值就是插值系数—从x0到x的距离与从x0x1距离的比值。由于x值已知,所以可以从公式得到α的值:

matlab自带的插值函数interp1的几种插值方法

        同样:

matlab自带的插值函数interp1的几种插值方法

        这样,在代数上就可以表示成为:

        y = (1 − α)y0 + αy1

        或者,

        y = y0 + α(y1 − y0)

        这样通过α就可以直接得到 y。实际上,即使x不在x0x1之间并且α也不是介于0到1之间,这个公式也是成立的。在这种情况下,这种方法叫作线性外插—参见 外插值。

  已知y求x的过程与以上过程相同,只是x与y要进行交换。

MATLAB中的使用

[plain] 
view plain  
copy

  1. %{  
  2.     MATLAB中的插值函数为interp1,其调用格式为:  yi= interp1(x,y,xi,’method’)             
  3.     其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量,   
  4.     ‘method’表示采用的插值方法,MATLAB提供的插值方法有几种:   
  5.         ‘nearest’是最邻近插值, ‘linear’线性插值; ‘spline’三次样条插值; ‘pchip’立方插值.缺省时表示线性插值  
  6.     注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。  
  7. %}  
  8. x = 0:2*pi;    
  9. y = sin(x);    
  10. xx = 0:0.5:2*pi;    
  11.   
  12. % interp1对sin函数进行分段线性插值,调用interp1的时候,默认的是分段线性插值    
  13. y1 = interp1(x,y,xx,’linear’);    
  14. subplot(2,2,1);  
  15. plot(x,y,’o’,xx,y1,’r’)    
  16. title(‘分段线性插值’)    
  17.     
  18. % 临近插值    
  19. y2 = interp1(x,y,xx,’nearest’);    
  20. subplot(2,2,2);  
  21. plot(x,y,’o’,xx,y2,’r’);    
  22. title(‘临近插值’)    
  23.     
  24. %球面线性插值    
  25. y3 = interp1(x,y,xx,’spline’);    
  26. subplot(2,2,3);  
  27. plot(x,y,’o’,xx,y3,’r’)    
  28. title(‘球面插值’)    
  29.     
  30. %三次多项式插值法    
  31. y4 = interp1(x,y,xx,’pchip’);    
  32. subplot(2,2,4);  
  33. plot(x,y,’o’,xx,y4,’r’);    
  34. title(‘三次多项式插值’)    

matlab自带的插值函数interp1的几种插值方法

一个例子

[plain] 
view plain  
copy

  1. %{  
  2.     MATLAB中的插值函数为interp1,其调用格式为:  yi= interp1(x,y,xi,’method’)             
  3.     其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量,   
  4.     ‘method’表示采用的插值方法,MATLAB提供的插值方法有几种:   
  5.         ‘nearest’是最邻近插值, ‘linear’线性插值; ‘spline’三次样条插值; ‘pchip’立方插值.缺省时表示线性插值  
  6.     注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。  
  7. %}  
  8.   
  9. %{  
  10.     例如:在一 天24小时内,从零点开始每间隔2小时测得的环境温度数据分别为  
  11.             12,9,9,1,0,18 ,24,28,27,25,20,18,15,13,  
  12.     推测中午12点(即13点)时的温度.  
  13. %}  
  14. x = 0:2:24;  
  15. y = [12   9   9   10   18  24   28   27   25   20  18  15  13];  
  16. a = 13;  
  17. y1 = interp1(x,y,a,’spline’)  
  18. % 结果为:  27.8725  
  19.   
  20. % 若要得到一天24小时的温度曲线,则:  
  21. xi = 0:1/3600:24;  
  22. % 插值点可以是向量,则返回的也就是对应的向量  
  23. yi = interp1(x,y,xi, ‘spline’);  
  24. plot(x,y,’o’ ,xi,yi);  

matlab自带的插值函数interp1的几种插值方法



[plain] 
view plain  
copy

  1. x=0:2*pi;  
  2. y=sin(x);  
  3. xx=0:0.5:2*pi;  
  4.   
  5. %interp1对sin函数进行分段线性插值,调用interp1的时候,默认的是分段线性插值  
  6. y1=interp1(x,y,xx);  
  7. figure  
  8. plot(x,y,’o’,xx,y1,’r’)  
  9. title(‘分段线性插值’)  
  10.   
  11. %临近插值  
  12. y2=interp1(x,y,xx,’nearest’);  
  13. figure  
  14. plot(x,y,’o’,xx,y2,’r’);  
  15. title(‘临近插值’)  
  16.   
  17. %球面线性插值  
  18. y3=interp1(x,y,xx,’spline’);  
  19. figure  
  20. plot(x,y,’o’,xx,y3,’r’)  
  21. title(‘球面插值’)  
  22.   
  23. %三次多项式插值法  
  24. y4=interp1(x,y,xx,’cubic’);  
  25. figure  
  26. plot(x,y,’o’,xx,y4,’r’);  
  27. title(‘三次多项式插值’)  


matlab自带的插值函数interp1的几种插值方法

matlab自带的插值函数interp1的几种插值方法

matlab自带的插值函数interp1的几种插值方法

matlab自带的插值函数interp1的几种插值方法

(1)    Nearest方法速度最快,占用内存最小,但一般来说误差最大,插值结果最不光滑。

(2)    Spline三次样条插值是所有插值方法中运行耗时最长的,插值函数及其一二阶导函数都连续,是最光滑的插值方法。占用内存比cubic方法小,但是已知数据分布不均匀的时候可能出现异常结果。

(3)    Cubic三次多项式插值法中,插值函数及其一阶导数都是连续的,所以插值结果比较光滑,速度比Spline快,但是占用内存最多。

语法形式

说明

y=interp1(x,Y,xi)

由已知点集(x,Y)插值计算xi上的函数值

y=interp1(x,Y,xi)

相当于x=1:length(Y)的interp(x,Y,xi)

y=interp1(x,Y,xi,method)

用指定插值方法计算插值点xi上的函数值

y=interp1(x,Y,xi,method,’extrap’)

对xi中超出已知点集的插值点用指定插值方法计算函数值

y=interp1(x,Y,xi,method,’extrap’,extrapval)

用指定方法插值xi上的函数值,超出已知点集处函数值取extrapval

y=interp1(x,Y,xi,method,’pp’)

用指定方法插值,但返回结果为分段多项式


Method

方法描述

‘nearest’

最邻近插值:插值点处函数值与插值点最邻近的已知点函数值相等

‘liner’

分段线性插值:插值点处函数值由连接其最邻近的两侧点的线性函数预测。Matlab中interp1的默认方法。

‘spline’

样条插值:默认为三次样条插值。可用spline函数替代

‘pchip’

三次Hermite多项式插值,可用pchip函数替代

‘cubic’

同’pchip’,三次Hermite多项式插值


 另:

【matlab】csape 和interp1有什么相同和区别?

csape和interp1都是插值函数。
csape可以选择样条的边界条件,interp1无法使用边界条件;
csape只是Cubic spline插值,interp1可以选择几种不同的插值方法。

csape函数的用法如下:
pp = csape(x,y,conds,valconds)
其中(x,y)为数据向量,conds表示变界类型, valconds表示边界值。
边界类型(conds)可为:
'complete',给定边界一阶导数.
'not-a-knot',非扭结条件,不用给边界值.
'periodic',周期性边界条件,不用给边界值.
'second',给定边界二阶导数.
'variational',自然样条(边界二阶导数为0)
边界类型(valconds)可为:
'complete',给定边界一阶导数.
'not-a-knot',非扭结条件,不用给边界值.
'periodic',周期性边界条件,不用给边界值.
'second',给定边界二阶导数.
'variational',自然样条(边界二阶导数为0)

interp1函数的用法如下:
  yi=interp1(x,Y,xi):返回插值向量yi,每一元素对应于参量xi,同时由向量X与Y的内插值决定。参量x 指定数据Y的点。若Y为一矩阵,则按Y的每列计算。yi是阶数为length(xi)*size(Y,2)的输出矩阵。
  yi=interp1(Y,xi):假定x=1:N,其中N为向量Y的长度,或者为矩阵Y的行数。
  yi=interp1(x,Y,xi,method):用指定的算法计算插值。nearest为最近邻点插值,直接完成计算;linear为线性插值(默认方式),直接完成计算;spline为三次样条函数插值。
  yi=interp1(x,Y,xi,method,'extrap'):对于超出x范围的xi中的分量将执行特殊的外插值法extrap。
  yi=interp1(x,Y,xi,method,extrapval):确定超出x范围的xi中的分量的外插值extrapval,其值通常取NaN或0。

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

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

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


相关推荐

  • Windows server 2012 r2 系统安装启动u盘制作【系统镜像制作】——转自微信公众号网管爱好者

    Windows server 2012 r2 系统安装启动u盘制作【系统镜像制作】——转自微信公众号网管爱好者本文叙述U盘制作Windowsserver2012r2启动镜像的步骤

    2022年5月9日
    96
  • 用python编写猴子吃桃问题_python猴子吃桃三种解法

    用python编写猴子吃桃问题_python猴子吃桃三种解法人工智能课内实验报告(8次)学院:自动化学院班级:智能1501姓名:刘少鹏(34)学号:目录课内实验1:猴子摘香蕉问题的VC编程实现……………………1课内实验2:编程实现简单动物识别系统的知识表示………5课内实验3:盲目搜索求解8数码问题………………………18课内实验4:回溯算法求解四皇后问题………………………33课内实验5:编程实现一…

    2022年9月26日
    2
  • mac datagrip激活教程_最新在线免费激活

    (mac datagrip激活教程)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/ide…

    2022年3月31日
    83
  • c语言和vc的区别_c++是c语言的升级版吗

    c语言和vc的区别_c++是c语言的升级版吗returnx+y}fnsub(x,yint)int{returnx-y}就像在Go和C中一样,函数不能重载。这简化了代码并提高了可维护性和可读性。函数可以在声明之前使用:add和sub在main之后声明,但仍然可以从main调用。对于V中的所有声明都是如此,并且不需要头文件或考虑文件和声明的顺序。V的目标之一是向具有不同编译器开发经验的开发人员开放。作者希望编译器不再是让人捉摸不透、只…

    2022年8月12日
    6
  • FTP服务器搭建详细步骤

    FTP服务器搭建详细步骤前言:FTP服务器(FileTransferProtocolServer)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。FTP是FileTransferProtocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。(FTP服务器)IIS是一种Web(网页)服务组件,其中包括Web服务器、FTP服务…

    2022年5月9日
    43
  • Java绝对值排序

    绝对值排序TimeLimit:1SecMemoryLimit:128MBDescription输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。Input输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。Output对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行SampleInputCopy33-

    2022年4月7日
    37

发表回复

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

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