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

(0)
上一篇 2022年6月13日 下午1:36
下一篇 2022年6月13日 下午1:36


相关推荐

  • 从零开始做歌词生成器 – 0 – 抓取网易云3万首歌词

    从零开始做歌词生成器 – 0 – 抓取网易云3万首歌词随着近几年深度学习的发展 歌词生成器逐渐变为一个有趣而热门的研究点 这篇和接下来的几篇文章 将从零开始 记录数据的抓取 清洗与分析 到歌词生成模型的构建 训练与分析过程 要做歌词生成器 首先得有丰富的数据 花了点时间在网易云音乐网页版上面摸索 最后找到了几个页面 几个 API 终于把一整套的流程整理了出来 转载请注明出处 从零开始做歌词生成器 0 抓取网易云 3 万首歌词抓取流程分析

    2026年3月18日
    2
  • docker里面什么emule比较好_emule 服务器优先

    docker里面什么emule比较好_emule 服务器优先{“moduleinfo”:{“card_count”:[{“count_phone”:1,”count”:1}],”search_count”:[{“count_phone”:6,”count”:6}]},”card”:[{“des”:”云服务器ECS(ElasticComputeService)是一种弹性可伸缩的计算服务,助您降低IT成本,提升运维效率,使您更专注于核心业务创新。”,…

    2022年6月17日
    26
  • 程序员为什么要写博客_程序员写文章赚钱

    程序员为什么要写博客_程序员写文章赚钱不是大牛就不能写博客了吗?几乎每一个程序员都听说过写博客有很多好处,但真的动手去写的却很少。其中有一个很重要的原因就是,有些人心里会认为:我不是大牛,写出来的博客没意义。有这种心理很正常,只是每个

    2022年8月5日
    9
  • 滑动窗口 leetcode_滑动窗口最多可以有多少帧

    滑动窗口 leetcode_滑动窗口最多可以有多少帧原题链接给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值————— —–[1 3 -1] -3 5 3 6 7

    2022年8月9日
    6
  • 三极管原理分析

    三极管原理分析这里有一篇文章已经讲解的很好了 http wenku baidu com link url zOLw5B1aS2Rr U3PvDx 6YJHjJykB IsFomNUE5hI R2 uI3gUcB5q 6hGxmhmv8xKM 我再做一些补充

    2026年3月26日
    1
  • webots自学笔记(一)软件界面和简单模型仿真

    webots自学笔记(一)软件界面和简单模型仿真由于毕设研究需要使用webots软件,在学习使用webots的过程花费了很多时间。由于这个软件基本没有什么中文资料,所以想把自己所学到的一些东西写下来,如有什么错误的地方,大家可以批评指正。1.界面

    2022年8月3日
    7

发表回复

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

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