MATLAB曲线拟合的应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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求解最小二乘曲线拟合问题。

» 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 11.2];

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

» n=2; %给定阶数

» p=polyfit(x, y, n)%输出多项式向量

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(' 功图 ')%添加标题

相关文档
最新文档