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/130785.html原文链接:https://javaforall.net

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


相关推荐

  • 激活成功教程软件下载网站100个[通俗易懂]

    激活成功教程软件下载网站100个[通俗易懂]激活成功教程软件下载网站100个□xuly发表于2005-11-247:48:00

    2022年10月13日
    0
  • 电流转电压模块4-20mA转0-3.3/5V/10V/15V转换变送器电路原理解析

    电流转电压模块4-20mA转0-3.3/5V/10V/15V转换变送器电路原理解析工业传感器常使用电流大小来传输数据,那么作为传感器数据的接收方,比如单片机,有内部AD的单片机可以检测电压的大小,那么首先必须将电流信号转换为电压信号,然后进行电压幅值变换使其适合MCU处理的电压范围。下面我们从设计的电流转电压的模块电路原理图来逐步解析。首先我们看电流检测放大部分,就是U1B部分,电流从R1的上端流入,下端流出。不难看出这是一个差分放大电路,也就是一个减…

    2022年5月23日
    69
  • 浅谈cookie跨域的解决方案——document.domain[通俗易懂]

    浅谈cookie跨域的解决方案——document.domain[通俗易懂]cookie的名/值对中的值不允许出现分号、逗号和空白符,因此在设置cookie前要用encodeURIComponent()编码,读取时再用decodeURIComponent()解码。cookie默认的有效期是浏览器会话期间,作用域是整个浏览器而不仅仅局限于窗口或标签页。若要延长cookie的有效期,可以设置max-age属性。cookie的domain和path属性:1.

    2022年7月27日
    20
  • matlab单缝衍射强度分布_matlab双缝衍射曲线图

    matlab单缝衍射强度分布_matlab双缝衍射曲线图基于MATLAB单缝衍射?本科毕业论文(设计)题目基于matlab的单缝衍射和双缝干涉可视化模拟学生姓名学号系别物理学与电子信息工程系年级08级专业物理学指导教师职称完成日期闽江学院毕业论文(设计)诚信声明书本人郑重声明:兹提交的毕业论文(设计)《基于matl…

    2022年10月23日
    0
  • 剑指offer——二进制中1的个数(解释n & 0xFFFFFFFF)[通俗易懂]

    剑指offer——二进制中1的个数(解释n & 0xFFFFFFFF)[通俗易懂]题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解答如下:环境:python2.7.3正数的原码反码补码都一样负数的补码是其对应正数的反码加1这里需要弄清楚为什么python中负数需要和0xFFFFFFFF做与操作?在计算机中,所有的数字都是使用补码存储起来的。由于Python没有位数这个概念,所以得到二进制表示需要多一点操作,即将位数限制在32位,…

    2022年5月16日
    36
  • 蛋花花:互联网哪些内容你愿意付费

    蛋花花:互联网哪些内容你愿意付费

    2021年7月8日
    89

发表回复

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

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