毕业论文任务书
一、毕业论文题目 MATLAB在误差理论中的应用 二、毕业论文工作自______ ___年____ _月___ __日 起至____ _____年 月_____日止
三、毕业论文进行地点: 四、毕业论文内容要求:
传统的数据处理方法基于数理统计的理论,计算量较大,数据繁多。MATLAB程序语言是一种高性能的数值计算软件,将二者结合起来,研究MATLAB程序语言在误差处理中的应用,研究MATLAB程序语言在误差处理中的优点,设计一个误差处理中粗大误差的自动判断,在线剔除,随机误差的数据处理,试验结果的自动生成,回归方程的快速 1.查找、搜集、整理、研究MATLAB程序语言的相关文献资料,结合目前误差理论与数 2.学习MATLAB程序语言,熟悉其各项功能。进而查阅相关资料,获取目前MATLAB技
建立的实用型软件。基于以上过程要求,提出以下毕业论文内容要求:
据处理在实际使用中存在的问题,提出设计方案。
术在误差数据处理中应用的情况,提出设计方法。 3.设计完成误差处理中粗大误差的自动判断,在线剔除,随机误差的数据处理,试验结果的自动生成的实用型软件,给出源程序,评价其优缺点。
4.完成“MATLAB在误差理论中的应用”论文撰写。
5.完成一篇相关外文文献翻译(要求4000字以上)。
指 导 教 师 系(教 研 室)
系(教研室)主任签名 批准日期
接受论文任务开始执行日期 学生签名
MATLAB在误差理论中的应用
[摘要]利用MATLAB辅助教学手段,传统误差数据处理要花费很长时间才能完成的处理仅仅几秒钟就可以得出其结果,且非常直观。这在实际误差数据处理中具有很高的使用价值,可以节约大量的时间,达到事半功倍的效果。另外,通过MATLAB强大的图形功能以及GUI界面,不仅能方便地将数据图形化,还可以在误差处理的应用中创造一个良好的人机界面。因此,MATLAB在误差理论中的应用是一个非常值得研究的问题。 [关键词]MATLAB GUI 误差 数据处理 人机界面
Application of MATLAB in Error Theory
MA KUI
(Grade 08, Class 02,Major measurement control technology and instruments,School Mechanical,Shaanxi
University of Technology,Hanzhong,723003,Shaanxi)
tutor: JING MIN
Abstract:The traditional error data processing always takes quite a long time to
complete ,but using MATLAB auxiliary teaching method the processing will only take a few seconds to get the results and it’s very intuitive. In this paper ,the error data processing is with high value, and it can save a lot of time to achieve a multiplier effection. In addition, through the powerful graphics capabilities of MATLAB and GUI interface, graphical data can not only conveniently be got, but also for the error data processing application to create a good man-machine interface. Therefore, the application for the MATLAB in the error theory is absolutely worth researching.
Key words:MATLAB,GUI,error,data processing, man-machine interface
目 录
1.绪论 .................................................................................................................... 1
1.1研究误差的意义 .............................................................................................................. 1 1.2 误差的基本概念 ............................................................................................................. 1 1.2.1 误差的定义及表示法 .............................................................................................. 1 1.2.2 误差来源 .................................................................................................................. 3 1.2.3 误差分类 .................................................................................................................. 4 1.3 MATLAB软件介绍 ......................................................................................................... 5 1.3.1 MATLAB软件的基本特点 ...................................................................................... 5 1.3.2 MATLAB桌面平台 .................................................................................................. 5 1.3.3 MATLAB标点的含义 .............................................................................................. 5 1.3.4 MATLAB文件的类型 .............................................................................................. 6 1.4 本文主要研究意义及内容 ............................................................................................. 7
2. 误差的基本性质与处理 .................................................................................. 9
2.1 随机误差 ......................................................................................................................... 9 2.1.1 随机误差的产生原因 .............................................................................................. 9 2.1.2 正态分布 .................................................................................................................. 9 2.1.3 算术平均值 ............................................................................................................ 11 2.1.4 测量的标准差 ........................................................................................................ 12 2.1.5 测量的极限误差 .................................................................................................... 17 2.2 系统误差 ....................................................................................................................... 19 2.2.1 系统误差产生的原因 ............................................................................................ 19 2.2.2 系统误差的分类和特征 ........................................................................................ 19 2.2.3 系统误差的发现方法 ............................................................................................ 20 2.2.4 系统误差的减小和消除 ........................................................................................ 22 2.3 粗大误差 ....................................................................................................................... 24 2.3.1 粗大误差产生的原因 ............................................................................................ 24 2.3.2 判别粗大误差的准则 ............................................................................................ 24 2.3.3 粗大误差判别方法比较 ........................................................................................ 26
第 I 页
3.MATLAB在误差处理中的程序设计 ............................................................ 27
3.1 随机误差的处理程序设计 ........................................................................................... 27 3.2 系统误差的程序设计 ................................................................................................... 27 3.2.1 线性系统误差的程序设计 .................................................................................... 27 3.2.2 周期性系统误差的程序设计 ................................................................................ 28 3.3 粗大误差程序的设计 ................................................................................................... 28 3.3.1 3σ法判断粗大误差程序设计 ............................................................................... 28 3.3.2 罗曼诺夫斯基准则判断粗大误差程序设计 ........................................................ 29 3.3.3 格罗布斯准则判断粗大误差 ................................................................................ 30 3.3.4 根据测量个数自动对测量数据进行判断的程序设计: .................................... 31
4. MATLAB GUI介绍 ....................................................................................... 33
4.1 GUI控件对象及其属性 ................................................................................................ 33 4.2 GUI开发环境 ................................................................................................................ 36 4.3 GUI程序设计步骤 ........................................................................................................ 38
5.MATLAB在误差处理中的GUI设计 ........................................................... 39
5.1 程序功能设计 ............................................................................................................... 39 5.2 程序界面设计 ............................................................................................................... 39 5.2.1 界面控件对象布置设计 ........................................................................................ 39 5.2.2界面控件的属性设置 ............................................................................................. 41 5.2.3 界面美化 ................................................................................................................ 41 5.3 控件代码程序设计 ....................................................................................................... 43 5.3.1 openingFcn程序设计 ............................................................................................. 43 5.3.2 “选取文件”按钮的回调函数设计 .................................................................... 44 5.3.3 “粗大误差方法选取”案板的选择函数程序代码设计 .................................... 48 5.3.4 “开始计算”按钮的回调函数程序代码 ............................................................ 50 5.3.5 下拉菜单的绘图选项的选取函数代码程序设计 ................................................ 51 5.3.6 “绘图”按钮的回调函数代码程序设计 ............................................................ 52 5.3.7 对翻页按钮进行回调函数代码程序设计 ............................................................ 53 5.3.8 “剔除粗大误差”按钮的回调函数代码程序设计 ............................................ 54
第 II 页
5.3.9 “退出”按钮的回调函数 .................................................................................... 56 5.4 GUI界面的程序测试 .................................................................................................... 57 5.5 GUI转换成为可运行的exe文件 ........................................................................
总结 ..................................................................................................................... 67 致谢 ..................................................................................................................... 68 参考文献 ............................................................................................................. 69 外文原文及翻译 附录A 附录B
第 III 页
1.绪论
1.1研究误差的意义
人类为了认识自然与遵循其发展规律用于自然,需要不断地堆自然界的各种现象进行测量和研究。由于实验方法和实验设备的不完善,周围环境的影响,以及受人们认识能力所限等,测量和实验所得数据和被测量的真值之间,不可避免地存在着差异,这在数值上即表现为误差。随着科学技术的日益发展和人们认识水平的不断提高,虽可将误差控制得越来越小,但终究不能完全消除它。误差存在的必然性和普遍性,已为大量实践所证明。为了充分认识并进而减小或消除误差,必须对测量过程和科学实验中始终存在着得误差进行研究。
研究误差的意义为
1)正确认识误差的性质,分析误差产生的原因,以消除或减小误差。
2)正确处理测量和实验数据,合理计算所得结果,以便在一定条件下得到更接近于真值的数据。
3)正确组织实验过程,合理设计仪器或选用仪器和测量方法,以便在最经济条件下,得到理想的结果。
1.2 误差的基本概念
1.2.1 误差的定义及表示法
所谓误差就是测得值与被测量的真值之间的差,可用下式表示:
误差=测得值-真值 (1.1)
例如在长度计量测试中,被测量某一尺寸的误差公式具体形式为
误差=测得尺寸-真实尺寸 (1.2)
测量误差可用绝对误差表示,也可用相对误差表示。
第 1 页 共69页
一、绝对误差
某量值的测得值和真值之差为绝对误差,通常简称为误差,即
绝对误差=测得值-真值 (1.3)
由式(1.3)可知,绝对误差可能是正直或负值。
所谓真值是指在观测一个量时,该量本身所具有的真实大小。量得真值是一个理想的概念,一般是不知道的。但在某些特定情况下,真值又是可知的。例如:三角形三个内角之和为180°;一个整圆周角为360°;按定义规定的国际千克基准的值可认为真值是1kg等。为了使用上的需要,在实际测量中,常用被测得量得实际值来代替真值,而实际值得定义是满足规定精确度得用来代替真值使用的量值。
在实际工作中,经常使用修正值。为消除系统误差用代数法而加到测量结果上的值称为修正值。将测得值加上修正值后可得近似的真值,即
真值≈测得值+修正值 (1.4)
由此得
修正值=真值-测得值 (1.5)
修正值与误差的大小相等而符号相反,测得值加修正值后可以消除系统误差的影响。
但必须注意,一般情况下难以得到真值,因为修正值本身也有误差,修正后只能得到较测得值更为准确的结果。
二、相对误差
绝对误差与被测量的真值之比值称为相对误差。因测得值与真值接近,故也可近似
用绝对误差与测得值之比值作为相对误差,即
相对误差=绝对误差/真值≈绝对误差/测得值 (1.6)
由于绝对误差可能为正值或负值,因此相对误差也可能为正值或负值。
相对误差是无名数,通常以百分数来表示。例如用水银温度计测得某一温度为
20.3℃,该温度用高一等级的温度计测得值为20.2℃,因后者精度高,故可认为20.2℃更接近真实温度,而水银温度计测量的绝对误差为0.1℃,其相对误差为0.1/20.2≈0.1/20.3≈0.5%。
对于相同的被测量,绝对误差可以评定其测量精度饿高低,但对于不同的被测量以
及不同的物理量,绝对误差就难以评定其测量精度的高低,而采用相对误差来评定较为确切。
三、引用误差
第 2 页 共69页
所谓引用误差指的是一种简化和使用方便的仪器表示值的相对误差,它是仪器仪表
某一刻度点的示值误差为分子,以测得范围上限值或全量程为分母,所得的比值称为引用误差,即
引用误差=示值误差/测量范围上限 (1.7)
例如测量范围上限为19600N的工作测力计,在标定示值为14700N处得实际作用力
为14778.4N,则此测力计在该刻度点的引用误差为
(14700N-14778.4N)/19600N=-78.4/19600=-0.4%
在仪器全量程范围内有多个刻度点,每个刻度都有相应的引用误差,其中绝对值最
大的引用误差称为仪器的最大引用误差。
1.2.2 误差来源
在测量过程中,误差产生的原因可归纳为以下几个方面: 一、测量装置误差 1.标准量具误差
以固定形式复现标准量值的器具,如标准量块、标准线纹尺、标准电池等等,它们
本身体现的量值,不可避免地都含有误差。
2.仪器误差
凡用来直接或间接将被测量和已知量进行比较的器具设备,称为仪器或仪表,如阿
贝比较仪、天平比较仪器等等,它们本身都具有误差。
3.附件误差
仪器的附件及附属工具,如测长仪的标准环规,千分尺的调整量棒等的误差,也会
引起测量误差。
二、环境误差
由于各种环境因素与规定的标准状态不一致而引起的测量装置和被测量本身的变化
所造成的误差,如温度、湿度、气压、振动、电磁场等所引起的误差。通常仪器仪表在规定的正常工作条件所具有的误差称为基本误差,而超出此条件时所增加的误差称为附加误差。
三、方法误差
由于测量方法不完善所引起的误差,如采用近似的测量方法而造成的误差。例如用
钢卷尺测量大轴的圆周长s,再通过计算求出大轴的直径d=s/π,因近似数π取值的不同,
第 3 页 共69页
将会引起误差。
四、人员误差
由于测量者受分辨能力的,因工作疲劳引起的视觉器官的生理变化,固有习惯
引起的读数误差,以及精神上的因素产生的一时疏忽等所引起的误差。
1.2.3 误差分类
按照误差的特点与性质,误差可分为系统误差、随机误差和粗大误差三类。 一、系统误差
在同一条件下,多次测量同一量值时,绝对值和符号保持不变,或在条件改变时,
按一定规律变化的误差称为系统误差。例如标准量值得不准确、仪器刻度的不准确而引起的误差。
系统误差又可按下列方法分类: (1)按对误差掌握的程度分
已定系统误差,是指误差绝对值和符号已经确定的系统误差。
未定系统误差,是指误差绝对值和符号未能确定的系统误差,但通常可估计出误差
范围。
(2)按误差出现规律分
不变系统误差,是指误差绝对值和符号固定的系统误差。
变化系统误差,是指误差绝对值和符号变化的系统误差。按其变化规律,又可分为
线性系统误差、周期性系统误差和复杂规律系统误差等。
二、随机误差
在同一测量条件下,多次测量同一量值时,绝对值和符号以不可预定方式变化的误
差称为随机误差。例如仪器仪表中传动部件的间隙和摩擦、连接件的弹性变形等引起的示值不稳定。
三、粗大误差
超出在规定条件下预期的误差称为粗大误差,或称“寄生误差”。此误差值较大,明
显歪曲测量结果,如测量时对错了标志、读错或记错了数、使用有缺陷的仪器以及在测量时因操作不细心而引起的过失性误差等。
第 4 页 共69页
1.3 MATLAB软件介绍
1.3.1 MATLAB软件的基本特点
MATLAB具备高性能的数值计算和可视化的科学工程计算功能,支持解释性语言输
入,编程实现简单,具有丰富的数学函数功能支持。MATLAB允许与C、Fortran语言接口,其部件Simulink可以采用图形输入的方式来搭构所研究的系统。包含丰富的工具包,在系统仿真、数字信号处理、图形图像分析、数理统计、通信及自动控制领域得到广泛的应用。
1.3.2 MATLAB桌面平台
一、主窗口
整个大的窗口(其它几个窗口都包括在其中)。 二、命令窗口(command window)
―>>‖为运算提示符,表示MATLAB在准备状态。当在提示符后输入一段运算式并按回车键后,就给出计算结果。
三、历史窗口(command history)
保留命令历史记录,这方便于使用者查询。双击历史窗口中的某一行命令,即可在命令窗口中执行该命令。
四、当前目录窗口(current directory)
在当前目录窗口中可显示或改变当前目录,也可以显示当前目录下的文件,并提供搜索功能。
五、工作间管理窗口(workspace)
显示目前内存中所有的MATLAB变量的变量名、数学结构、字节数及其类型。
1.3.3 MATLAB标点的含义
一、分号 ;
区分行以及取消运行显示等。
例:A=[1,2;3,4]与A=[1,2;3,4];的区别。
二、逗号 ,
第 5 页 共69页
区分列及函数参数分隔符等。 例:A=[1,2;3,4] B=[1,4,3;3,2,1;4,5,6]
三、百分号 %
注释标记,该行%以后的语句不执行。 例:%线性规划程序 %a=0.5;
b=sin(x);%正弦函数 四、单引号 ’ ’
字符串表示符,单引号里面的内容为字符串。单引号一定在英文状态下输入。 例:a='xingtai college'
五、冒号 :
有多种应用功能,学习过程中注意。如选取矩阵的所有行、列,矩阵定义。注意:所有标点必需采用英文标点,否则出错!
1.3.4 MATLAB文件的类型
一、数据文件.mat
mat文件是MATLAB以标准二进制格式保存的数据文件,可将工作空间中有用的数据保存下来。
二、m文件
m文件的语法类似于c语言,但又有其自身特点。它只是一个简单的ASCII码文本文件,执行程序时逐行解释运行程序,MATLAB是解释性的编程语言。
m文件有两类的m文件 — 称命令文件,可调用m文件 — 称函数文件。
(1)命令文件 — 简单的m文件
命令文件实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。没有输入输出参数。
命令文件包括两部分:注释语句和程序语句MATLAB内置函数文件。
MATLAB自定义的函数文件称内置函数文件。调用内置函数的方法:使用函数名并给出相应的入口、出口参数即可。
例如:sin.m函数——用type sin查不到。
第 6 页 共69页
调用格式:y=sin(2*x) 实际应用中: x=0:2*pi/180:2*pi; y=sin(2*x) plot(x,y)
(3)函数m文件— 需要输入变量,返回输出变量
MATLAB用户可以根据需要编辑自己的m文件,它们可以像库函数一样方便的调用,从而极大地扩展了MATLAB 的能力。
函数m文件的格式:
function 返回变量=函数名(输入变量) 注释说明语句段 程序语句段 特定规则:
1、函数m文件第一行必须以单词function作为引导词,必须遵循如下形式: function [<因变量>]=<函数名>(<自变量>)
2、m文件的文件名必须是<函数名> .m。
3、程序中的变量均为局部变量,不保存在工作空间中。其变量只在函数运行期间有效。
(4) 系统文件——s函数
用于描述系统运动的专用函数,是特殊的m文件。 s 函数有3类:
由simulink结构图自动创建
可用c语言程序设计mex文件直接定义 用函数m文件编写
s函数一旦创建,即可在框图中使用,也可在文件中调用。
1.4 本文主要研究意义及内容
一、误差与数据处理的特点及应用中存在的问题
《误差理论和数据处理》是高等院校仪器仪表类及相关专业的一门专业基础课。通
第 7 页 共69页
过该课程的学习,学生可以掌握误差、静态测量及精度、动态测量及精度、精度评定指标及方法等基本概念,同时也能正确地进行设计实验和用合适的数据处理方法来对实验结果进行科学的分析和处理、当今时代为信息时代,而且由于测量中误差存在的必然性和普遍性,使得通过科学实验和工程实践获得的数据信息必须经过合理的数据处理,给出科学评价,才有其实际价值。
对于数据量比较大的问题进行处理时,由于传统误差处理需要花费很长时间才能完成,并且计算量大,容易出现错误,结果也不直观,这给误差处理的方便性带来了严重阻碍,因此,我们迫切希望找出可以解决该问题的方法。
二、MATLAB在误差处理中应用的引入
MATLAB软件以其强大的矩阵计算、简洁的程序编写方法等特点,非常适合学生将其作为一种辅助工具进行误差理论的学习与应用。
利用MATLAB辅助教学手段,传统误差数据处理要花费很长时间才能完成的处理仅仅几秒钟就可以得出其结果,且非常直观。这在实际误差数据处理中具有很高的使用价值,可以节约大量的时间,达到事半功倍的效果。另外,通过MATLAB强大的图形功能以及GUI界面,我们不仅能方便地将数据图形化,还可以为我们的应用创造一个良好的人机界面。因此,对于MATLAB在误差理论中的应用,我们必须学以致用。
三、研究MATLAB在误差理论中应用的意义
通过对MATLAB在误差理论应用中的研究,可以运用MATLAB语言以其自身强大的数值、矩阵运算功能和图形表达功能,非常适合用于解决误差理论与数据处理方面的问题。方便、直观、高效率、高正确率等特点,是MATLAB在误差理论中应用的意义所在。
四、本次设计的主要内容
设计完成误差处理中粗大误差的自动判断,在线剔除,系统误差的判断与纠正,随机误差的数据处理,试验结果的自动生成的实用型软件。
我们将采用MATLAB GUI的设计配合误差处理的源程序设计出最终满意的实用型软件。
第 8 页 共69页
2. 误差的基本性质与处理
2.1 随机误差
2.1.1 随机误差的产生原因
当对同一测量值进行多次等精度的重复测量时,得到一系列不同的测量值(常称为
测量列),每个测量值都含有误差,这些误差的出现没有确定的规律,即前一个数据出现后,不能预测下一个数据的大小和方向。但就误差整体而言,却明显具有某种统计规律。
随机误差是由很多暂时未能掌握或不便掌握的微小因素构成,主要有以下几方面: (1)测量装置方面的因素。 (2)环境方面的因素。 (3)人为方面的因素。
2.1.2 正态分布
随机误差的分布可以是正态分布,也可以是非正态分布,而多数随机误差都服从正
态分布。我们首先来分析服从正态分布的随机误差的特性。
设被测量值的真值为Lo,一系列测得值为li,则测量列的随机误差i可表示为:
iliLo i1,2,,n (2.1)
式中正态分布的分布密度f()与分布函数F()为 f()221e/(2) (2.2) 21F()2e2(22)d (2.3)
式中:σ——标准差(或均方根误差)
第 9 页 共69页
e——自然对数的底,其值为2.7182„„
它的数学期望为: Ef()d0 (2.4) 它的方差为: 22f()d (2.5)
4其平均误差为: ||f()d (2.6)
512此外由f()d可解得或然误差为:0.6745 (2.7)
23由式(2.2)可以推导出:f()0。
(1)由f()f()可推知分布具有对称性,即绝对值相等的正误差与负误差出现的次数相等,这称为误差的对称性;
(2)当δ=0时有fmax()f(0),即f()f(0),可推知单峰性,即绝对值小的误差比绝对值大的误差出现的次数多,这称为误差的单峰性;
(3)虽然函数f()的存在区间是[-∞,+∞],但实际上,随机误差δ只是出现在一个有限的区间内,即[-kσ,+kσ],称为误差的有界性;
(4)随着测量次数的增加,随机误差的算术平均值趋向于零:limni1nin0这称为误
差的补偿性。
服从正态分布的随机误差都具有的四个特征:对称性、单峰性、有界性、补偿性。由于多数随机误差都服从正态分布,因此正态分布在误差理论中占有十分重要的地位。
图2.1 正态分布曲线
图2.1为正态分布曲线以及各精度参数在图中的坐标。σ值为曲线上拐点A的横坐标,θ值为曲线右半部面积重心B的横坐标,ρ值的横坐标线则平分曲线右半部面积。
第 10 页 共69页
2.1.3 算术平均值
对某量进行一系列等精度测量时,由于存在随机误差,因此其获得的测量值不完全
相同,此时应以算术平均值作为最后的测量结果。 设l1,l2,,ln为n次测量所得的值,则算术平均值为:
l1l2ln1n(2.8) xli
nni1 下面来证明当测量次数无限增加时,算术平均值必然趋近于真值Lo。
iliLo
12n(l1l2ln)nLo 即ilinLo
i1i1nnLolii1nnini1n
nn由前面正态分布随机误差的第四特征可知limni1in0,因此xli1inL0。
由此我们可得出结论:如果能够对某一量进行无限多次测量,就可得到不受随机误差影响的测量值,或其影响很小,可以忽略。这就是当测量次数无限增大时,算术平均值(数学上称之为最大或然值)被认为是最接近于真值的理论依据。但由于实际上都是有限次测量,因此,我们只能把算术平均值近似地作为被测量的真值。
一般情况下,被测量的真值为未知,不可能按式(2.1)求得随机误差,这时可用算
术平均值代替被测量的真值进行计算。此时的随机误差称为残余误差,简称残差:
ilix (2.9)
此时可用更简便算法来求算术平均值。任选一个接近所有测得值的数作为参考值,计算每个测得值li与l0的差值:
lililoi1,2,,n
第 11 页 共69页
xl(lii1nnoli)ni1li1ninlol0li1ninnnl0x0 (2.10)
式中的x0为简单数值,很容易计算,因此按(2.10)求算术平均值比较简单。
2.1.4 测量的标准差
一、均方根误差(标准偏差)σ
为什么用σ来作为评定随机误差的尺度?可以从高斯(正态)分布的分布密度f()12推知:f()exp[2]
2(2) 令h11exp[h22],高斯参数h为精密度。由于h 值无法,则有:f()2以实验中得到,故以σ值代之。
由于σ值反映了测量值或随机误差的散布程度,因此σ值可作为随机误差的评定尺度。σ值愈大,函数f()减小得越慢;σ值愈小,f()减小得愈快,即测量列的精密度愈高,如图2.2所示。
图2.2 标准差与概率密度的关系
标准差σ不是测量列中任何一个具体测量值的随机误差,σ的大小只说明,在一定
条件下等精度测量列随机误差的概率分布情况。在该条件下,任一单次测得值的随机误差δ,一般都不等于σ,但却认为这一系列测量列中所有测得值都属于同样一个标准差σ的概率分布。在不同条件下,对同一被测量进行两个系列的等精度测量,其标准差也不相同。
第 12 页 共69页
二、或然误差ρ
测量列的或然误差ρ,它将整个测量列的n个随机误差分为个数相等的两半。其中一半(n/2个)随机误差的数值落在-ρ— +ρ范围内,而另一半随机误差的数值落在-ρ— +ρ范围以外:
1,查f(z)表,得到f(z)0.5时,z=0.6745,2f()d2故有z0.6745。.
3 其实际意义是:若有n个随机误差,则有n/2个落在区间[-ρ,+ρ]之内,而另外n/2个随机误差则落在此区间之外。
三、算术平均误差θ
测量列算术平均误差θ的定义是:该测量列全部随机误差绝对值的算术平均值,用下式表示:
1n|i|ni1(n)
由概率积分可以得到θ与σ的关系:
40.7979 52 目前世界各国大多趋于采用σ作为评定随机误差的尺度。这是因为:
(1)σ的平方恰好是随机变量的数字特征之一(方差),σ本身又恰好是高斯误差方程f()式中的一个参数,即s,所以采用σ,正好符合概率论原理,又与最小二乘法最切合;
(2)σ对大的随机误差很敏感,能更准确地说明测量列的精度; (3)极限误差与标准偏差的关系简单: ; (4)公式推导和计算比较简单。
四、标准偏差的几种计算方法
(一)等精度测量列单次测量标准偏差的计算 (1)贝塞尔(Bessel)公式
iliL0
第 13 页 共69页
(2.11)
nlnxxL01l1xxL02l2xxL0式中,(xL0)x称为算术平均值误差,将它和vilix代入上式,则有
1v1x2v2x nvnxnn将上式对应项相加得:i1vini1x,即
innniiii1vi11xnnin 若将式(2.12)平方后再相加得:
n2n22inn2ii1vn2i1xxvii1v2ini1x n2nn22i2iij将式(2.13)平方有:i1i11ijx22nnn
n当n适当大时,可以认为ij趋近于零,并将代入式(2.14)得:
i1n
2n2n2ii1i i1vii1n n2n由于n2,代入式(2.15)得 :n2i1v2i2,即
ii1v2in1 (2)别捷尔斯法
(2.12)
(2.13)
(2.14)
(2.15) (2.16) 第 14 页 共69页
由贝赛尔公式得:nvin12i1n2in
nnnn2进一步得:viivin1i1i1i1i12in n1 则平均误差有: 由式2.16得:故有:
i1ninn1vi n(n1)i111.253 0.797921.2533vin(n1) (2.17)
此式称为别捷尔斯(Peters)公式,它可由残余误差v 的绝对值之和求出单次测量的标准差。
(3)极差法
用贝赛尔公式和别捷尔斯公式计算标准差均需先求算术平均值,再求残余误差,然后进行其他运算,计算过程比较复杂。当要求简便迅速算出标准差时,可用极差法。
若等精度多次测量测得值x1,x2,,xn服从正态分布,在其中选取最大值xmax与最小
值xmin,则两者之差称为极差:
nxmaxxmin (2.18)
根据极差的分布函数,可求出极差的数学期望为
E(n)dn (2.19)
因E(ndn)
故可得的无偏估计值,若仍以表示,则有
ndn (2.20)
式中 dn的数值见表2.1。
第 15 页 共69页
表2.1 dn数值表
n 2 1.13 3 1.69 4 2.06 5 2.33 6 2.53 7 2.70 8 2.85 9 2.97 10 3.08 11 3.17 12 3.26 13 3.34 14 3.41 15 3.47 16 3.53 17 3.59 18 3. 19 3.69 20 3.74 dn
三种方法的优缺点:
(1) 贝塞尔公式的计算精度较高,但计算麻烦,需要乘方和开方等,其计算速度难
于满足快速自动化测量的需要;
(2) 别捷尔斯公式最早用于前苏联列宁格勒附近的普尔科夫天文台,它的计算速度较快,但计算精度较低,计算误差为贝氏公式的1.07倍;
(3) 用极差法计算σ,非常迅速方便,可用来作为校对公式,当n<10时可用来计算σ,此时计算精度高于贝氏公式。
(二)多次测量的测量列算术平均值的标准差
在多次测量的测量列中,是以算术平均值作为测量结果,因此必须研究算术平均值不可靠的评定标准。
如果在相同条件下对同一量值作多组重复的系列测量,每一系列测量都有一个算术平均值,由于随机误差的存在,各个测量列的算术平均值也不相同,它们围绕着被测量的真值有一定的分散,此分散说明了算术平均值的不可靠性,而算术平均值的标准差则是表征同一被测量的各个测量列算术平均值分散性的参数,可作为算术平均值不可靠性的评定标准。
已知算术平均值x为:x取方差得D(x)l1l2ln n1D(l1)D(l2)D(ln) 2n 因D(l1)D(l2)D(ln)D(l)
故有D(x)所以x211nD(l)D(l) n2n2nx,
n (2.21)
即在n次测量的等精度测量列中,算术平均值的标准差为单次测量标准差的1/n, 当n愈大,算术平均值越接近被测量的真值,测量精度也愈高。
增加测量次数,可以提高测量精度,但测量精度是与n的平方根成反比,因此要显
第 16 页 共69页
著提高测量精度,必须付出较大的劳动。由图2.3可知, σ一定时,当n>10以后,x 的减小很慢。此外,由于增加测量次数难以保证测量条件的恒定,从而引入新的误差,因此一般情况下取n=10以内较为适宜。总之,提高测量精度,应采取适当精度的仪器,选取适当的测量次数。
图2.3 测量次数与测量精度的关系
2.1.5 测量的极限误差
测量的极限误差是极端误差,测量结果(单次测量或测量列的算术平均值)的误差
不超过该极端误差的概率为p,并使差值(1-p)可予忽略。
一、单次测量的极限误差
测量列的测量次数足够多和单次测量误差为正态分布时,根据概率论知识,正态分布曲线和横坐标轴间所包含的面积等于其相应区间确定的概率,即 pf()d1e2222d1
当研究误差落在区间(-δ,+δ)之间的概率时,则
pf()d1e2222d (2.22)
将上式进行变量置换,设td,dt,经变换,上式成为: 1p2(t)ttet222dt2t22t0et22dt2(t)
12t0edt (2.23)
第 17 页 共69页
这样我们就可以求出积分值p,为了应用方便,其积分值一般列成表格形式,称为概率函数积分值表。当t给定时,φ(t)值可由该表查出。现已查出t=1,2,3,4等几个特殊值的积分值,并求出随机误差不超出相应区间的概率p=2φ(t)和超出相应区间的概率p’=1-2φ(t),如图2.4。
由图可以看出,随着t的增大,超出|δ|的概率减小得很快。当t=2,即|δ|=2时在22次测量中只有1次的误差绝对值超出2σ范围;而当t=3,即|δ|=3σ时,在370次测量中只有1次误差绝对值超出3σ范围。由于在一般测量中,测量次数很少超过几十次,因此可以认为绝对值大于3σ的误差是不可能出现的,通常把这个误差称为单次测量的极限误差limx,即
limx3 (2.24)
图2.4 正态分布概率分布
当t=3时,对应的概率p=99.73%。在实际测量中,有时也可取其它t值来表示单次测量的极限误差。如取t=2.58,p=99%;t=2,p=95.44%;t=1.96,p=95%等。 因此一般情况下,测量列单次测量的极限误差可用下式表示:
limxt (2.25)
若已知测量的标准差σ,选定置信系数t,则可由上式求得单次测量的极限误差。
二、算术平均值的极限误差
测量列的算术平均值与被测量的真值之差称为算术平均值误差,即
xxLo
当多个测量列的算术平均值误差xi(i1,2,,N)为正态分布时,根据概率论知识,同样可得测量列算术平均值的极限表达式为:limxtx (2.26)
第 18 页 共69页
式中的t为置信系数,x为算术平均值的标准差。通常取t=3,则
limx3x (2.27)
实际测量中有时也可取其它t值来表示算术平均值的极限误差。但当测量列的测量次数较少时,应按―学生氏‖分布(―student‖ distribution)或称t分布来计算测量列算术平均值的极限误差,即:limxtax (2.28)
式中的ta为置信系数,它由给定的置信概率p1和自由度v1n
来确定,具体数值见附录表A1的t分布表;为超出极限误差的概率(称显著度或显著水平),通常取=0.01或0.02,0.05;n为测量次数;x为n次测量的算术平均值标准差。对于同一测量列,按正态分布和t分布分别计算时,即使置信概率的取值相同,但由于置信系数不同,因此求得的算术平均值极限误差也不同。
2.2 系统误差
2.2.1 系统误差产生的原因
系统误差是由固定不变的或按确定规律变化的因素造成,在条件充分的情况下这些
因素是可以掌握的。主要来源于: (1)测量装置方面的因素; (2)环境方面的因素; (3)测量方法的因素;
(4)测量人员的因素。
2.2.2 系统误差的分类和特征
系统误差的特征是在同一条件下,多次测量同一测量值时,误差的绝对值和符号保
持不变,或者在条件改变时,误差按一定的规律变化。由系统误差的特征可知,在多次重复测量同一值时,系统误差不具有抵偿性,它是固定的或服从一定函数规律的误差。从广义上讲,系统误差是指服从某一确定规律变化的误差。
图2.5为各种系统误差⊿随测量过程t变化而表现出不同特征。曲线a为不变的系统
误差,曲线b为线性变化的系统误差,曲线c为非线性变化的系统误差,曲线d为周期
第 19 页 共69页
性变化的系统误差,曲线e为复杂规律变化的系统误差。
图2.5 各种系统误差
根据系统误差在测量过程中所具有的不同变化特性,将系统误差分为不变系统误差和变化系统误差两大类。
一、不变系统误差
固定系统误差是指在整个测量过程中,误差的大小和符号始终是不变的。 如千分尺或测长仪读数装置的调零误差,量块或其它标准件尺寸的偏差等,均为不变系统误差。它对每一测量值的影响均为一个常量,属于最常见的一类系统误差。
二、变化系统误差
变化系统误差指在整个测量过程中,误差的大小和方向随测试的某一个或某几个因素按确定的函数规律而变化,其种类较多,又可分为以下几种:
(1)线性变化的系统误差 在整个测量过程中,随某因素而线性递增或递减的系统误差。
(2)周期变化的系统误差 在整个测量过程中,随某因素作周期变化的系统误差。 (3)复杂规律变化的系统误差 在整个测量过程中,随某因素变化,误差按确定的更为复杂的规律变化,称其为复杂规律变化的系统误差。
2.2.3 系统误差的发现方法
由于形成系统误差的原因复杂,目前尚没有能够适用于发现各种系统误差的普遍方法。但是我们可针对不同性质的系统误差,可按照下述方法加以识别:
用于发现测量列组内的系统误差,包括实验对比法、残余误差观察法、残余误差校核法和不同公式计算标准差比较法。
一、实验对比法
第 20 页 共69页
实验对比法是改变产生系统误差的条件,进行不同条件的测量,以发现系统误差。 这种方法适用于发现不变的系统误差。 对于不变的系统误差,只能用实验对比法。
二、残余误差观察法
残余误差观察法是根据测量列的各个残余误差大小和符号的变化规律,直接由误差数据或误差曲线图形来判断有无系统误差。 这种方法适于发现有规律变化的系统误差。
三、残余误差校核法(有两种方法)
(1)用于发现线性系统误差:设有测量列l1,l2ln,它们的系统误差为l1,l2ln,
l1l'1l1ll'2l2它们不含系统误差之值为l1',l2'ln',有下式成立:2
lnln'ln
它们的算术平均值为: xx'x 因lixvi,lix'vi 故有
vivi(lix) (2.29)
''''
若系统误差显著大于随机误差,vi可予忽略,则得
vilix (2.30)
由上式看出,显著含有系统误差的测量列,其任一测量值的残余误差约为系统误差
与测量列系统误差平均值之差。
根据式(2.29),若将测量列中前K个残余误差相加,后n-K个残余误差相加(当n为
偶数,取K=n/2;n为奇数,取K=(n+1)/2),两者相减得:
vii1Ki1Kvi'vj'(lix)jk1i1jk1nvnjKjk1K(ln
jx)n当测量次数足够多时,有:
vii1Ki1vi'vj'(lix)jk1i1jk1nvjKjk1(ln
jx)第 21 页 共69页
所以得: v i v j n为偶数
i1jn/21(n1)/2i1nn/2n v i v j n为奇数 (2.31)
j(n1)/2 n应足够大用来判断线性系统误差,若上两式的Δ显著不为0,则有理由认为测量列
存在线性系统误差。这种校核法又称―马列科夫准则‖。但要注意的是,有时按残余误差校核法求得差值Δ=0,仍有可能存在系统误差。
(2)用于发现周期性系统误差:若一等精度测量列,按测量先后顺序将残余误差排
列为v1,v2,vn,求u
vvi1n1ii1v1v2v2v3vn1vn
若 un12 (2.32) 则认为该测量列中含有周期性系统误差。这种校核法又叫 阿卑——赫梅特准则
(Abbe-Helmert准则) ,它能有效地发现周期性系统误差。
四、不同公式计算标准差比较法
对等精度测量,可用不同分式计算标准差,通过比较以发现系统误差。按贝塞尔公式:1令
v2in1,按别捷尔斯公式:21.253vin(n1)
11u 22 (2.33) n1 若 u则怀疑测量列中存在系统误差。
在判断含有系统误差时,违反―准则‖时就可以直接判定,而在遵守―准则‖时,不能
得出―不含系统误差‖的结论,因为每个准则均有局限性,不具有―通用性‖。
2.2.4 系统误差的减小和消除
一、消误差源法
用排除误差源的方法消除系统误差是最理想的方法。它要求测量人员,对测量过程中可能产生系统误差的各个环节作仔细分析,并在正式测试前就将误差从产生根源上加以消除或减弱到可忽略的程度。由于具体条件不同,在分析查找误差源时,并无一成不
第 22 页 共69页
变的方法,但以下几方面是应予考虑的:
(1)所用基准件、标准件(如量块、刻尺、光波容器等)是否准确可靠; (2)所用量具仪器是否处于正常工作状态,是否经过检定,并有有效周期的检定证书;
(3)仪器的调整、测件的安装定位和支承装卡是否正确合理; (4)所采用的测量方法和计算方法是否正确,有无理论误差;
(5)测量的环境条件是否符合规定要求,如温度、振动、尘污、气流等; (6)注意避免测量人员带入主观误差如视差、视力疲劳、注意力不集中等.
二、加修正值法
这种方法是预先将测量器具的系统误差检定出来或计算出来,取与误差大小相同而符号相反的值作为修正值,将测得值加上相应的修正值,即可得到不包含该系统误差的测量结果。如量块的实际尺寸不等于公称尺寸,若按公称尺寸使用,就要产生系统误差。因此应按经过检定的实际尺寸(即将量块的公称尺寸加上修正量)使用,就可避免此项系统误差的产生。
采用加修正值的方法消除系统误差,关键在确定修正值或修正函数的规律对恒定系统误差,可采用检定方法,对已知基准量重复测量取其均值,即x为其修正值。
对可变系统误差,按照某变化因素,依次取得已知基准量x0 的一系列测值
x1,x2,xn,再计算其差值x0x,按最小二乘法确定它随该因素变化的函数关系式,取其负值即为该可变系统误差的修正函数。关于最小二乘法将在本课程后面介绍。 由于修正值本身也包含有一定的误差,因此用这种方法不可能将全部系统误差修正掉,总要残留少量的系统误差。由于这些残留的系统误差相对随机误差而言已不明显了,往往可以把它们统归成偶然误差来处理。
三、改进测量方法
在测量过程中,根据具体的测量条件和系统误差的性质,采取一定的技术措施,选择适当的测量方法,使测得值中的系统误差在测量过程中相互抵消而不带入测量结果之中,从而实现减弱或消除系统误差的目的。 (1)消除恒定(常值)系统误差的方法; (2)消除线性系统误差的方法——对称法; (3)消除周期性系统误差的方法——半周期法;
第 23 页 共69页
(4)消除复杂规律变化系统误差的方法。
2.3 粗大误差
2.3.1 粗大误差产生的原因
产生粗大误差的原因是多方面的,大致可归纳为:
(1)测量人员的主观原因
测量者工作责任感不强、工作过于疲劳、缺乏经验操作不当,或在测量时不小心、不耐心、不仔细等,造成错误的读书或记录。
(2)客观外界条件的原因
测量条件意外地改变(如机械冲击、外界振动、电磁干扰等)。
2.3.2 判别粗大误差的准则
在测量过程中,确实是因读错记错数据,仪器的突然故障,或外界条件的突变等异常情况引起的异常值,一经发现,就应在记录中除去,但需注明原因。这种从技术上和物理上找出产生异常值的原因,是发现和剔除粗大误差的首要方法。有时,在测量完成后也不能确知数据中是否含有粗大误差,这时可采用统计的方法进行判别。统计法的基本思想是:给定一个显著性水平,按一定分布确定一个临界值,凡超过这个界限的误差,就认为它不属于偶然误差的范围,而是粗大误差,该数据应予以剔除。
在判别某个测得值是否含有粗大误差时,要特别慎重,应作充分的分析和研究,并根据判别准则予以确定。常用的判别准则有:
一、3准则
3准则是最常用也是最简单的判别粗大误差的准则,它是以测量次数充分大为前
提,但通常测量次数比较少,因此该准则只是一个近视的准则。实际测量中,常以贝塞尔公式算得,以x代替真值。对某个可疑数据xd ,若其残差满足:
|vd||xdx|3 (2.34)
则可认为该数据含有粗大误差,应予以剔除。 二、格拉布斯准则
第 24 页 共69页
1950年格拉布斯(Grubbs)根据顺序统计量的某种分布规律提出一种判别粗大误差的准则。1974年我国有人用电子计算机做过统计模拟试验与其它几个准则相比,对样本中仅混入一个异常值的情况,用格拉布斯准则检验的功率最高。
设对某量作多次等精度测量,得x1,x2,xn,当xi服从正态分布时,计算得
x1xn
vixix[v2](n1)为了检验xi中是否含有粗大误差,将x(i)按大小顺序排列成顺序统计量
x(1)x(2)x(n),而格拉布斯导出了g(n)x(n)x及 g(1)xx(1)的分布,取定显著
度(一般为0.05或0.01),可得临界值g0(n,),具体见附录表A2,而
P(x(n)xg0(n,))及P(xx(1)g0(n,))。
若认为x(1)可疑,则有g(1)xx(1)
若认为x(n)可疑,则有g(n)x(n)x
当 g(i)g0(n,) (2.35) 即判别该测得值含有粗大误差,应予剔除。 三、罗曼诺夫斯基准则
当测量次数较少时,按 t 分布的实际误差分布范围来判别粗大误差较为合理。罗曼诺夫斯基准则又称 t 检验准则,其特点是首先剔除一个可疑的测得值,然后按 t 分布检验被剔除的值是否是含有粗大误差。设对某量作多次等精度测量,得x1,x2,,xn若认
1n为测量值xj为可疑数据,将其剔除后计算平均值为(计算时不包括xj):xxi,n1i1ij第 25 页 共69页
并求得测量列的标准差(计算时不包括x1xi):n1i1ijnvi1n2in2,根据测量次数n和
选取的显著度,即可由附录表A3查得t分布的检验系数K(n,)。
若 xjxK (2.36) 则认为测量值xj含有粗大误差,剔除xj是正确的,否则认为xj不含有粗大误差,应予保留。
2.3.3 粗大误差判别方法比较
以上介绍了三种粗大误差的判别准则,根据前人的实践经验,建议按如下几点考虑
去具体应用:
(1)大样本情况(n>50)用3σ准则最简单方便,虽然这种判别准则的可靠性不高,但它使用简便,不需要查表,故在要求不高时经常使用;30 第 26 页 共69页 3.MATLAB在误差处理中的程序设计 3.1 随机误差的处理程序设计 设被测量数据为数组x。则有: l=length(x); %被测量的个数 mean_x=mean(x); %被测量的平均值 v=x-mean; %被测量的残余误差 q=std(x); % 被测量的单次测量标准差 qx=q/sqrt(l); %算术平均值的标准差 被测量的个数小于10时用t分布计算极限误差比较可信,设t为t分布表的值的数 组,其中自由度等于1为它的第一个量,则有 dx=t(l-2)*qx; %被测量的极限误差 3.2 系统误差的程序设计 3.2.1 线性系统误差的程序设计 按照2.2.3中讲到的残余误差校核线性系统误差法有如下程序: k=(+1)/2; k=fix(k); %对k截尾取整 sum1=0; %sum1用来表示前k为残余误差的和 for i=1:k sum1=sum1+v(i); %求sum1 end sum2=0; %sum2用来表示从k+1位到末位的残余误差的和 for i=(k+1):l 第 27 页 共69页 sum2=sum2+v(i); %求sum2 end sub=sum1-sum2; sub=abs(sub); if sub>0.1 %差值大于0.1断定含有线性误差 set(handles.text14,'string','怀疑含有线性系统误差') %含有线性误差 else set(handles.text14,'string','无') %无线性误差 end 3.2.2 周期性系统误差的程序设计 按照2.2.3中讲到的周期性系统误差判断方法阿卑——赫梅特准则,有如下程序: for i=1:(l-1) U(i)=v(i)*v(i+1); %从余误差的第一位到倒数第二位,将相连两位相乘并放在U里面 end; u=abs(sum(U)); %对U求绝对值 if u>sqrt(l-1)*q^2 %判断是否含有周期性系统误差 set(handles.text18,'string','怀疑含有周期性系统误差'); %含有周期性系统误差 else set(handles.text18,'string','无');%无周期性系统误差 end 3.3 粗大误差程序的设计 3.3.1 3σ法判断粗大误差程序设计 3σ法在测量个数比较多的时候使用最为准确,程序如附录B中pushbutton3回调函 数中的if way==2时的执行语句部分,其程序流程图如下所示: 第 28 页 共69页 对处理数据求残余误差的绝对值 即含有粗大误差,找出粗大判断残差绝对值是否大于3倍的单次测量标准差 是 误差并存入一个固定数组中,并将剔除粗大误差数据后的新数据作为处理数据 否 对处理数据求平均值、标准差、极限误差等并将结果以及粗大误差结果输出显示 图3.1 3σ法判断粗大误差程序流程图 3.3.2 罗曼诺夫斯基准则判断粗大误差程序设计 罗曼诺夫斯基法建议被测量的个数在17个以内最为准确,因此此程序针对17个以 内的测量数据,程序如附录B中pushbutton3回调函数中的if way==3时的执行语句部分,其程序流程图如下所示: 第 29 页 共69页 对处理数据1求残余误差绝对值,找出最大值对应的处理数据作为粗大误差的怀疑值 剔除怀疑值后的新数据列作为处理数据2,对其求平均值、标准差、极限误差等 即怀疑值就是粗大误差,将该值根据数据个数得出检验系数K值,判断怀疑值减去新的平均值后的绝对值是否大于K倍的新单次测量标准差 是 存入一个固定数组中,将剔除该值后的数据作为新的处理数据1 否 即已经无粗大误差,对处理数据1求平均值、标准差、极限误差等并将结果以及粗大误差结果输出显示 图3.2 罗曼诺夫斯基准则判断粗大误差的程序流程图 3.3.3 格罗布斯准则判断粗大误差 格罗布斯准则一般在测量个数为20~100之间时最为准确,其程序如附录B中 pushbutton3回调函数中的if way==4时的执行语句部分,其程序流程图如下所示: 第 30 页 共69页 对处理数据求残余误差绝对值,找出最大值对应的处理数据XI 用该数据XI减去处理数据的平均值,然后除以单次测量的标准差,并求绝对值,其值计为GN 即XI为粗大误差,将该根据数据个数得出临界值G0,判断GN是否大于或者等于G0 是 值存入一个固定数组中,并将剔除粗大误差数据后的新数据作为处理数据 否 即已经无粗大误差,对处理数据求平均值、标准差、极限误差等并将结果以及粗大误差结果输出显示 图3.3 格罗布斯准则判断粗大误差程序流程图 3.3.4 根据测量个数自动对测量数据进行判断的程序设计: 自动判断的算法为:当测量数据个数小于或者等于10时,用罗曼诺夫斯基准则,当 测量个数大于10时,用3σ法判断。其程序如附录B中pushbutton3回调函数中的if way==1时的执行语句部分,其程序流程图如下所示: 第 31 页 共69页 求出处理数据的个数并判断数据个数是否大于10 是 否 用3σ法判断粗用罗曼诺夫斯基大误差 法判断粗大误差 将平均值、标准差、极限误差以及误差结果输出显示 图3.4 自动判断粗大误差的程序流程图 第 32 页 共69页 4. MATLAB GUI介绍 GUI(Graphical User Interfaces):由各种图形对象组成的用户界面,在这种用户界面下,用户的命令和对程序的控制是通过“选择”各种图形对象来实现的。目前90%以上的应用程序和软件都是在GUI下运行的。 MATLAB有两种GUI用户界面控件的创建方式,基于命令行的方式用程序来制作和基于GUI的方式制作。这里主要介绍基于GUI的方式。 MATLAB 的GUI的基本图形对象分为控件对象和用户界面菜单对象(包括固定菜单和现场菜单),简称控件和菜单。 4.1 GUI控件对象及其属性 一、GUI控件对象类型(The mode of controller object) 控件对象是事件响应的图形界面对象。当某一事件发生时,应用程序会做出响应并执行某些预定的功能子程序(Callback). 常用的基本控件: 按钮(Push Buttons):执行某种预定的单功能或操作; 开关按钮(Toggle Button):产生一个动作并指示一个二进制状态(开或关),当鼠标点击它时按钮将下陷,并执行callback(回调函数)中指定的内容,再次点击,按钮复原,并再次执行callback 中的内容; 单选框(Radio Button):单个的单选框用来在两种状态之间切换,多个单选框组成一个单选框组时,用户只能在一组状态中选择单一的状态,或称为单选项; 复选框(Check Boxes):单个的复选框用来在两种状态之间切换,多个复选框组成一个复选框组时,可使用户在一组状态中作组合式的选择,或称为多选项; 文本编辑器(Editable Texts):用来使用键盘输入字符串的值,可以对编辑框中的内容进行编辑、删除和替换等操作; 静态文本框(Static Texts):仅仅用于显示单行的说明文字; 第 33 页 共69页 滚动条(Slider): 可输入指定范围的数量值; 边框(Frames):在图形窗口圈出一块区域; 列表框(List Boxes):在其中定义一系列可供选择的字符串; 弹出式菜单(Popup Menus):让用户从一列菜单项中选择一项作为参数输入; 坐标轴(Axes):用于显示图形和图象。 二、控件对象的描述(Description of controller object) MATLAB中的控件大致可分为两种,一种为动作控件,鼠标点击这些控件时会产生相应的响应。一种为静态控件,是一种不产生响应的控件,如文本框等。 每种控件都有一些可以设置的参数,用于表现控件的外形、功能及效果,既属性。属性由两部分组成:属性名和属性值,它们必须是成对出现的。 控制对象的属性包括公共属性、基本控制属性、修饰控制属性、辅助属性和callback管理属性。 三、控件对象的属性(Attributes of controller object) 用户可以在创建控件对象时,设定其属性值,未指定时将使用系统缺省值。 两大类控件对象属性:第一类是所有控件对象都具有的公共属性,第二类是控件对象作为图形对象所具有的属性。 A, 控件对象的公共属性。 Children 取值为空矩阵,因为控件对象没有自己的子对象。 Parent取值为某个图形窗口对象的句柄,该句柄表明了控件对象所在的图形窗口。 Tag取值为字符串,定义了控件的标识值,在任何程序中都可以通过这个标识值控制该控件对象。 Type 取值为uicontrol,表明图形对象的类型,用户不能改写这个属性。 UserDate取值为空矩阵,用于保存与该控件对象相关的重要数据和信息,用set 和get函数可以访问该属性。 Visible取值为no 或off,决定空间是否在图形窗口可见。 B,控件对象的基本控制属性。 BackgroundColor取值为颜色的预定义字符或RGB数值。 Callback取值为字符串,可以是某个M文件名或一小段MATLAB语句,当用户激活某个控件对象时,应用程序就运行该属性定义的子程序。 Enable取值为on(缺省值),inactive和off,当取值为on时,无论何时激活控件对 第 34 页 共69页 象MATLAB 都执行Callback属性定义的子程序。 Extend取值为四元素矢量[0,0,width, height],记录控件对象标题字符的位置和尺寸,该属性只能读不能写。 ForegroundColor取值为颜色的预定义字符或RGB数值。 Max,Min取值都为数值。 String取值为字符串矩阵或数组,定义控件对象标题或选项内容。 Style取值可以是pushbutton, radiobutton, checkbox, edit, text, slider, frame, popupmenu 或listbox,由相应的值定义控件的类型。 Units计量单位,取值可以是pixels, normalized, inches, centimeters或points。 Value取值可以是矢量,也可以是数值,其含义及解释依赖于控件对象的类型 C,控件对象的修饰控制属性。 FontAngle取值为normal, italic, oblique,定义字体的形态。 FontName取值为控件标题等字体的字库名,必须与系统支持的字库名一致。 FontSize取值为数值,定义字号。 FontWeight取值为normal, light, demi或bold,定义字体的粗细。 HorizontalAligment取值为left,center或right,定义对齐方式。 D, 控件对象的辅助属性。 ListboxTop取值为数量值,定义列表框中最上方的字符串在string属性中的序号。 SliderStop取值为两元素矢量[minstep,maxstep],用于slider控件。 Selected取值为on 或off。 SlectionHighlight取值为on 或off,决定控件对象被选中时,是否显示被选中的对象。 E, Callback管理属性。 BusyAction取值为cancel或queue,决定采取的控制中断执行控件对象的Callback的调用方式。 ButtonDownFun取值为字符串,一般为某个M文件名或一小段MATLAB程序。 CreateFun 取值为字符串,一般为某个M文件名或一小段MATLAB程序。 DeletFun取值为字符串,一般为某个M文件名或一小段MATLAB程序。 HandleVisibility取值为on, callback或off。 Interruptible取值为on 或off,决定控件对象的Callback是否可以被随后的callback调用中断。 第 35 页 共69页 4.2 GUI开发环境 MATLAB提供了一套可视化的创建图形窗口的工具,使用这个用户界面开发环境可方便的创建GUI应用程序, 它可以根据用户设计的GUI布局,自动生成M文件的框架,用户可使用这一框架编制自己的应用程序。 MATLAB可视化的创建图形用户接口(GUI)工具包括: *布局编辑器(Layout Edtor)-------在图形窗口中加入及安排对象。 *几何排列工具(Alignment Tool)-----调整各对象相互之间的几何关系和位置 *属性编辑器(Property Inspector)-----查询并设置属性值 *对象浏览器(Object Browser)-----用于获得当前MATLAB图形用户界面程序中所有的全部对象信息,对象的类型,同时显示控件的名称和标识,在控件上双击鼠标可以打开该控件的属性编辑器。 *菜单编辑器(Menu Editor)-----建立窗口菜单条的菜单和任何构成布局的弹出菜单 在MATLAB中, GUI的设计是以 M文件的编程形式实现的,GUI的布局代码存储在M文件和MAT文件中,而在MATLAB6中有了很大的改变,MATLAB6将GUI的布局代码存储在 FIG文件中,同时还产生一个M文件用于存储调用函数,在M文件中不再包含GUI的布局代码,在开发应用程序时代码量大大减少。 GUI工具的使用 1、布局编辑器(Layout editor)的使用: 在命令窗口输入GUIDE命令或点击工具栏中的guide图标都可以打开空白的布局编辑器,在命令窗口输入GUIDE filename 可打开一个已存在的名为filename图形用户界面。 布局编辑器可以启动用户界面的控制面板,上述工具都必须从布局编辑器中访问。使用用户界面开发环境的一般步骤为: (1)布局编辑器参数设置 选File菜单下的Preferences菜单项打开参数设置窗口,点击树状目录中的GUIDE,既可以设置布局编辑器的参数。 (2)将控件对象放置到布局区 用鼠标选择并放置控件到布局区内; 移动控件到适当的位置; 改变控件的大小; 第 36 页 共69页 选中多个对象的方法; (3)布局编辑器的弹出菜单 在任一控件上按下鼠标右键,会弹出一个菜单,通过该菜单可以完成布局编辑器的大部分操作。 (4)激活图形窗口 选Tools菜单中的Activate Figure(Run)项或点击工具条上的ActivareFigure(Run)按钮, 在激活图形窗口的同时将存储M 文件和FIG文件,如所建立的布局还没有进行存储,用户界面开发环境将打开一个Save As对话框,按输入的文件的名字,存储一对同名的M文件和带有.fig扩展名的FIG文件。 (5)运行GUI程序 在命令窗口直接键入文件名或用openfig, open或hgload命令运行GUI程序。 2、几何位置排列工具(Alignment tool)的使用: 可以通过选择工具栏中的排列工具图标打开排列工具窗口,用于调节各控件对象的水平、垂直位置和相互之间相对关系。 用属性编辑器设置控件属性(Set attributes of controller with Property Inspector) 在属性编辑器中提供了所有可设置的属性列表并显示出当前的属性,用户可根据需要设置控件属性。 (1)打开属性编辑器(Opening Property Inspector):三种方法:1. 用工具栏上的图标打开;2. 从View菜单中选择Property Inspector菜单项;3. 在按鼠标右键弹出的Property Inspector菜单中选择菜单项。 (2)使用属性编辑器(Using Property Inspector):属性编辑器中包含了控件的基本属性,都可以在编辑器中填写或更改属性值,一般情况下许多属性可采用默认值,只对与制作目的直接相关的属性进行编辑。 菜单编辑器(Menu Editor): 用于制作GUI窗口的菜单,包括菜单的设计和编辑,菜单编辑器有八个快捷键,可以利用它们任意添加或删除菜单,可以设置菜单项的属性,包括名称(Label)、标识(Tag)、选择是否显示分隔线(Separator above this item)、是否在菜单前加上选中标记(Item is checked)、设置调用函数(Callback)。 菜单编辑器的下方有两个可选择的页面,分别用于设计主菜单和鼠标右键菜单,鼠标右键菜单为主程序窗口和控件上的弹出菜单,可设计多个鼠标右键菜单,每个控件可以通过属性查询器中UIContextMenu选择一个鼠标右键菜单,UIContextMenu的缺省选 第 37 页 共69页 项为(None) 对象浏览器(Object Browsers):用于浏览当前程序所使用的部对象信息,可以在对象浏览器中选种一个或多个控件来打开该控件的属性编辑器。 4.3 GUI程序设计步骤 GUI设计包括图形界面的设计和功能设计两个方面。 一般步骤: *分析界面所要实现的主要功能,明确设计任务; *在稿纸上绘制界面草图,优化草图; *按设计草图上机制作静态界面; *编写界面动态功能的程序。 第 38 页 共69页 5.MATLAB在误差处理中的GUI设计 5.1 程序功能设计 本次设计的主要功能是实现对一组等精度测量数据的处理,求其平均值,单次测量 的标准差,算术平均值的标准差,极限误差,以及对该组数据进行粗大误差的判断及在线剔除,系统误差的判断,并绘制处理数据的分布图以及残余误差分布图等功能。 为了实现对多组数据的处理,要求用txt或者excel文件载入数据。 5.2 程序界面设计 5.2.1 界面控件对象布置设计 根据程序功能,布置如下控件对象: 一、pushbutton控件 Pushbutton1:用来实现对txt或者excel文件的选取。 Pushbutton2:用来实现对数据的平均值等结果进行计算并输出。 Pushbutton3:用来实现绘图功能 Pushbutton4:用来实现输入数据的翻页功能 Pushbutton5:用来实现输入数据的倒页功能 Pushbutton6:用来实现退出界面功能 Pushbutton7::用来实现对粗大误差的在线剔除功能 二、uitable控件 Uitable1:用来对读入文件的数据的显示 三、axes控件 Axes1:用来显示数据的分布图及残余误差分布图 四、pannel控件 第 39 页 共69页 Panel1:显示数据的最终结果 Panel2:用来选取粗大误差的判别方法 Panel3:用来显示误差的判别结果 五、popupmenu控件 Popupmenu1:用来选取绘图选项 六、edit控件 Edit1:用来显示载入文件的路径 Edit2:用来显示粗大误差的值 Edit3:用来显示处理数据的列数 七、static text控件 一部分用来显示结果类型及注释,另一部分用来显示数据的输出结果。 八、radio button控件 用来控制粗大误差的选择方法 根据上述控件,布置如下图所示,并将文件存为caotu.fig。 图5.1 布置所需控件后的caotu.fig 第 40 页 共69页 5.2.2界面控件的属性设置 对照图5.2.1-1所示的控件,修改各控件的string属性,并修改各别控件的fontsize, backgroundcolor等属性,使其显示字体的大小合适,再将各个控件的位置大小调整合适,改完如下图5.2所示: 图5.2 修改属性后的caotu.fig 5.2.3 界面美化 一、对界面的美化 对5.2中修改后的GUI界面进行美化,美化结果如下图5.3所示: 第 41 页 共69页 图5.3 美化后的caotu.fig 二、GUI的“进入”界面设计 上图为该软件的主要执行部分,为了使该软件更加美观,为此制作一个“进入”界 面,新建一个zhujianmian.fig,界面美化后如下图所示: 第 42 页 共69页 图5.4 进入界面的设计——zhujiemian.fig 其中“点击进入”按钮的回调函数为: run('caotu'); close('欢迎使用'); %’欢迎使用’为该界面的属性值 5.3 控件代码程序设计 5.3.1 openingFcn程序设计 在整个界面刚打开的时候我们需要设置一些初始变量,比如t分布表,罗曼诺夫斯基表以及设置下拉菜单的初始值和粗大误差判断方法选取的初始值。程序代码如下: function caotu_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to caotu (see VARARGIN) global t gn gn1 luo %以下为格罗布斯准则中的判别表 a=0.01 a=0.05 gn1=[1.16 1.49 1.75 1.94 2.10 2.22 2.32 2.41 2.48 2.55 2.61 2.66 2.70 2.75 2.78 2.82 2.85 2.88 2.91 2.94 2.96 2.99 3.01:0.01:3.59]; gn=[1.15 1.46 1.67 1.82 1.94 2.03 2.11 2.18 2.23 2.28 2.33 2.37 2.41 2.44 2.48 2.50 2.53 2.56 2.58 2.60 2.62 2. 2.66:0.01:3.17]; %以下为t分布表,a=0.01 t=[9.92 5.84 4.60 4.03 3.71 3.50 3.36 3.25 3.17 3.11 3.05 3.01 2.98 2.95 2.92 2.90 2.88 2.86 2.85 2.83 2.82 2.81 2.80 2.79 2.78 2.77 2.76 2.76 2.75]; %以下数据为罗曼诺夫斯基判别粗大误差所用数据 取a=0.01 luo=[11.46 6.53 5.04 4.36 3.96 3.71 3.53 3.41 3.31 3.23 3.17 3.12 3.08 3.04 3.01 3.00 2.95 2.93]; global way 第 43 页 共69页 way=1; set(handles.radiobutton3,'value',1); global huitu huitu=1; set(handles.popupmenu2,'value',1); 5.3.2 “选取文件”按钮的回调函数设计 当我们点击“选取文件”按钮时进行对txt或者excel文件的选取,并将其存入uitable 表格中显示,因此程序代码如下: function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %读取文件 global varnames sdataset col data wucha str test [FileName PathName]=uigetfile({'*.xls','Excel Files(*.xls)';... '*.txt','Txt Files(*.txt)';'*.*','All Files(*.*)'}, 'Choose a File'); L=length(FileName); if L<5 % msgbox('没有选取任何文件','open file wrong'); return; end; test=FileName(L-3:L); switch test case '.txt' str=[PathName FileName]; set(handles.edit1,'string',str); fin=fopen(str,'r'); h=waitbar(0,'请稍等,正在开始读取文件...'); [names,data]=textread(str,'%s %[^\\n]','delimiter',' '); 第 44 页 共69页 waitbar(1,h,'已完成'); pause(1); delete(h); DATA=char(data); [R C]=size(DATA); try for i=1:R %求每行的数据个数 n(i)=0; for j=1:C if j if DATA(i,j)~=' ' n(i)=n(i)+1; end end end end N=max(n); p=1; %将DATA转换为double数组 for i=1:R w=1; for j=1:C if DATA(i,j)~=' ' BB(p)=DATA(i,j); p=p+1; q=j+1; if q>C||DATA(i,q)==' ' 第 45 页 共69页 cc(i,w)=str2double(BB); w=w+1; p=1; BB(:)=[]; end end end end [r c]=size(cc); for i=1:r for j=1:c while cc(i,j)==0 cc(i,j)=nan; end end end [r c]=size(cc); for i=1:r CC(:,i)=cc(i,:); end for i=1:N DD(i,:)=CC(i,:); end [row col] = size(DD); dcell = cell(row,col); for n=1 : col pdata = DD(:,n); dcell(:,n)=mat2cell(pdata(:),ones(row,1),1); end set(handles.uitable1,'ColumnName',names); 第 46 页 共69页 set(handles.uitable1,'Data',dcell); fclose(fin); catch beep; msgbox('文件内容格式不正确,请参考模板文件','文件错误'); end case '.xls' %导入listbox str=[PathName FileName]; set(handles.edit1,'string',str); try h=waitbar(0,'请稍等,正在开始读取文件...'); sdataset = dataset('xlsfile',str); waitbar(1,h,'已完成'); pause(1); delete(h); varnames = get(sdataset,'VarNames'); [row col] = size(sdataset); dcell = cell(row,col); for n=1 : col pdata = eval(cell2mat(strcat('sdataset.',varnames(n)))); %取出dataset内部数据 dcell(:,n) = mat2cell(pdata(:),ones(row,1),1); end set(handles.uitable1,'ColumnName',varnames); %设定uitbale 的标题栏名称 set(handles.uitable1,'Data',dcell); %写入uitable的数据 catch beep; delete(h); 第 47 页 共69页 msgbox('文件内容格式不正确,请参考模板文件','文件错误'); end otherwise beep msgbox('错误类型文件,请选取Excel或者Txt文件','File Open Error'); end 5.3.3 “粗大误差方法选取”案板的选择函数程序代码设计 根据全局变量way的值来进行判断粗大误差的方法的选取,代码如下: function uipanel6_SelectionChangeFcn(hObject, eventdata, handles) % hObject handle to the selected object in uipanel6 % eventdata structure with the following fields (see UIBUTTONGROUP) % EventName: string 'SelectionChanged' (read only) % OldValue: handle of the previously selected object or empty if none was selected % NewValue: handle of the currently selected object % handles structure with handles and user data (see GUIDATA) global way var=get(hObject,'value'); str=get(hObject,'string'); switch str case '自动判断' way=1; set(handles.text12,'string',''); set(handles.text4,'string',''); set(handles.text6,'string',''); set(handles.text8,'string',''); set(handles.text14,'string',''); set(handles.text18,'string',''); 第 48 页 共69页 set(handles.text10,'string',''); set(handles.text20,'string',''); set(handles.text22,'string',''); set(handles.text25,'string',''); set(handles.text28,'string',''); case '3sigema法判断' way=2; set(handles.text12,'string',''); set(handles.text4,'string',''); set(handles.text6,'string',''); set(handles.text8,'string',''); set(handles.text14,'string',''); set(handles.text18,'string',''); set(handles.text10,'string',''); set(handles.text20,'string',''); set(handles.text22,'string',''); set(handles.text25,'string',''); set(handles.text28,'string',''); case '罗曼诺夫斯基法判断' way=3; set(handles.text12,'string',''); set(handles.text4,'string',''); set(handles.text6,'string',''); set(handles.text8,'string',''); set(handles.text14,'string',''); set(handles.text18,'string',''); set(handles.text10,'string',''); set(handles.text20,'string',''); 第 49 页 共69页 set(handles.text22,'string',''); set(handles.text25,'string',''); set(handles.text28,'string',''); case '格罗布斯准则判断' way=4; set(handles.text12,'string',''); set(handles.text4,'string',''); set(handles.text6,'string',''); set(handles.text8,'string',''); set(handles.text14,'string',''); set(handles.text18,'string',''); set(handles.text10,'string',''); set(handles.text20,'string',''); set(handles.text22,'string',''); set(handles.text25,'string',''); set(handles.text28,'string',''); end guidata(hObject,handles) 5.3.4 “开始计算”按钮的回调函数程序代码 当点击“开始计算”时,我们将开始对uitable中对应的列数数据进行处理并输出结果,其程序代码如附录B中的pushbutton3控件回调函数所示,其算法流程图如下: 第 50 页 共69页 取出uitable表中的一列数据 对该列数据进行求平均值、标准差、极限误差等处理 对该列数据根据选取的粗大误差方法进行粗大误差判断并剔除得到新的数据列 对新的数据列进行系统误差判断,包括现行系统误差和周期性系统误差 将最终的新数据列平均值、标准差等结果以及误差判断后的结果输出在GUI界面上 图5.1 “开始计算”按钮的回调函数算法流程图 5.3.5 下拉菜单的绘图选项的选取函数代码程序设计 下拉菜单用来显示当前正在进行绘图的内容,定义了全局变量huitu,用来在“绘图” 按钮中调用来根据下拉菜单中的内容进行绘图,其代码如下: function popupmenu2_Callback(hObject, eventdata, handles) % hObject handle to popupmenu2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global huitu val = get(hObject,'Value'); switch val case 1 huitu=1; 第 51 页 共69页 case 2 huitu=2; case 3 huitu=3; case 4 huitu=4; end 5.3.6 “绘图”按钮的回调函数代码程序设计 该按钮用来对下拉菜单所显示的内容进行绘图,用到全局变量x,X,v,V,分别 对被测量数据,粗大误差剔除前被测量数据,残余误差,粗大误差被剔除前粗大误差进行绘图,更直观地对处理数据进行判断。其程序代码如下: function pushbutton4_Callback(hObject, eventdata, handles) % hObject handle to pushbutton4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global huitu X V x v switch huitu case 1 plot(handles.axes1,v); grid; xlabel('数据个数l'); ylabel('残余误差v'); title('残余误差分布图'); case 2 plot(handles.axes1,x); grid; 第 52 页 共69页 xlabel('数据个数l'); ylabel('被测量x值'); title('输入数据分布图'); case 3 plot(handles.axes1,V); grid; xlabel('数据个数l'); ylabel('残余误差v'); title('粗大误差剔除前残余误差分布图'); case 4 plot(handles.axes1,X); grid; xlabel('数据个数l'); ylabel('被测量x值'); title('粗大误差剔除前输入数据分布图'); end 5.3.7 对翻页按钮进行回调函数代码程序设计 用来对表格中数据列数进行上一列或者下一列的选取,其程序代码如下: 一、“上一列”按钮的回调函数程序: function pushbutton5_Callback(hObject, eventdata, handles) % hObject handle to pushbutton5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) if str2double(get(handles.edit2,'string'))>1 set(handles.edit2,'string',num2str(str2double(get(handles.edit2,'string'))-1)); end set(handles.text12,'string',''); set(handles.text4,'string',''); set(handles.text6,'string',''); 第 53 页 共69页 set(handles.text8,'string',''); set(handles.text14,'string',''); set(handles.text18,'string',''); set(handles.text10,'string',''); set(handles.text20,'string',''); set(handles.text22,'string',''); set(handles.text25,'string',''); set(handles.text28,'string',''); 二、“下一列”按钮的回调函数程序: function pushbutton6_Callback(hObject, eventdata, handles) % hObject handle to pushbutton6 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) set(handles.edit2,'string',num2str(str2double(get(handles.edit2,'string'))+1)); set(handles.text12,'string',''); set(handles.text4,'string',''); set(handles.text6,'string',''); set(handles.text8,'string',''); set(handles.text14,'string',''); set(handles.text18,'string',''); set(handles.text10,'string',''); set(handles.text20,'string',''); set(handles.text22,'string',''); set(handles.text25,'string',''); set(handles.text28,'string',''); 5.3.8 “剔除粗大误差”按钮的回调函数代码程序设计 剔除粗大误差用来实现在线对粗大误差的剔除并将剔除后的数据重新存入一个新的 文件当中,并且将剔除后的数据继续显示在表格中。其程序代码如下: function pushbutton7_Callback(hObject, eventdata, handles) 第 54 页 共69页 % hObject handle to pushbutton7 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global wucha test if get(handles.text12,'string')=='无' beep; msgbox('无粗大误差','信息提示'); elseif isempty(get(handles.text12,'string'))==1 return; else button=questdlg('是否确定剔除粗大误差,剔除后该数据会被保存在另一文件,点击‘继续下一步’将保存新的文件','粗大误差剔除','继续下一步','不剔除','继续下一步'); switch button case '继续下一步' inputdata=get(handles.uitable1,'data'); datas=cell2mat(inputdata); n=str2double(get(handles.edit2,'string')); aa=datas(:,n); for i=1:length(wucha) for j=1:length(aa) if aa(j)==wucha(i) aa(j)=nan; end end end datas(:,n)=aa; [row col] = size(datas); dcell = cell(row,col); for n=1 : col 第 55 页 共69页 pdata = datas(:,n); dcell(:,n)=mat2cell(pdata(:),ones(row,1),1); end set(handles.uitable1,'Data',dcell); ss=get(handles.text12,'string'); set(handles.text12,'string','无'); switch test case '.xls' [filename pathname]=uiputfile('*.xls', '保存计算结果'); str=[pathname filename]; if filename==0 return; else data=get(handles.uitable1,'data'); name=get(handles.uitable1,'columnname'); names(1,:)=name(:,1); xlswrite(str,names,'sheet1','A1'); xlswrite(str,data,'sheet1','A2'); end case '.txt' end case '不剔除' return; end end 5.3.9 “退出”按钮的回调函数 退出按钮的回调函数很简单,如下: function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) 第 56 页 共69页 % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) close(gcf); 5.4 GUI界面的程序测试 运行zhujiemian.m文件并点击运行得到如下图5.5所示: 图5.5 运行后的zhujiemian.m 点击“点击进入”按钮,得到本次GUI设计的执行界面,如下图5.6所示: 第 57 页 共69页 图5.6 进入主要执行界面 接着点击“选取文件”,选取excel或者txt文件,比如我们选取“模板文件”下的data.xls,得到下图5.7所示: 第 58 页 共69页 图5.7 读入数据 接着使用“上一列”或者“下一列”按钮选择处理数据的列数,比如点击“下一列”选择地二列,然后点击“开始计算”按钮得到如下图5.8所示结果: 第 59 页 共69页 图5.8 计算后的结果 接着我们可以同过下拉菜单进行绘图,比如我们下拉菜单选择“粗大误差剔除前残 余误差分布图”,点击绘图按钮,得到如下图5.9所示: 图5.9 绘图结果 根据下拉菜单的选择,我们可以一直通过点击“绘图”按钮进行绘图。现在界面上显示了最终的结果,我们发现此时该列数据含有一个粗大误差20.3,因此我们将通过点击“剔除粗大误差”按钮进行粗大误差的在线剔除。点击该按钮后得到如下图5.10所示提示框: 图5.10 粗大误差剔除选项 此时如果我们不打算剔除原文件中的该粗大误差并保存在另一个新的文件中,我们 可以点击“不剔除”按钮,否则点击“继续下一步”。点击之后得到如下图5.11所示窗口: 第 60 页 共69页 图5.11 剔除误差后的数据存入新的文件 接着我们可以选择一个文件夹进行新数据的保存,比如我们选择在桌面上保存一个 名为makui的文件点击“保存”,该窗口会消失,然后我们在桌面上会得到一个名为makui的excel文件。随机我们打开该文件并打开我们初始读入的文件data.xls进行比较,下图5.12为原文件data.xls,图5.13为新的保存的文件makui.xls。 第 61 页 共69页 图5.12 原表格中的数据 第 62 页 共69页 图5.13 剔除误差后新存入表格中的数据 通过比较,我们发现新保存的文件makui.xls中的第二列数据粗大误差20.3已经被 剔除。同样的GUI中表格中的该数据也已经被剔除,同时粗大误差项也已经显示为“无”。如下图5.14所示: 第 63 页 共69页 图5.14 误差剔除后的显示结果 同样的,我们可以对txt文件进行相应的操作,如果我们已经使用完毕,我们点击 “退出”按钮,则会退出该GUI界面。 综上所述,我们已经实现了读入数据,表格显示,计算输出,误差判断,绘图比较, 在线剔除粗大误差的所有功能。 5.5 GUI转换成为可运行的exe文件 要将用MATLAB语言编写的函数文件编译成可执行的*.exe文件(即可脱离Matalab环境的执行程序),首先要安装和配置好MATLAB Compiler,一般来说,在安装MATLAB时就已经安装了相应版本的MATLAB Compiler。只是不同版本的MATLAB,其编译器的使用方法有一定的差异,这一点要引起一定的注意。 在确定安装好MATLAB Compiler后,还需要对Compiler进行适当的配置,方法是在MATLAB命令窗口输入:Mbuild –setup。然后根据提示执行相应的操作,使用者可根据自己计算机中现有编译器的情况选择合适的编译器,如VC++ 6.0、VC++7.0、Bland C的编译器等。当然,如果你的计算机里根本就没有安装其他任何语言的编译器,也可选择MATLAB自带的Lcc编译器,其实这个编译器对大多数用户已经够用了(我就是选 第 页 共69页 择的MATLAB自带的Lcc编译器)。配置好编译器后,自然就是对自己编写的M文件进行编译了。 将MATLAB当前工作目录定为C:\\Documents and Settings\\Administrator\\桌面\\等精度数据的误差处理与分析,将M文件编译为可执行文件的语法是: >>mcc –m fun1.m fun2.m….. 其中fun1就是最后的可执行文件的名称。 另外,也可通过采用命令开关-o指定编译最终目标文件的名称,如 mcc –m main.m –o mrank_main,就是将编译后的文件指定为mrank_main.exe。 编译后的生成文件根据编译器的版本不同而不同。具体的可参阅相关资料。如果要在没有安装MATLAB的计算机上执行编译后的程序,首先要将\\\\MATLAB701\\\oolbox\\\\compiler\\\\deploy\\\\win32中的MCRinstaller.exe安装到该计算机上(7.0以前的版本是mglinstaller.exe)。其次是要将―MCRinstaller.exe安装目录\\\\runtime\\\\win32‖这个路径添加到该计算机的环境变量中,添加的方法是:右击―我的电脑‖―属性‖―高级‖―环境变量‖―添加‖指定一个变量名,然后将上述路径复制到里面就可以了。第三步是将编译生成的相相关文件拷贝到同一目录下(当然其他目录亦可)。第四步是打开MS-dos操作窗口,进入到编译后的*.exe程序所在的目录,执行编译生成的*.exe文件即可。需要说明的一个问题:如果你的程序还附带有图片(如Version上的图标)、Web页面(如help文档),在编译的时候可能无法与M文件一起编译(因为我没有试过,也没有看到有关这方面的介绍),这没有关系,先在计算机上执行一次你编译后生成的可执行文件,这时在同一目录下会生成一个以你编译后的程序名+_mcr结尾的文件夹,这时,你只需要把与程序相关的图标和Web页面拷贝到该文件夹中的MATLABprogram下面的一个子目录(一般与用于编译的文件夹名相同)中即可。 综合上面的说法,我们有两个M文件,因此在MATLAB命令窗口中输入: >>-mcc –m zhujiemian.m caotu.m 此时,MATLAB会自动选择自带的编译器来进行编译,编译完之后,得到如下图5.15所示文件: 第 65 页 共69页 图5.15 打包时产生的文件 Zhujiemian.exe即为可运行的程序,将其运行后可得到如下图5.16所示: 图5.16 的zhujiemian.exe程序的运行结果 其中后面的为DOS窗口。 至此,MATLAB在误差理论中的应用的总体设计已经完毕。 第 66 页 共69页 总结 经过一个学期的努力,在景老师的指导下,我已经顺利地完成了本次的毕业设计, 本次设计实现了对存放在txt或者excel文件中的某一组等精度测量数据的一些处理,其中包括:求其平均值、单次测量的标准差、算术平均值的标准差、极限误差并输出显示,以及对该组数据进行粗大误差的判断及在线剔除,系统误差的判断,并绘制处理数据的分布图以及残余误差分布图等功能。 虽然该软件已经实现了任务书上所要求的功能,但仍有些不足之处。 首先,该软件处理的对象为等精度的数据,对于不等精度的数据处理却无法判别。 其次,该软件的主要执行部分虽然已经完善,但是对于一些辅助功能,比如建立一 些菜单项,例如帮助菜单,文件菜单等,还是有些欠缺,如果能够加上这些,会让该软件更加完善。 另外,该软件在功能上有一点不足之处,就是对txt文件的数据中的粗大误差进行 在线剔除后不能保存在新的文件里,这对于txt文件的载入带来了更多的考虑。 最后,该软件的程序方面,主要为计算部分,粗大误差、系统误差的判断方法有些 较少,可以让更多的算法加入,这样的话该软件的准确度也会更加高。 做完这些,对于即将毕业的我们,会是一个很好的洗礼,对我们走向社会会有更加 大的帮助,希望以后我们会有更大的进步。 第 67 页 共69页 致谢 四年的读书生活在这个季节即将划上一个句号,而于我的人生却只是一个逗号,我将面对又一次征程的开始。四年的求学生涯在师长、亲友的大力支持下,走得辛苦却也收获满囊,在论文即将付梓之际,思绪万千,心情久久不能平静。伟人、名人为我所崇拜,可是我更急切地要把我的敬意和赞美献给一位平凡的人,我的导师。我不是您最出色的学生,而您却是我最尊敬的老师。您治学严谨,学识渊博,思想深邃,视野雄阔,为我营造了一种良好的精神氛围。授人以鱼不如授人以渔,置身其间,耳濡目染,潜移默化,使我不仅接受了全新的思想观念,树立了宏伟的学术目标,领会了基本的思考方式,从论文题目的选定到论文写作的指导,经由您悉心的点拨,再经思考后的领悟,常常让我有―山重水复疑无路,柳暗花明又一村‖。 感谢我的爸爸妈妈,焉得谖草,言树之背,养育之恩,无以回报,你们永远健康快乐是我最大的心愿。在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚谢意!同时也感谢学院为我提供良好的做毕业设计的环境。 最后再一次感谢所有在毕业设计中曾经帮助过我的良师益友和同学,以及在设计中被我引用或参考的论著的作者。 第 68 页 共69页 参考文献 [1]费业泰.误差理论与数据处理(第六版)[M].北京:机械工业出版社,2010. [2]李岩,花国梁.精密测量技术(修订版)[M].北京:中国计量出版社,2001. [3]薛山.MATLAB基础教程[M].北京:清华大学出版社.2007. [4]CLEVE B.MOLER .MATLAB数值计算[M].喻文健译 .北京:机械工业出版社,2001. [5]王家文,曹宇.MATLAB6.5图形图像处理.[M].北京:国防工业出版社,2003. [6]张世英,刘智敏.测量实践的数据处理[M].北京:科学出版社,1997. [7]肖明耀.实验误差估计与数据处理[M].北京:科学出版社,1980 [8]张世英,刘智敏.测量实践的数据处理[M].北京:科学出版社,1997. [9]求是科技.MATLAB7.0从入门到精通[M].北京:清华大学出版社,2006. [10]丁丽娟.数值计算方法[M].北京:北京理工大学出版社,1997. [11]钱葱,工锡森.MATLAB在实验数据处理中的应用[J].铁道师院学报,2002(1):61-81. [12]周在莹.MATLAB求解线性方程数值解的相关讨论[J].科技信息,2008(2):53-60. [13]刘磊.MATLAB在“数字电路”课程教学中的应用[N].电气电子教学学报,2008-6-12(5). [14] Monczka, RM, EL Nichols, & TJ Callahan. Value of Supplier Information in the Decision Process[J]. International Journal of Purchasing and Materials Management, 1992.28(2): 20-30. [15] Allen James.Error Data Processing[A].2008. [16]张笑天,杨奋强.MATLAB7.x基础教程[M].西安:西安电子科技大学出版社,2007. [17]李庆阳,王能超,易大义.数值分析[M].武汉:华中科技出版社,2006. [18]浦俊,吉家峰.MATLAB工程数学解题指导[M].上海:浦东电子出版社,2001. [19]郑阿奇,曹弋,赵阳.MATLAB使用教程[M].北京:电子工业出版社,2005. 第 69 页 共69页 在误差理论与数据处理中应用MATLAB的研究性实验教学 [摘要]——为了加强练习,MATLAB软件作为教学辅助工具应用于误差理论与数据处理这门学科中。基于MATLAB强大的仿真计算功能、画图能力,以及丰富的工具箱,上机实验已经被应用于这门课程之中。它提高了学生们的创新能力和仿真学习的兴趣,正是因为MATLAB将理论变得更加具有直观性,更加形象,它在教学中的应用也是逐步上升。 [关键词]——MATLAB语言;数据处理;回归分析;最小二乘法 简 介 误差理论与数据处理是测量与控制工程专业的一门非常重要的专业基础课程。主要内容为物理量的静态以及动态测量中的误差理论与数据处理。这门课程包括了很多的内容,但是鉴于我们的学习时间有限,并且很多章节比如最小二乘、回归分析等包含了非常大的数据数组计算、最大值计算以及坐标绘图,学生们经常会因为没有时间去想那些基础的理论原则和解决问题的方法而变得比较困惑迷茫,因此会让他们的学习兴趣大大削弱。 当今时代计算机科学发展的十分迅速。在数据处理方面有许多种类得辅助软件。因此用这些软件辅助教学对于促进教学的发展以及创新体系的发展都有至关重要的作用。因此我们开设了上机实验。学生们可以利用电脑做数据分析以及处理方面的练习。这样的话可以很有效地提高学生们在解决实际问题中的兴趣,还可以提高他们在思考问题方面的能力。 选择实验平台软件 MATLAB是一种具有很好人机互动界面的高级语言软件,它可以使你在计算问题的时 候比其他传统语言软件比如C,C++以及Fortran具有更快的速度。对于只掌握了一点计算机语言知识的学生们,它可以很容易的让你写出算法程序。MATLAB提供了很宽应用领域,包括信号与图像处理,通讯,控制系统设计,测试和测量,财务模型与分析,以及计算生物学等。如今,MATLAB这门软件对于工程师以及科学家解决问题来说已经是最好的软件。 在MATLAB环境中,处理一个复杂的矩阵,实数,常数,多项式功能等都是基本的数据操作。赋值的一般形式为: 变量=表达式(常数) 例如,如果输入一个矩阵这比C语言简单多了。 ,那么输入为A=[1 2 3;4 5 6;7 8 9], MATLAB不仅可以计算基础的代数运算,而且还可以计算矩阵运算。另外,减法,加法,除法,乘法按照本身的运算顺序进行计算,圆括号也可以决定操作的运算顺序。MATLAB中的操作被设计的尽可能的更加自然。MATLAB可以使你在不太良好的应用基础下快速且容易的做出运算。因此在开始时,选择测量日期作为一个基础更加有利于使用者。MATLAB也提供了一些基础的常见函数功能,比如矩阵的逆为inv(),矩阵指数为expm()等。在MATLAB中用撇加圆括号(’)来表达一个复杂的矩阵的共轭转置。 MATLAB也提供一些常用的控制语句,循环控制可以用(if),(for),(while)等,这种形式有点类似于C语言。 此外,MATLAB环境提供了多种技术来用图表显示数据。Plot()是一个基础的绘图功能,输入的不同它就有不用的形式。可以定义颜色、线条形式、标记形式(比如加号或者圆圈)。因此我们可以把多组设置应用于一个图表当中,可以获取数据的多种信息,比如线性关系或者非线性关系、一个区段内的峰值等。在测量数据方面对于我们来说建立一个实体的数学模型非常重要。这种方法比平常的图表更加快速、准确。 通过以上对MATLAB的分析,它是非常合适我们选择作为数据处理的辅助软件。 实验内容设计 这门课程没有实验方面的相关材料,所以我们特意凭着我们在教学以及学生在学习时遇到的情况编写了实验内容。在设计中有两点原则,内容如下: 1)加强解决实际问题的练习。数据处理经常是用于解决实际问题的,它需要同学们在学习中有很强的兴趣,相比之下,把重点放在如何强调这门课程有多重要就要好很多了。 2)鼓励创新,解决问题时寻找不同的解决方法。这些实验步骤在很多大学是非常详细的,同学们在按着预订的步骤下不需要对这些原则有过多的理解。因此就不会影响大家在解决问题能力上的提升。鉴于这种情况,我们只给出一些在设计实验内容中解决问题的方法。同学们需要借助于一些原有的函数或者编程来完成实验。 实验指导书是根据以上原则编写的。在这本书里,有5个实验。实验内容在下面的表1里。第一个和第二个实验是让同学们借助电脑掌握数据处理的方法。比如平均值,标准偏差,随机误差,系统误差等等;第三个实验需要同学们利用最小二乘法解决线性方程求出未知数;第四个和第五个实验需要同学们利用回归分析建立线性回归方程以及非线性方程。每个实验都包含其主要的实验目的,实验要求,以及实验内容等等。根据测量步骤同学们可以完成被测量的测量,然后处理测量数据。如果MATLAB这门课程没有开设,那么一个关于学习MATLAB语言的实验应该开设,还有就是,基础的MATLAB知识应该在附录中介绍,比如工作环境,基本的语法,以及循环控制等。 表1 实验内容列表 具体实例及结果 A. 等精度测量的数据处理 如果被测量直接用等精度测量,而且在这一系列测得量中没有系统误差和随机误差,那么数据处理的步骤如下: 1)计算算术平均值; 2)计算残余误差; 3)计算在一系列测得量中的单次标准差; 4)计算算术平均值的标准差; 5)计算极限误差; 6)写出最终结果。 例1:一个轴的直径用等精度测量,测量数据为24.774,24.778,24.771,24.780,24.772, 24.777,24.773,24.775,24.774,求出测量结果。 数据处理的程序如下: x=[24.774,24.778,24.771,24.780,24.772,24.777,24.773,24.775,24.774] aver=mean(x);% 计算算术平均值; v=x-aver;% 计算残余误差; s=std(x);% 计算在一系列测得量中的单次标准差; N=size(x);%计算被测量的个数; n=N(1,2); st=s/sqrt(n);% 计算算术平均值的标准差; lim=3*st;%计算极限误差; 如果这些被测量中包换系统误差或者随机误差,我们也可以凭借MATLAB找出它们。例如,在寻找系统误差时,我们可以用plot()来画出残余误差分布图(如图1所示)。我们可以从图中看出测量值中是否存在系统误差。从图1可以看出在图中残余误差加或者减的现象没有多大区别,因此我们没有根据怀疑改组数据存在系统误差。 MATLAB同样可以提供一些数学函数,例如mean(),std()等等。但是同学们不光是要学会运用这些函数,更要学会利用这些基本函数去在实验中编程。 图1 残余误差分布图 B. 线性回归方程的拟合实验 回归分析从概念上说是一种找出变量之间关系的简单方法。在工业和农业生 产以及科学研究中它有非常广泛的应用。单一的线性回归是非常普遍的,它们是建立在最小二乘法的基础上分析两个变量之间关系的方法。 例2:实验中在不同的重量承受下对弹簧的长度进行了测量,测量数据如表2中所示。求弹簧长度与其承受质量之间的回归方程。 表2 测量数据表 取质量为横坐标x,取长度为纵坐标y,我们可以通过画出分布图来观察弹簧质量和长度之间的关系。 在命令窗中输入如下程序: x=[5;10;15;20;25;30] y=[7.25;8.12;8.95;9.90;10.9;11.8] plot(x,y,’*’) 分布图如图2所示。根据图2可以看出,长度与质量之间的关系近似于线性,回归方程也是线性的:y=bx+b0。b是弹簧的弹性系数,b0是弹簧在不承受力的情况下的长度。因此参数b,b0可以通过最小二乘法求出。 图2 长度(y)与质量(x)关系分布图 鉴于被测量yi之间的精度是一样的,因此我们可以将残余误差(测量值与真实值之差)用矩阵的形式写出来: Y-XB=V 按照最小二乘法的回归原则,系数矩阵如下所示: MATLAB程序: X=[1,5;,1,10;1,15;1,20;1,25;1,30]; Y=[7.25;8.12;8.95;9.90;10.9;11.8]; B=inv(X’*X)*X’*Y;%计算逆运算 y=B(2)*A(:,2)+B(1); plot(A(:,2),Y,’.’,A(:,2),y) 线性回归如图3所示。其中b为0.1831,b0为6.2827。综上,我们想要得到的结果为: y=0.1831x+6.2827 用这个方程,我们可以预计出弹簧在不同质量下的长度。 很多同学认为数算是很烦躁的一件事,但是现在他们对这种实验是非常地感兴趣。他们的兴趣已经被大大地提升了起来。练习结果表明对电脑的使用会减少复杂的计 算量,而且在数据处理方面还可以避免出现错误,因此MATLAB可以被应用于很多其他的科学实验当中去。 总 结 在误差理论与数据处理这门课中有很多相关的基于MATLAB的实验,它们不仅加深同学们对理论的理解,还可以增强同学们在设计测量方案中的能力。同样的,电脑科技的应用已经使实验非常形象、更加方便。同学们的创新潜力也会被激发,因此实验课程已经成为锻炼学生们创新能力的非常重要的奠基石。 参考文献 [1] 杨洪涛.误差理论与数据处理在教学方法中的研究(社会科学),2003.10.17.pp101-103大学出版社,1996 [2]雪丁宇. 辅助控制系统设计computer-matlab语言及其应用.北京:清华大学 [3]李卫红,龚伟国,姚洪. 教学改革中的误差理论与数据处理和建立实验课程.实验技术与管理,2003,pp125-128 [4]费业泰.误差理论与数据处理.中国机械出版社.2000,pp 155 [5]邱英.MATLAB在线性拟合中的最小二乘法应用.2007.5,pp165-166 附录A 表A1 t分布表(=0.01) 自由度v 4 5 6 7 8 9 10 11 12 t值 9.92 5.84 4.60 4.03 3.71 3.50 3.36 3.25 3.17 自由度v 13 14 15 16 17 18 19 20 21 t值 3.11 3.05 3.01 2.98 2.95 2.92 2.90 2.88 2.86 自由度v 22 23 24 25 26 27 28 29 30 t值 2.85 2.83 2.82 2.81 2.80 2.79 2.78 2.77 2.76 表A2 格罗布斯法的临界值g0(n,) 数据个数n 3 4 5 6 7 8 9 10 11 12 13 14 g0(n,0.01) g0(n,0.05) 数据个数n g0(n,0.01) g0(n,0.05) 1.16 1.49 1.75 1.94 2.10 2.22 2.32 2.41 2.48 2.55 2.61 2.66 1.15 1.46 1.67 1.82 1.94 2.03 2.11 2.18 2.23 2.28 2.33 2.37 15 16 17 18 19 20 21 22 23 24 25 2.70 2.75 2.78 2.82 2.85 2.88 2.91 2.94 2.96 2.99 3.01 3.59 2.41 2.44 2.48 2.50 2.53 2.56 2.58 2.60 2.62 2. 2.66 3.17 表A3 罗曼诺夫斯基法的检验系数K(n,0.01) 数据个数n 4 5 6 7 8 K值 11.46 6.53 5.04 4.36 3.96 数据个数n 9 10 11 12 13 K值 3.71 3.53 3.41 3.31 3.23 数据个数n 14 15 16 17 18 K值 3.17 3.12 3.08 3.04 3.01
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务