MATLAB曲线拟合的应用

更新时间:2023-09-02 01:41:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MATLAB曲线拟合的应用 

王磊品 吴东 

新疆泒犨泰克石油科技有限公司 新疆油田公司准东采油厂信息所 

 

摘  要:1.阐述MATLAB数学分析软件的基本功能; 

2.对MATLAB在生产数据分析中的应用进行了研究,指出曲线拟合的基本方法; 3.以实例阐明MATLAB与行业生产数据结合对生产数据进行分析的原理。 关键词:MATLAB;曲线拟合;插值 

 

1. 引言 

在生产开发过程中,复杂的生产数据之间或多或少的存在着这样或者那样的联系,如何利用现今普及的计算机以及网络资源在最短的时间内找到这个联系,以指导我们的生产开发,这对于行业科研人员来说无疑是一个最为关心的问题。MATLAB矩阵分析软件,自推出以来,已成为国际公认的最优秀的数学软件之一,其范围涵盖了工业、电子、医疗以及建筑等各个领域,以其强大的科学计算功能使众多科研机构纷纷采用。 

为此,本文从介绍MATLAB软件开始,以实例讲述如何使用MATLAB对生产开发数据进行计算与分析,从而达到高效、科学指导生产的目的。 

2. MATLAB简介 

MATLAB是MathWorks公司于1982年推出的一套高性能的数值计算和可视化数学软件。由于使用编程运算与人进行科学计算的思路和表达方式完全一致,所以不象学习其它高级语言那样难于掌握,用Matlab编写程序犹如在演算纸上排列出公式与求解问题, 所以又被称为演算纸式科学算法语言。在这个环境下,对所要求解的问题, 用户只需简单地列出数学表达式,其结果便以数值或图形方式显示出来。  

MATLAB的含义是矩阵实验室(MATRIX LABORATORY),主要用于方便矩阵的存取,其基本元素是无须定义维数的矩阵。自问世以来, 就是以数值计算称雄。MATLAB进行数值计算的基本单位是复数数组(或称阵列),这使得MATLAB高度 “向量化”。经过十几年的完善和扩充,现已发展成为线性代数课程的标准工具。由于它不需定义数组的维数,并给出矩阵函数、特殊矩阵专门的库函数,使之在求解诸如信号处理、建模、系统识别、控制、 优化等领域的问题时,显得大为简捷、高效、方便,这是其它高级语言所不能比拟的。美国许多 大学的实验室都安装有供学习和研究之用。 

MATLAB中包括了被称作工具箱(TOOLBOX)的各类应用问题的求解工具。工具箱实际上是对MATLAB进行扩展应用的一系列 MATLAB函数(称为M文件),它可用来求解各类学科的问题,包括信号处理、图象处理、控制系统辨识、神经网络等。随着 MATLAB版本的不断升

级,其所含的工具箱的功能也越来越丰富,因此,应用范围也越来越广泛,成为涉及数值分析的各类工程师不可不用的工具。  

MATLAB中包括了图形界面编辑GUI,改变了以前单一的“在指令窗通过文本形的指令进行各种操作的状况。这可让使用者也可以像VB、VC、VJ、DELPHI等那样进行一般的可视化的程序编辑。在命令窗口(matlab command window)键入simulink,就出现(SIMULINK) 窗口。以往十分困难的系统仿真问题,用 SIMULINK只需拖动鼠标即可轻而易举地解决问题,这也是近来受到重视原因所在。 

3. 曲线拟合与插值 

在大量的应用领域中,人们经常面临用一个解析函数描述数据(通常是测量值)的任务。对这个问题有两种方法。在插值法里,数据假定是正确的,要求以某种方法描述数据点之间所发生的情况。这种方法在下一节讨论。这里讨论的方法是曲线拟合或回归。人们设法找出某条光滑曲线,它最佳地拟合数据,但不必要经过任何数据点。 

3.1. 曲线拟合 

曲线拟合涉及回答两个基本问题:最佳拟合意味着什么?应该用什么样的曲线?当最佳拟合被解释为在数据点的最小误差平方和,且所用的曲线限定为多项式时,那么曲线拟合是相当简捷的。数学上,称为多项式的最小二乘曲线拟合。对各数据点距离求平方,并把平方距离全加起来,就是误差平方和。这条虚线是使误差平方和尽可能小的曲线,即是最佳拟合。最小二乘这个术语仅仅是使误差平方和最小的省略说法。 

在MATLAB中,函数polyfit求解最小二乘曲线拟合问题。 

 

 

11.2]; 

为了用polyfit,我们必须给函数赋予上面的数据和我们希望最佳拟合数据的多项式的阶次或度。如果我们选择n=1作为阶次,得到最简单的线性近似。通常称为线性回归。相反,如果我们选择n=2作为阶次,得到一个2阶多项式。现在,我们选择一个2阶多项式。 

 

   ? n=2; %给定阶数 ? p=polyfit(x, y, n)%输出多项式向量 ? x=[0  .1  .2  .3  .4  .5  .6  .7   .8  .9  1]; ? y=[-.447  1.978  3.28  6.16  7.08  7.34  7.66  9.56  9.48  9.30  

polyfit输出一个多项式系数的行向量。其解是y =-9.8108x2 +20.1293x-0.0317。为了将曲线拟合解与数据点比较,让我们把二者都绘成图。 

 

? xi=linspace(0, 1, 100);%生成100个点的行向量  ? z=polyval(p, xi);%计算在xi数据点的多项式值 ? plot(x,y,'o',x,y,xi,z,':')%绘图 

画出了原始数据x和y,用'o'标出该数据点,在数据点之间,再用直线重画原始数据,并用虚线画出多项式数据xi和z。 

 

? xlabel('x'),ylabel('y=f(x)'),title('2阶曲线拟合')%标志 

多项式阶次的选择是由任意的。两点决定一条直线或一阶多项式,三点决定一个平方或2阶多项式。按此进行,n+1数据点唯一地确定n阶多项式。于是,在上面的情况下,有11个数据点,我们可选一个高达10阶的多项式。然而,高阶多项式给出很差的数值特性,人们不应选择比所需的阶次高的多项式。此外,随着多项式阶次的提高,近似变得不够光滑,因为较高阶次多项式在变零前,可多次求导。例如,选一个10阶多项式 

 

 

  ? pp=polyfit(x, y, 10); ? format short e ? pp.' 

要注意在现在情况下,多项式系数的规模与前面的2阶拟合的比较。还要注意在最小(-4.4700e-001)和最大(5.8233e+006)系数之间有7个数量级的幅度差。将这个解作图,并把此图与原始数据及2阶曲线拟合相比较,让我们来看一下结果: 

 

 

 ? zz=polyval(pp, xi); ? plot(x, y, ' o ' , xi, z, ' : ' , xi, zz) ? xlabel(‘x’),ylabel('y=f(x)'),title(' 2阶和10阶插值 ') 

在下面的图3.1中,原始数据标以'o',2阶曲线拟合是虚线,10阶拟合是实线。注意,在10阶拟合中,在左边和右边的极值处,数据点之间出现大的纹波。当企图进行高阶曲线拟合时,这种纹波现象经常发生。根据图1,显然,点越多就越好的观念在这里不适用。 

 

图1  2阶和10阶曲线拟合 

3.2. 一维插值 

正如在前一节对曲线拟合所描述的那样,插值定义为对数据点之间函数的估值,这些数据点是由某些集合给定。当人们不能很快地求出所需中间点的函数值时,插值是一个有价值的工具。例如,当数据点是某些实验测量的结果或是过长的计算结果时,就有这种情况。 

如曲线拟合一样,插值要作决策。根据所作的假设,有多种插值。而且,可以在一维以

上空间中进行插值。即如果有反映两个变量函数的插值,z=f(x, y),那么就可在x之间和在y之间,找出z的中间值进行插值。MATLAB在一维函数interp1和在二维函数interp2中,提供了许多的插值选择。 

为了说明一维插值,考虑下面的问题:抽油机在从下行点走到上行点所经过的上行过程中油杆位移量与载荷量的关系。假设抽油机油杆的运动从1米到4米位移均匀,我们在这段位移范围内均匀测量20个油杆的载荷数据。数据存储在两个MATLAB变量中。 

? s=linspace(1,4,20);%生成20个点的位移值,存入向量s 

? wellload=[22.31, 22.31, 22.61, 22.61, 22.91, 23.06, 23.35, 23.8, 24.4, 24.69, 24.99, 25.44, 27.07, 27.82, 28.56, 29.01, 30.05, 30.94, 32.28, 33.47]; %将20个点的载荷值存入向量wellload 

? plot(s,wellload,s,wellload,’o’)%绘制功图 

? title(' 功图 ')%添加标题 ? xlabel(' 位移'),ylabel('载荷')%添加坐标轴名称 

 

图2  在线性插值下功图曲线 

正如图2看到的,MATLAB画出了数据点线性插值的直线。为了计算在任意给定位移的载荷值,我们可用函数interp1。 

? t=interp1(s,wellload,1.36)%估算在1.36位移处的载荷值 

? t=interp1(s,wellload,[2.35,3.2,3.89])%三个位移值的载荷 

interp1的缺省用法是由interp1(x, y, xo)来描述,这里x是独立变量(横坐标),y是应变量(纵坐标),xo是进行插值的一个数值数组。另外,该缺省的使用假定为线性插值。 

若不采用直线连接数据点,我们可采用某些更光滑的曲线来拟合数据点。最常用的方法是用一个3阶多项式,即3次多项式,来对相继数据点之间的各段建模,每个3次多项式的头两个导数与该数据点相一致。这种类型的插值被称为3次样条或简称为样条。函数interp1

也能执行3次样条插值。如: 

 

 ? t=interp1(s,wellload,1.36, 'spline')%计算在1.36位移处的载荷值 ? t=interp1(s,wellload,[2.35,3.2,3.89],'spline')%三个位移值的载荷 

注意,样条插值得到的结果,与上面所示的线性插值的结果不同。因为插值是一个估计或猜测的过程,应用不同的估计规则会得到不同的结果。 

一个最常用的样条插值是对数据平滑。也就是,给定一组数据,使用样条插值在更细的间隔求值。如:(接前面的例子) 

 

 

 

 

 ? s1=1:0.1:4;%每0.1米位移估算一次载荷 ? load=interp1(s,wellload,s1,'spline');%用三次样条估算载荷 ? plot(s,wellload,'-',s,wellload,'+',s1,load)%绘图 ? title('功图')%添加标题 ? xlabel('位移'),ylabel('载荷')%添加坐标轴标题 

在图3中,虚线是线性插值,实线是平滑的样条插值,标有' + '的是原始数据。如要求在位移轴上有更细的间隔,并使用样条插值,我们有一个更平滑、但不一定更精确地对载荷的估计曲线。尤其应注意,在数据点,样条解的斜率不突然改变,即更为平滑。作为这个平滑插值的回报,3次样条插值要求更大量的计算,因为必须找到3次多项式以描述给定数据之间的特征。 

 

图3 在不同插值下功图曲线 

3.3. 小结 

下面的表1总结了在MATLAB中所具有的曲线拟合和插值函数。 

 

 曲 线 拟 合 和 插 值 函 数 

polyfit(x, y, n) 对描述n阶多项式y=f(x)的数据进行最

小二乘曲线拟合 

interp1(x, y, xo) 

interp1(x, y, xo, ' spline')  

interp1(x, y, xo, ' cubic ') 

interp2(x, y, Z, xi, yi) 

interp2(x, y, Z, xi, yi,' cubic') 1维线性插值 1维3次样条插值 1维3次插值 2维线性插值 2维3次插值 

interp2(x, y, Z, xi, yi, ' nearest ') 2维最近邻插值 

表1 

4. 结论 

本文从最基础的角度对MATLAB矩阵计算软件进行了介绍,阐述了其功能所涵盖的范围。 在曲线拟合与插值方面进行讨论,说明了MATLAB在工业生产开发中的应用。 

参考文献 

1 MATLAB工程计算及其应用        【人民邮电出版社】 

2 MATLAB基础与编程入门          【西安电子科技大学出版社】 

3 MATLAB与外部程序接口          【电子工业出版社】 

 

MATLAB曲线拟合的应用

作者:

作者单位:王磊品, 吴东王磊品(新疆泒犨泰克石油科技有限公司), 吴东(新疆油田公司准东采油厂信息所)

本文读者也读过(4条)

1. 王斌.WANG Bin 基于MATLAB的数值计算——插值及曲线拟合[期刊论文]-阴山学刊(自然科学版)2006,20(4)

2. 杨云升.YANG Yun-sheng Matlab曲线拟合及其在试验数据处理中的应用[期刊论文]-电脑与信息技术2009,17(2)

3. 熊学辉 用改进单纯形法优化由Matlab曲线拟合得到的表达式[期刊论文]-黄冈师范学院学报2003,23(3)

4. 伦冠德.LUN Guan-de MATLAB曲线拟合工具箱在试验数据处理上的应用[期刊论文]-拖拉机与农用运输车2006,33(4)

本文链接:http://www.77cn.com.cn/Conference_6451471.aspx

本文来源:https://www.bwwdw.com/article/fobi.html

Top