[转载]MATLAB在测量数据处理中的应用研究(1)
(2012-03-26 18:15:40)
标签:
转载 |
MATLAB在测量数据处理中的应用研究
摘
关键词:MATLAB;数据处理;减速器;热功率;软件应用
1.引言
在实际的实验和工程测量以及电子信号处理中,通常是通过不同的方式测得或采集到一些离散数据点,在对这些数据点进行利用之前,必须先对这些数据点进行分析和处理,如剔除误差较大的或明显不正确的点,以提高数据的准确性;有时由于条件限制,不能通过现有的测量手段得到希望的数据量,则可以通过测量其它的量, 并对所测得的数据进行运算, 便可间接地得到所希望的数据等等,这些都称为数据处理。目前,可以进行数据处理的数学软件大约有30多个,但是比较起来,它们在数值分析、算法处理和绘制图形等方面的效率远远低于MATLAB软件。
2.MATLAB简介
MATLAB是美国MathWorks公司从1984年开始推出的一种高性能数值计算软件, 经过多年来的升级、改进和不断完善,现已发展成为集数学运算、图形处理、程序设计和系统建模为一体的著名编程语言软件。MATLAB以矩阵运算为基础, 把计算、可视化、程序设计融合到一个交互的工作环境中,从而实现工程计算、仿真、数据分析及可视化、绘图、应用程序开发等功能。
MATLAB的产生是与数学计算紧密联系在一起的,它由主包和功能各异的工具箱组成;MATLAB采用的是交互式语言形式,使用极其简单方便;它的开发环境直观简洁,以矩阵作为基本数据单位进行数值运算;它的表达式与数学工程计算中常用的形式十分相似, 便于用户学习和使用。
MATLAB的主要功能包括: ①数值计算功能;②符号计算功能;③数据分析和可视化;④文字处理功能;⑤SIMULINK动态仿真功能。
MATLAB是开放的, 除了内部函数之外,所有的MATLAB主包文件和各工具包文件都是可读可改的源文件。用户可以作为参考掌握其用法, 并可对其修改以适应自己的需要, 也可加入自己编写的文件构成新的工具包。在欧美高等院校,MATLAB已经成为线性代数、数理统计、自动控制、数字信号处理、时间序列分析和动态系统仿真等高级课程的基本数学工具。
MATLAB系统主要由以下5部分构成:①MATLAB语言;②MATLAB工作环境;③MATLAB图形系统;④MATLAB数学函数库;⑤ MATLAB应用编程接口(API)。
现在的MATLAB支持各种操作系统,它可以运行在十几个操作平台上,其中比较常见的有Microsoft Windows,OS/2,Unix,Macintosh,Sun,Linux等平台的系统。系统要求为:IBM-PC或与之完全兼容的Intel 486,Pentium或以上的各种机型;内存要求至少8MB,推荐使用16MB;所需的硬盘空间与安装的内容有关,考虑到为硬盘留出足够的空间作为虚拟内存, 应当留有一定的剩余空间;8位以上的图形适配器和至少能显示256色的彩色显示器;有少数指令需要用到声卡;Micro-soft Windows 95,98或以上的中英文版本;如要使用Notebook,需要先安装Micro-soft Word 6.0或Office 97中的一种或以上版本;如要使用HTML格式的帮助文件, 需要先安装Netscape Navigator 2.0或Microsoft Internet Explorer 3.0或以上版本;如要使用PDF格式的帮助文件,需要先安装Adobe Acrobat Reader 。
在有FORTRAN和Visual C++编译器时MATLAB还可以与FORTRAN和Visual C++混合编程。MATLAB可以调用自己开发的C和FORTRAN子程序,通过MATLAB的API函数库将C或FORTRAN子程序编译成动态链接函数(库),即MEX文件,以便在MATLAB环境中直接调用或链接这些子程序,从而提高计算效率。利用MEX文件还可以使用一些软件,如Windows的用户界面资源等。
MATLAB具有用法简单、灵活、程序结构性强、延展性好等优点,已经逐渐成为科学计算、视图交互系统和程序中首选的编程语言工具。由于它功能强大、适合多学科和多种工作平台,所以在国外的大学里已经成为一种必须掌握的基本编程语言。而在国外的研究设计单位和工业部门中,MATLAB也已经成为研究和解决工程问题的软件。
3.MATLAB在测量数据处理中的应用
MATLAB在测量数据处理领域有着多个方面的应用,下面分别予以介绍。
3.1 简单数值运算
例如:随机地取8只活塞环,测得它们(样本)的直径分别为:74.001,74.005,74.003,74.001,74.000,73.998,74.006,74.002(单位:mm)。试求样本的平均值d、方差,标准差 和平均标准偏差 。
解:用MATLAB编程如下:
>>d=[74.001 74.005 74.003 74.001 74.000 73.998 74.006 74.002];k=8,
>>mean(d)
74.0020
6.8571e-006
0.0026
9.2582e-004
3.2 数据误差处理
对于测量所得的数据进行处理时,有时需要首先找出具有粗大误差的数据并将其剔除,这样可以增加测量的准确性。判断粗大误差的理论有拉依达准则和肖维涅准则,而肖维涅准则的精度更高。下面举例采用肖维涅准则先剔除粗大误差,然后再求平均值和标准误差。
例如:有一电阻测量值为:101.2,101.8,101.3,101.0,101.5,101.3,101.2,101.4,101.3,101.1(单位:Ω)。现求其平均值及其标准误差,如有异常值舍去。
解:用MATLAB编程如下:
>>R=[101.2 101.8 101.3 101.0 101.5 101.3 101.2 101.4 101.3 101.1];
>>R1=sort(R);
>>r=R1';
>>n=length(r);
>>mean1=mean(r);
>>std1=std(r);
>>c=log(n-1.69)/2.84+1.22-n/3300;
>>min=mean1-c*std1;
>>B=find(r< P>
>>m1=length(B);
>>max=mean1+c.*std1;
>>A=find(r>max);
>>m2=length(A);
>>k=r(m1+1:n-m2);
>>mean2=mean(k);
>>std2=std(k);
>>sprintf('%s%0.1f%s%0.1f%s', 'R =
',mean2, '±',std2, 'Ω')
ans=
R=101.3±0.2Ω
结果符合误差理论的要求,增加了科学性。
3.3 绘制数据图
MATLAB软件拥有强大的绘图功能,可以非常容易产生在测量数据处理中经常使用的柱形图和散点图,还可以用散点图描绘测量图线。这使图示图解法处理测量数据变得很方便,把一些繁杂的工作变得十分简单明了。
例如:平面光栅单色仪的使用实验中,波长和光强I的数据有几十个,见表1:
表1 -I关系表
如果用手工绘图将十分费事,使用MATLAB绘图命令就可很方便地绘出光谱图了。
解:用MATLAB编程如下:
>>x=300:20:800;
>>y=[1,2,7,25,62,120,218,368,546,732,919,1096,1252,1368,1446,1533,1538,1458,1258,988,696,
3.4 曲线拟合
一般地,由实验测得的数据经常会带有测量误差,如要求曲线通过所有测量数据点,实际上也就保留了一切测量误差,而这不是我们所希望的。因此,曲线拟合时,并不要求拟合曲线一定要通过测量数据点,而只要求在测量数据点Xi上的误差di=F(Xi)-Yi(i=0,1,...,m)按某种标准最小。这样,它就能反映这些离散数据的变化趋势,尽量避免出现局部的波动。曲线拟合方法是工程上处理测量数据的一种实用数学方法。
曲线拟合是运用最小二乘法、拉格朗日法、牛顿法等算法, 利用多项式或其它已知函数, 对所测得或采集到的离散数据点进行逼近。如用人工计算, 则计算量非常之大, 而且比较繁琐,若利用MATLAB软件, 则只需要几个语句就可完成。同时利用MATLAB强大的绘图功能,还可以将拟合而成的曲线绘制成图,使之一目了然。曲线拟合的好坏通常是以最小二乘原理作为衡量准则,因为在计算方法上它要比取其它准则方便和简单得多,且有足够的精度。根据最小二乘原理拟合出的图形可供试验报告中采用或手工计算时查找,得出的多项式可供理论分析或产品的CAD中使用。
在MATLAB中,调用polyfit函数可实现拟合过程,获得多项式的系数。若多项式的一般形式为y(x)=p
x +p x +…+p x+p
,那么获得多项式系数的语句是p=polyfit(x, y,
n)。其中,n是多项式的阶次,p=[ p
下面举例介绍曲线拟合的应用:
例如:目前,国内生产的低损耗中小型电力变压器的铁心材料基本上均采用晶粒取向冷轧硅钢片Z10-0.35,下面介绍该型号硅钢片单位重量的激磁容量Qt(单位:伏安/公斤)与铁心磁通密度Bt(单位:特斯拉)之间关系曲线的拟合。
Qt与Bt之间的关系如表2所示:
表2
Bt |
Bt |
Bt |
Bt |
Bt |
1.43 |
1.51 |
1.59 |
1.67 |
1.75 |
1.44 |
1.52 |
1.60 |
1.68 |
1.76 |
1.45 |
1.53 |
1.61 |
1.69 |
1.77 |
1.46 |
1.54 |
1.62 |
1.70 |
1.78 |
1.47 |
1.55 |
1.63 |
1.71 |
1.79 |
1.48 |
1.56 |
1.64 |
1.72 |
1.80 |
1.49 |
1.57 |
1.65 |
1.73 |
|
1.50 |
1.58 |
1.66 |
1.74 |
|
解:(1)先在命令窗口中建立测量数据的向量。
>>Bt=1.43:0.01:1.80;
>>Qt=[1.62 1.67 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.10 2.16 2.24 2.32 2.42 2.54 2.70 2.85 3.00 3.25 3.45 3.70 4.00 4.32 4.70 5.00 5.50 6.00 6.60 7.20 8.00 8.70 9.50 10.50 11.70 12.80 14.30 16.00 17.50];
(2)再用plot函数绘制图形。
>>plot(Bt,Qt,'x');
各测量数据点如图2中叉号所示,可看出它们的分布呈非线性。
(3)选择拟合多项式的阶数n为2。
用MATLAB编程如下:
>>n=2;
>>p=polyfit(Bt,Qt,n)
p=
177.0320
即得到拟合多项式为Qt=177.0320Bt -537.0538Bt+408.7708
>>z=polyval(p,Bt)
>>plot(Bt,Qt,'x',Bt,z,'--')
图3中的虚线为拟合后的曲线。
(4)若对拟合效果不满意理想,可逐渐提高拟合多项式的阶数n。
如采用4阶多项式拟合,用MATLAB编程如下:
>>n=4;
>>p=polyfit(Bt,Qt,n)
p=
1.0e+004 *
0.1587 -0.9623 2.1919 -2.2216 0.8453
即得到拟合多项式为Qt=1587Bt -9623Bt +21919Bt -22216Bt+8453
>>z=polyval(p,Bt)
>>plot(Bt,Qt,'x',Bt,z,'--')
图4中的虚线为根据上式拟合后的曲线。显然,4阶多项式拟合的效果比2阶的好得多。
理论上,n+1个数据点可以唯一地确定n阶多项式。实际上,如果多项式的阶数过高,虽然数据点上看到效果好,但数据点之间会出现数据振荡的问题,而且计算时间长;但如果阶数选择得过小,则拟合效果不好。因此实际应用中应合理选择阶数。
3.5 数值插值
插值法是数据处理中函数逼近的一种最简单的重要方法,插值定义为对数据点之间函数的估值方法,这些数据点是由某些集合给定的。当人们不能很快地求出所需中间点的函数值时,插值是一个有价值的工具。它假定测量数据是准确的,然后以某种方法描述数据点之间所发生的情况。在工程测量和试验中,所得的数据通常都是一些不连续的点,如果要得到这些分散点之外其它地方的数值,那么就运用这些已知的点进行插值。利用插值法可以通过已知的离散数据点进行插值, 从而得到这些点以外的其它地方的数值。在MATLAB中,插值可以分为一维插值、二维插值、三维插值和多维插值。
3.5.1 一维插值
一维插值就是对一维函数y=f(x)的数据进行插值,在MATLAB中相应的一维插值函数为interp1,它的基本调用格式为:yi=interp1(x,y,xi,method)。其中,x和y分别表示数据点的横、纵坐标,x的数据必须按单调方式升序或降序排列。xi表示需要插值的横坐标数据(或数组),yi是在xi指定位置计算出的插值结果。method表示具体的插值方法,缺省时默认采用线性插值法。
MATLAB提供四种插值方法列举如下:
'nearest':最近点插值。根据已知两点间的插值点和这两点间位置的远近来进行插值。当插值点离前点较近时,插值点取前点的值;反之,插值点取后点的值。
'linear':线性插值。把相邻的数据点用直线相连,按所生成的直线进行插值。
'spline':三次样条插值。利用已知数据求出样条函数后,按照样条函数进行插值。
'cubic':三次多项式插值。根据已知函数求出立方函数后,按照立方函数进行插值。
在选择插值方法时,应考虑到速度、内存需求和曲线光滑的问题。在上述四种插值方法中,最近点插值法速度最快,但它的插值很粗糙。线性插值法较最近点插值法需要更多的内存和时间,但插值所得的曲线连续性较好。三次多项式插值法较前两种方法更耗内存和时间,但插值曲线在插值点处连续,并且导数连续。三次样条插值法虽然比三次多项式插值法所需的内存少,但耗时多,不过插值曲线最光滑。需注意的是,由于样条函数本身的性质,当已知数据分布不均匀时,三次样条插值法的插值结果会不太理想。
下面举例说明一维插值的应用:
例如:12小时内,每隔一小时测量一次室外温度,温度依次为:5,8,9,15,25,29,31,30,22,25,27,24(单位:℃)。试估计在3.5,6.5,7.1,11.7小时的温度值。
解:用MATLAB编程如下:
>>hours=1:1:12;
>>temps=[5 8 9 15 25 29 31 30 22 25 27 24];
>>t1=interp1(hours,temps,[3.5,6.5,7.1,11.7],'linear')
t1=
12.0000 30.0000 30.9000 24.9000
>>t2=interp1(hours,temps,[3.5,6.5,7.1,11.7],'spline')
t2=
11.1658 30.0427 31.1755 25.3820
上面的例子中两种插值方法的所得结果不同,这是因为插值是一个估计或猜测的过程,采用不同的估计规则将导致不同的结果。一般地,当各测量数据点的分布具有较好的线性度时,宜选用线性插值,速度快;否则,宜用三次样条插值或三次多项式插值。
3.5.2 二维插值
二维插值基于同一维函数插值一样的基本思想,它是对两个变量的函数z=f(x,y)进行插值。在图像处理和数据可视化方面,二维插值十分重要。二维插值函数命令为interp2,它调用的基本格式为:Zi=interp2(X,Y,Z,Xi,Yi,method)。其中,Z是已知点的值组成的矩阵,X、Y都和Z同维,分别是已知点的x 、y坐标值矩阵,且X和Y必须是按照单调方式升序或降序排列的。Xi为指定插值点横坐标的数值数组,Yi是指定插值点纵坐标的数值数组,Zi将给出插值结果。method选项为选用的具体插值方法,同样有四种,分别为'linear'(双线性插值法)、'nearest'(最近点插值法)、'spline'(立方样条插值法)、'cubic'(双立方插值法),缺省时默认采用双线性插值法。
下面举例说明二维插值的应用:
例如:我们给定一组雇员的工龄及工资信息,就可以利用二维插值来给出某一指定年份指定工龄的雇员的工资。
解:用MATLAB编程如下:
>>years=1950:10:1990; service=10:10:30;
>>wage=[150.697 199.592 187.625 179.323 195.072 250.287 203.212 179.092 322.767 226.505 153.706 426.730 249.633 120.281 598.243];
>>w=interp2(years,service,wage,1975,15)
w=
190.6287
由此可得符合条件的雇员的工资为190.6287。