本文主要记录Matlab中常用的一维插值与函数拟合的使用方法

文章目录

  • 前言
  • 一、一维插值
  • 二、函数拟合
    • 2.1 多项式拟合
      • 2.1.1多项式拟合指令
      • 2.1.2 图形窗口的多项式拟合
    • 2.2 指定函数拟合
  • 参考资料

前言

最近在学习数学建模,这部分关于怎么使用Matlab,刚好记录下来,做电赛的时候这些常用的插值、拟合工具也是需要学习的,刚开始学,写的不好,欢迎大家批评指正。


以下是本篇文章正文内容

一、一维插值

用MATLAB软件求解插值问题
在MATLAB中提供了一个一维插值函数interp1, 它的调用格式为
cy=interp1(x , y , cx , ‘method’)
其中x、y是所给数据的横纵坐标,要求x的分量按升序或降序排列,cx是待求的插值点的横坐标,返回值cy是待求的插值点的纵坐标,method是插值方法, 该函数提供了四种可选的插值方法:

  1. nearest——最邻近点插值。 点和这两已知点间位置的远近来进行插值,取较近已知 它根据已知两点间的插值 插值点处的函数值作为未知插值点处的函数值。
  2. linear——线性插值。它将相邻的数据点用直线相连, 按所生成的直线进行插值。
  3. spline——三次样条插值。它利用已知数据求出样条 函数后,按样条函数进行插值。
  4. cubic——三次插值。它利用已知数据求出三次多项式 函数后,按三次多项式函数进行插值。(在我的Matlab2019b中名为pchip)
    缺省时插值方法为分段线性插值。

下面用该函数来求解下列插值问题。
对于下面给定的4组数据,求在x=110处 y的值。

x y
100 10
121 11
144 12
169 13

很明显,我们可以看出这组数据符合函数y=sqrt(x);
我们用科学计算器得到一个解cy*=10.4880。
接下来我们使用Matlab进行插值计算:
输入命令:

x=[100 121 144 169];
y=[10 11 12 13];
cx=110;
cy1=interp1(x,y,cx,'nearest');
cy2=interp1(x,y,cx,'linear');
cy3=interp1(x,y,cx,'pchip');
cy4=interp1(x,y,cx,'spline');

运行结果依次为 cy1 = 10、cy2 =10.4762、cy3 = 10.4869、cy4 = 10.4877 通过比较cy* = 10.4880,显然三次样条插值的结果最好。

二、函数拟合

2.1 多项式拟合

将数据点按多项式的形式进行拟合,使用最小二乘法可以确定多项式的系数,多项式拟合有指令语句和图形窗口两种方法。

2.1.1多项式拟合指令

polyfit(X,Y,N):多项式拟合,返回降幂排列的多项式系数。
polyval(P,xi):计算多项式的值。
其中,X,Y是数据点的值;N是拟合的最高次幂;P是返回的多项式系数;xi是要求点的横坐标。
例如对下面的数据进行多项式拟合。

x 1 2 3 4 5 6 7 8 9
y 9 7 6 3 -1 2 5 7 20

拟合的命令如下:

x = [1 2 3 4 5 6 7 8 9];
y = [9 7 6 3 -1 2 5 7 20];
P = polyfit(x,y,3);
xi = 0:0.2:10;
yi = polyval(P,xi);
plot(xi,yi,x,y,'r*');

得到的拟合曲线与原始数据的对照如图

2.1.2 图形窗口的多项式拟合

在图形窗口可以用菜单方式对数据进行简单、快速、搞笑的拟合。与2.1.1数据相同,先画出数据点:

x = [1 2 3 4 5 6 7 8 9];
y = [9 7 6 3 -1 2 5 7 20];
plot(x,y,'r*');

然后在图形窗口单击Tools(工具)->Basic Fitting(基本拟合),打开对话框,并按下图进行操作,其中分别用线性、二阶、三阶对数据进行了多项式拟合,下面的柱状图显示残差,可以看出,进行三阶多项式拟合的效果是最好的,与前述结果一样。

2.2 指定函数拟合

在Matlab中也可以用用户自定义的函数进行拟合。通过下面的例子可以了解用指定函数进行数据拟合的基本方法。

x 0 0.4 1.2 2 2.8 3.6 4.4 5.2 6 7.2 8 9.2 10.4 11.6 12.4 13.6 14.4 15
y 1 0.85 0.29 -0.27 -0.53 -0.4 -0.12 0.17 0.28 0.15 -0.03 -0.15 -0.071 0.059 0.08 0.032 -0.015 -0.02

在Matlab中先用命令画出上述的散点图:

x = [0 0.4 1.2 2 2.8 3.6 4.4 5.2 6 7.2 8 9.2 10.4 11.6 12.4 13.6 14.4 15];
y = [1 0.85 0.29 -0.27 -0.53 -0.4 -0.12 0.17 0.28 0.15 -0.03 -0.15 -0.071 0.059 0.08 0.032 -0.015 -0.02];
plot(x,y,'r*');


知道其对应的函数形式为 f ( t ) = a c o s ( k t ) e w t f(t) = acos(kt)e^{wt} f(t)=acos(kt)ewt,则可用Matlab进行拟合,程序如下:

syms t
x = [0;0.4;1.2;2;2.8;3.6;4.4;5.2;6;7.2;8;9.2;10.4;11.6;12.4;13.6;14.4;15];
y = [1;0.85;0.29;-0.27;-0.53;-0.4;-0.12;0.17;0.28;0.15;-0.03;-0.15;-0.071;0.059;0.08;0.032;-0.015;-0.02];
f = fittype('a*cos(k*t)*exp(w*t)','independent','t','coefficients',{'a','k','w'});
cfun = fit(x,y,f);
xi = 0:0.1:20;
yi = cfun(xi);
plot(x,y,'r*',xi,yi,'b-');

运行结果如图:

参考资料

《MATLAB在数学建模中的应用》卓金武《北京航空航天大学出版社》 , 2011.4


有用的话点个赞吧!

MATLAB中的一维插值与函数拟合相关推荐

  1. Matlab中用于数据预测spline()函数的使用

    Matlab中用于数据预测spline()函数的使用 ​ 再matlab中spline函数是利用三次方样条数据插值 语法 s = spline(x,y,xq) pp = spline(x,y) s = ...

  2. 【智能控制实验】基于MATLAB的BP神经网络实现非线性函数拟合设计

    基于MATLAB的BP神经网络实现非线性函数拟合设计 一.实验要求: 重点是掌握BP神经网络的学习算法原理,掌握matlab工具箱设计BP神经网络拟合非线性模型的方法(m文件):掌握在图形用户界面下设 ...

  3. matlab中load seamout,matlab中的save与load函数

    matlab中的save与load函数 用save函数,可以将工作空间的变量保存成txt文件或mat文件等. 比如: save peng.mat p j 就是将工作空间中的p和j变量保存在peng.m ...

  4. 邹检验 matlab,科学网—Matlab中一个很有用的函数:regionprops - 邹兴文的博文

    Matlab中一个很有用的函数:regionprops 已有 6712 次阅读 2010-1-30 22:52 |个人分类:开发经验|系统分类:科研笔记| 有用的函数, regionprops Mat ...

  5. 函数调用matlab,Matlab中一个函数调用另外一个函数的操作方法

    这篇文章为各位带来的内容是Matlab中一个函数调用另外一个函数相关的,对此感兴趣的用户可以去下文看看Matlab中一个函数调用另外一个函数的操作教程. Matlab中一个函数调用另外一个函数的操作方 ...

  6. matlab怎么调用主函数,Matlab中一个函数调用另外一个函数的操作步骤

    原创Matlab中一个函数调用另外一个函数的操作步骤 编辑:小安 来源:PC下载网时间:2019-11-18 13:27:35 最近很多伙伴才刚刚安装入手Matlab这款软件,而本节就重点介绍了关于M ...

  7. Matlab中产生正态分布随机数的函数normrnd-----用来产生高斯随机矩阵

     Matlab中产生正态分布随机数的函数normrnd-----用来产生高斯随机矩阵 功能:生成服从正态分布的随机数 语法: R=normrnd(MU,SIGMA) R=normrnd(MU,SI ...

  8. Matlab中print, fprint, fscanf, disp函数的用法

    最近一直在用python,导致学习的一些函数就有点混淆,趁着这会儿看代码,就再回顾下Matlab中print, fprint, fscanf, disp函数的用法 一.print() 函数可以把函数图 ...

  9. MATLAB中常用到的绘图函数

    有关命令行环境的一些操作: (1) clc 擦去一页命令窗口,光标回屏幕左上角 (2) clear 从工作空间清除所有变量 (3) clf 清除图形窗口内容 命令1  figure 功能  创建一个新 ...

最新文章

  1. JAVA大一新生要用电脑吗,大一新生有没有必要买电脑?辅导员:倘若不是这三点原因尽量别买...
  2. android GLES20 color
  3. maxwell中文汉化补丁_《我的世界:地下城》中文剧情流程攻略 通关视频流程
  4. 重要的基础注解@import
  5. boost::geometry::intersection用法的测试程序
  6. React和设计良好的jQuery插件并没有什么不兼容的问题。
  7. 深度学习之卷积神经网络(1)什么是卷积
  8. Taro+react开发(19)--arr声明const报错
  9. 揭秘阿里中台!一文看懂阿里推荐业务的两大利器 | 赠书
  10. andriod socket开发问题小结
  11. matlab卷积动画实现
  12. 电脑扬声器耳机已拔出
  13. 【AIS学习】06:AIS缩略语
  14. “Android开发3年老板嫌我工资高,把我辞了…”
  15. 国科大--多媒体分析与理解--2019考试试题
  16. PE制作实录 —— 补充说明
  17. ubuntu安装docker详细教程以及配置阿里云镜像加速
  18. 即时通讯源代码,im源码功能全套
  19. matlab的整流信号,基于MATLAB的单相桥式整流电路研究
  20. php论坛仿v2ex,一个仿V2EX的开源二次元论坛程序|Vmoex安装教程

热门文章

  1. 用代码“读懂”代码:衡量开发交付质量(微服务度量之一)
  2. 【课程设计】c语言ege库实现五子棋人机和人人对战
  3. 评价一个交换机是否合格(包转发率和交换容量)指标
  4. 损失函数——交叉熵损失函数(CrossEntropy Loss)
  5. 产品设计的步骤有哪些?
  6. png 与jpg的区别
  7. Microsoft Store微软应用商店打开报错“0x80131500”或“0x80072EFD”解决方案
  8. 想来武汉工作么?---软件人 武汉求职、工作、生活体验报告(1)
  9. jvm YGC和FGC发生的具体场景
  10. 谷歌Chrome浏览器在新标签页打开书签链接的五个方法