Matlab在曲线拟合中的应用

2017-06-13 13:25徐娇艳
科学与财富 2017年16期
关键词:曲线拟合数据误差

徐娇艳

摘要:近年来利用Matlab进行曲线拟合解决问题的情况较多。本文通过比较介绍了Matlab在曲线拟合中的常见应用方法 。

关键词:数据 曲线拟合 误差

曲线拟合是用连续曲线近似地描述平面上离散点组所表示的坐标之间函数关系或内在规律的一种数据处理方法。在实际工作中,通过实验或观测到x与y的一组数据对(xi,yi),i=l,2,…,m,其中各xi是不同的。人们希望用一类与数据规律相切合的函数表达式y=f(x,c)来反映量x与y之间的关系,即在某种程度上"最佳"地拟合已知数据。f(x,c)称作拟合函数,其图像称作拟合曲线,c为待定参数[1]。C++和Fortran等传统的语言编程也能实现拟合算法,但工作量大且繁琐。Matlab提供了强大的矩阵处理和绘图功能,操作简便,能高效求解各种复杂工程问题并实现计算结果的可视化。Matlab本身有拟合函数,还有一个曲线拟合工具箱[2]。

拟合求得数学模型后要将实际测定的数据与用公式求出的理论值进行比较,判定其误差程度[1]。根据这个误差衡量拟合曲线的优劣。

以90系列液压泵在工作压力210bar及420bar下的典型容积效率曲线(图1)为例来求解泵的转速与容积效率函数关系式。从图上取几组数据来研究泵的转速与容积效率关系(相同压力下机械效率ηt可视为定值,当p=420bar时):

先在Matlab工作窗口中输入下面程序,将已有数据绘在坐标图上,如图2。

x=[585 663 975 1365 1716 2340 2925 3510 3900];

y=[0.83 0.85 0.875 0.89 0.90 0.91 0.914 0.917 0.915];

plot(x,y,'r*'),legend('实际数据(n,ηv)'),xlabel('n(r/min))'),ylabel('ηv ')

Matlab中求拟合的方法较多,下面对几种常见的方法进行介绍。

1.线性最小二乘法

基本思路是选定一个含有待定系数的函数,使已有数据点与此函数曲线的距离平方和最小,再求出待定系数。此处以三阶函数为例(转速和效率分别用x、y表示):

1)编程法

fi=a1.*x.^3+a2.*x.^2+a3.*x+a4

解得拟合函数f及其系数如下:

f=7078176274323559/1237940039285380274899124224*x^3-

7683900961798595/151115727451828646838272*x^2+

5538405443557303/36893488147419103232*x+

3449538203694265/4503599627370496

运行后显示数据与拟合函数f的最大误差Ew=0.0075,平均误差E1=0.0034和均方根误差E2=0.0040及数据点与拟合曲线的图形,如图3所示。

可见,所得拟合曲线基本符合数据点的变化规律,最大误差、平均误差和均方根误差都比较小,但精度不是很好。

2)内建函数法

前面提到过Matlab本身有用于曲线拟合的内建函数,例如polyfit函数,命令polyfit(x,y,n)就是用最小二乘法对所给数据进行n阶多项式拟合,返回拟合多项式p(x),使得p(x(i))~=y(i)。用polyfit函数对所取数据进行曲线拟合[2],发现采用内建函数法所得3阶多项式的系数与编程法一样。但前者程序复杂,数据很大,运行时对计算机的要求高。相比后者就显得非常简便,只需調用一个命令。但拟合精度都不太高。并且我们还计算了4阶、5阶、6阶的拟合曲线,发现阶数越高,拟合曲线经过的数据点就越多。且拟合的阶数太高,Matlab系统自动给出警告信息,提醒过高的阶数会产生不太好的结果。

2.插值逼近法

插值法是根据数据的分布规律,找到一个函数来连接已知的各点。这里介绍一维插值, Matlab中一维插值可由interpl()函数求解。例如y1= interpl(x,y,x1,方法),其中x、y分别表示给定的一组自变量和函数值,x1为一组新的插值点,得出的y1是在插值点处的结果。常用的插值函数有:分段线性插值、Hermite插值及三次样条插值等。下面用三种插值方法进行拟合。输入x、y对应的数据组及方法后,运行结果如图5所示。

总体上看:分段线性插值曲线不太光滑;三次样条插值运行时间很长;三次Hermite插值占用内存最大。实际问题中,应综合考虑插值函数的收敛性、稳定性以及光滑性的来选择。

3.曲线拟合工具箱

曲线拟合工具箱是专门为数据集合进行曲线拟合而设计的。它集成了用Matlab建立的图形用户界面和M文件函数。利用工具箱的库方程(如线性,二次,高阶多项式,指数,傅立叶等)或是用户自定义函数进行参数拟合。在Matlab的命令窗口里输入 x和y的数据组,接着输入"cftool"命令,进入曲线拟合工具箱界面。

1)点击"Data"按钮,修改数据集名将曲线命名为ηv vs. n,然后点击"Create data set"按钮,返回工具箱界面,这时发现已经自动画出数据集的曲线图[3];

2)点击"Fitting"按钮,修改拟合项目名称为ηv vs. n。然后选择拟合曲线的类型,工具箱提供的类型有:用户自定义的函数类型、指数、傅立叶、高斯、插值和多项式等11种[3]。

选好后点击"Apply"按钮,在Results框中得到如下拟合结果:

对比发现,有理数分子分母为线性的拟合曲线最接近已知泵的转速效率曲线,其拟合结果为:

函数形式 f(x) = (p1*x + p2) / (x + q1)

其方差3.851e-005,决定系数0.9951,校正后的决定系数0.9935,标准差0.002533,方差和标准差接近0、决定系数和校正后的决定系数接近1表示较好的拟合结果。而有理数分子分母为线性的拟合方差和标准差最小,两个系数最接近1。故p=420bar时,泵的转速和容积效率函数关系式近似为:

ηv= (0.9293n-143)/(n-103.7)

此时直接选用有理数分子分母为线性的曲线拟合,得出p=210bar时,泵的转速和容积效率函数关系式近似为:

ηv= (0.9685n-202.4)/(n-196.8)

此处所选有理数分子分母为线性的曲线拟合只在本例中为最佳曲线拟合,不代表所以情况,不同情况要经过计算比较后确定。

参考文献

[1]申红莲. Matlab中曲线拟合的方法[J]. 福建电脑, 2010(7): 10-11

[2]百度文库. matlab曲线拟合. http://wenku.baidu.c, 2012-11-26

[3]晨宇思远. Matlab的曲线拟合工具箱CFtool使用简介.

猜你喜欢
曲线拟合数据误差
角接触球轴承接触角误差控制
Beidou, le système de navigation par satellite compatible et interopérable
压力容器制造误差探究
曲线拟合的方法
基于曲线拟合的投弃式剖面仪电感量算法
公路工程试验检测存在的问题及措施
一种借助数据处理构建的智能食堂管理系统
Matlab曲线拟合工具箱在地基沉降预测模型中的应用
Matlab曲线拟合法在地基沉降预测中的应用
九十亿分之一的“生死”误差