4.5  插值

插值就是在已知数据之间计算估计值的过程,是一种实用的数值方法,是函数逼近的重要方法。在信号处理和图形分析中,插值运算的应用较为广泛,MATLAB提供了多种插值函数,可以满足不同的需求。

4.5.1  一维数据插值

一维数据插值常使用函数interp1,其一般的语法格式为:yi=interp1(x,y,xi,method)。其中y为函数值矢量,x为自变量的取值范围,x与y的长度必须相同;xi为插值点的向量或者数组,method为插值方法选项。对于插值,MATLAB提供了如下几种方法。

(1)邻近点插值(method=’nearest’)。

(2)线性插值(method=’linear’):在两个数据点之间连接直线,计算给定的插值点在直线上的值作为插值结果,该方法是interp1函数的默认方法。

(3)三次样条插值(method=’spline’):通过数据点拟合出三次样条曲线,计算给定的插值点在曲线上的值作为插值结果。

(4)立方插值(method=’pchip’or’cubic’):通过分段立方Hermite插值方法计算插值结果。

选择一种插值方法时,考虑的因素包括运算时间、占用计算机内存和插值的光滑程度。一般来说:

(5)邻近点插值方法的速度最快,但平滑性最差;

(6)线性插值方法占用的内存较邻近点插值方法多,运算时间也稍长,与邻近点插值不同,其结果是连续的,但顶点处的斜率会改变;

(7)三次样条插值方法的运算时间最长,但内存的占用较立方插值法要少,但其插值数据和导数都是连续的。在这4种方法中,三次样条插值结果的平滑性最好,但如果输入数据不一致或数据点过近,就可能出现很差的插值效果。

【例4-39】  一维插值函数interp1应用与比较示例。

>> x=0:10;

>> y=cos(x);

>> xi=0:0.25:10;

>> strmod={'nearest','linear','spline',' pchip'}%  将插值方法存储到元胞数组

'nearest'    'linear'    'spline'   'pchip'

>> strlb={'(a)method=nearest','(b)method=linear',...

'(c)method=spline','(d)method=pchip'}              %  绘图标签

Columns 1through 2

'(a)method=nearest'   '(b)method=linear'

Columns 3through 4

'(c)method=spline'    '(d)method=pchip'

>> for i=1:4

yi=interp1(x,y,xi,strmod{i});                     %  插值

subplot(2,2,i)                                        %  子图

plot(x,y,'ro',xi,yi,'b'),xlabel(strlb(i))         %  绘图

本例创建了元胞数组strmod来存储4种用到的插值方法{'nearest','linear','spline','pchip'},然后通过循环来调用插值函数interp1,最终插值的结果用图形来对比。一维插值结果比较如图4-4所示。可以看出,三次样条插值结果的平滑性最好,而邻近点插值效果最差。

图4-4  一维插值方法结果比较

4.5.2  二维数据插值

二维插值也是常用的插值运算方法,主要应用于图形图像处理和三维曲线拟合等领域。二维插值由函数interp2实现,其一般语法为:zi=interp2(x,y,z,xi,yi,method)。

其中x和y为由自变量组成的数组,x与y的尺寸相同,z为二者相对应的函数值;xi和yi为插值点数组,method为插值方法选项。interp1函数中的4种插值方法也可以在interp2函数中使用。

【例4-40】  二维插值函数interp2应用与比较示例。

[x,y,z]=peaks(6);                                  %  MATLAB自带的测试函数

mesh(x,y,z)                                        %  绘制原始数据图

title('原始数据')

[xi,yi]=meshgrid(-3:0.2:3,-3:0.2:3);               %  生成供插值的数据网格

strmod={'nearest','linear','spline','cubic'};     %  将插值方法存储到元胞数组

strlb={'(a)method=nearest','(b)method=linear',...

'(c)method=spline','(d)method=cubic'};       %  绘图标签

figure                                           % 建立新绘图窗口

zi=interp2(x,y,z,xi,yi,strmod{i});       % 插值

subplot(2,2,i)

mesh(xi,yi,zi);                             %  绘图

title(strlb{i})                              %  图标题

本例计算了调用'nearest'、'linear'、'spline'和'cubic'等4种方法进行插值,其中原始数据如图4-5所示,插值之后的结果如图4-6所示。由结果图可以看出,各种插值方法的精度是不同的。

图4-5 二维插值原始数据

图4-6  二维插值结果

4.5.3  多维插值

多维插值包括三维插值函数interp3和n维插值函数interpn,其函数的调用方式及插值方法与一维、二维插值基本相同。这里以三维为例,其一般格式为:

zi=interp3(x,y,z,v,xi,yi,zi,method)

其中x、y、z为由自变量组成的数组,x、y、z的尺寸相同,v为相应的函数值;xi、yi、zi为插值点数组,method为插值方法选项。和一维插值的4种方法一致。

【例4-41】  三维插值函数interp3示例。

>> [x,y,z,v]=flow(8);                             %  flow是MATLAB自带的测试函数

>> slice(x,y,z,v,[3,5],2,[-2,3])                  % 画切片图

>> title('插值前')

>>[xi,yi,zi]=meshgrid(0.1:0.25:10,-3:0.25:3,-3:0.25:3);  %  创建插值点数据网格

>> vi=interp3(x,y,z,v,xi,yi,zi);                            %  插值

>> figure

>> slice(xi,yi,zi,vi,[3,5],2,[-2,3])                        %  画插值后切片图

>> title('插值后')

插值前的flow函数如图4-7所示,进行三维插值之后的结果如图4-8所示。

图4-7 插值前函数图

图4-8  插值后函数图

4.5.4  样条插值

样条函数产生的基本思想是:设有一组已知的数据点,目标是找一组拟合多项式。在拟合过程中,对于此数据组的每个相邻样点对(Breakpoints),用三次多项式去拟合样点之间的曲线。为保证拟合的唯一性,对该三次多项式在样点处的一阶、二阶导数加以约束。这样除被研究区间端点外,所有内样点处可保证样条有连续的一阶、二阶导数。

MATLAB中提供了spline函数来进行样条插值。spline函数的调用语法如下。

(1)yy = spline(x,y,xx):根据样点数据(x,y),求xx所对应的三次样条插值。

(2)pp = spline(x,y):从样点数据(x,y)获得逐段多项式样条函数数据pp。

【例4-42】  样条插值spline函数应用示例。

>> x = -4:4;

>> y = [0 .15 1.12 2.36 2.36 1.46 .49 .060];         %  插值前数据

>> cs = spline(x,[0 y 0]);                              %  插值

>> xx = linspace(-4,4,101);                              % 创建绘图自变量数组

>> plot(x,y,'o',xx,ppval(cs,xx),'-');                  %  绘制结果图

得到的结果如图4-9所示。

图4-9  样条插值

编辑:青樱、蓬荜生辉、倾国倾城

复核:数韵校园工作室

如你对话题感兴趣,

matlab中如何求插值点,MATLAB插值相关推荐

  1. matlab中如何求零极点,Matlab中绘制零极点

    <Matlab中绘制零极点>由会员分享,可在线阅读,更多相关<Matlab中绘制零极点(2页珍藏版)>请在人人文库网上搜索. 1.ZPLANE Z-plane zero-pol ...

  2. matlab 中序列求极值的方法,Matlab中求序列的极值

    我们知道,在Matlab中有专门求序列最大值和最小值的函数,分别是Max 和 Min,但是有时候我们不满足于求整个序列的最值,而是对序列的极值,也就是局部的最值感兴趣.对于解析函 数,这个比较简单,只 ...

  3. matlab中的timer模块,[转载]Matlab中Timer的使用

    Matlab中Timer的使用 鉴于Matlab中缺乏多线程机制,使用Timer无疑是一个很重要的工具,Matlab中Timer是一个Java对象. (1)Timer 的定义 t=timer(); 设 ...

  4. m 文件 dll matlab 中调用_如何在matlab中调用python程序

    现在python很火,很多代码都是python写的,如果你和我一样,习惯了使用matlab,还想在matlab中调用Python的代码,应该怎么办呢?其中一条思路:首先在matlab中调用系统脚本命令 ...

  5. matlab中m文件是什么,MATLAB中M文件的使用

    运行方法: 使用matlab的时候,可以在"Command Window"内直接书写matlab代码,也可以将代码保存到M文件中,然后运行该文件.使用matlab主界面菜单&quo ...

  6. matlab 如何axis,在matlab中axis是什么意思,matlab中axis的用法

    在matlab中axis是什么意思轴在matlab中是什么意思,matlab中的Axis是指在绘图中通常使用axis函数来设置坐标值的范围,在matlab的命令窗口中输入doc轴或help轴即可获得该 ...

  7. 在MATLAB中使用数学符号,在matlab中怎么输入特殊符号 function在MATLAB中怎么用

    导航:网站首页 > 在matlab中怎么输入特殊符号 function在MATLAB中怎么用 在matlab中怎么输入特殊符号 function在MATLAB中怎么用 相关问题: 匿名网友: 一 ...

  8. matlab中内插cubic,cubic与spline插值点处的区别

    cubic与spline都是Matlab的三次样条插值法,但是它们在插值点处仍然有着很微妙的区别,这个区别说明不了两种方法的好坏,只能根据实际情况进行合理筛选.以一维插值为例: clc clear % ...

  9. matlab对多项式求导,matlab中多项式求导

    1 0.5 0 -0.5 -1 -1.5 -2 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 4.对比用多项式函数的 polyder 函数及符号函数中的 diff 函数,求导 x2+2x ...

  10. 在matlab用泰勒级数求,急 在matlab中写个用泰勒级数计算arctan(x)的方程

    例如,已bai知tan(x)=√3/3,求x.程序如下:dux=atan(sqrt(3)/3):运行结果:zhix = 0.5236 %得到的是弧度:一般我dao们习惯用角度来内表示.如下容转化:x= ...

最新文章

  1. 2020-11-24(Windows保护模式学习笔记(1)—— 段寄存器与段权限检查)
  2. android 过滤cmcc,Android 无法通过cmcc wap2.0 test解决
  3. 【Java】Float计算不准确
  4. MFC导出对话框类DLL的实现
  5. ArcGIS实验教程——实验九:矢量数据提取
  6. winform窗体中嵌入显示Excel文件
  7. java string 字典序_[小白问题] Java 中路径 String 的字典序排序
  8. odoo10参考系列--ORM API 三(字段、继承与扩展、域和更新到新API)
  9. Java,Android 汉明窗 Hanmming
  10. Maya动画后期——粒子特效的制作
  11. dict.txt(上一个程序的文件)
  12. 京东app后台多端融合架构代码重构实战
  13. ArcEngine实现要素类排序的四种方法
  14. 云计算的发展趋势是什么?
  15. 这个年龄计算程序相当不科学,体验还是差差哒
  16. SSM在线车队货车管理系统
  17. Java堆外内存:堆外内存回收方法
  18. android 打包多个apk注意事项:
  19. signature=db6ed02c38e9be97bad334d194c3133d,来用百度密语吧!!!
  20. win10 病毒实时防护 关闭

热门文章

  1. 苹果手机投屏软件_苹果手机怎样投屏到笔记本?
  2. 期权、期货及其他衍生品 Chapter14 维纳过程与伊藤引理
  3. 数学对数 log lg ln 简介
  4. openmp矩阵乘法
  5. 数据库与REDIS缓存数据一致性解决方案
  6. comsol兼容服务器系统,comsol 云服务器
  7. 网络七层协议结构分析图
  8. 微信境外支付(附PHP例子,JAVA工具类)
  9. python爬取电子病历_利用 BERT 模型解析电子病历
  10. 【IDEA】idea工程打包成jar包