
测量误差理论和测量数据处理.doc
8页课题名称:测量误差理论和测量数据处理学 院:海滨学院姓 名:杜剑学 号:14410108数据处理1. 变值系统误差的判定1.1 马利科夫判据马利科夫判据是常用的判别有无累进性系统误差的方法把 n 个等精密度测量值所对应的残差按测量顺序排列,把残差分成前后两部分求和,再求其差值若测量中含有累进性系统误差,则前后两部分残差和明显不同,差值应明显地异于零所以马利科夫判据是根据前后两部分残差和的差值来进行判断当前后两部分残差和的差值近似等于零,则上述测量数据中不含累进性系统误差, 若其明显地不等于零(与最大的残差值相当或更大) ,则说明上述测量数据中存在累进性系统误差n 为奇数时1.2 阿卑-赫梅特判据通常用阿卑 —赫梅特判据来检验周期性系统误差的存在把测量数据按测量顺序排列,将对应的残差两两相乘,然后求其和的绝对值,再与总体方差的估计相比较,若式 成立则可认为测 量中存在周期性系统误差 当我们按照随机误差的正态分布规律检查测量数据时,如果发现应该剔除的粗大误差占的比例较大 时(粗大误差的剔除在下节作详细介绍) ,就应该怀疑测量中含有非正态分布的系统误差 存在变值系统误差的测量数据原则上应舍弃不用。
但是,若虽然存在变值系统误差,但残差的 最大值明显地小于测量允许的误差范围或仪器规定的系统误差范围,则测量数据可以考虑使用,在 继续测量时需密切注意变值系统误差的情况 周期性系差的判别则存在周期性系差;否则不存在周期性系差2. 粗大误差剔除的常用准则 2.1 莱特准则 则 ix为异常值剔除不用;否则不存在异常值正态分布,n>10 的情况莱特检验法是一种测量数据服从正态分布情况下判别异常值的方法,主要n 为偶数时则存在累进性系差;否则不存在累进性系差ivMmax当nii12ii)3()(若 )(ˆ1211 Xnvnii )(ˆ3,10Xxni 用于测量数据数量较多的情况,一般要求测量次数 n 大于 102.2 肖维纳准则则 ix为异常值应剔除不用否则不存在异常值正态分布,n>5 的情况 肖维纳检验法也是以正态分布作为前提的,假设多次重复测量所得 n 个测量值中, 当残差绝对值时,则认为是粗大误差式中 n 是系数,可通过查附录 2 的肖维纳准则 表得到要注意的是肖维纳检验法是建立在测量数据服从正态分布的前提下,要求在 n > 5 时使用另外,肖维纳检验法没有给出剔除数据判据对应得置信概率。
2.3 格拉布斯准则则 ix为异常值应剔除不用否则不存在异常值格拉布斯检验法是在未知总体标准偏差的情况下,对正态样本或接近正态样本异常值进行判别的一种方法,是一种从理论上就很严密、概率意义明确、经实验证明效果较 的判据 对 g 值根据重复测量次数 n 及置信概率由附录 3 的格拉布斯准则表查出注意以下几个问题:(1)当偏离正态分布、测量次数少时,检验可靠性将受影响2)逐个剔除原则:若有多个可疑数据同时超过检验所定置信区间,应逐个剔除,先剔出残差绝对值最大的,然后重新计算标准偏差估计值,再行判别若有多个相同数据超出范围时,也应逐个剔除3)在一组测量数据中,可疑数据应极少;反之,说明系统工作不正常4)剔除异常数据是一件需慎重对待的事)(ˆ,5Xchxni )(ˆ,2nXgxi 题目:参考例 2-2-6 的解题过程,用 C 语言或 MATLAB 设计测量数据处理的通用程序,要求如下: (1)提供测试数据输入、粗大误差判别准则等的人机界面; (2)编写程序使用说明; (3)通过实例来验证程序的正确性 程序如下:#include #includemain(){float x[50],v[50],sum=0,dx,y=0,s2,vmax,v1=0,v2=0,v3=0;double ch,g;double ch1[33]={1.65,1.73,1.79,1.86,1.92,1.96,2.00,2.04,2.07,2.10,2.13,2.16,2.18,2.20,2.22,2.24,2.26,2.28,2.30,2.32,2.33,2.34,2.35,2.37,2.38,2.39,2.45,2.50,2.58,2.64,2.74,2.81,3.02};double g1[28]={1.15,1.46,1.67,1.82,1.94,2.03,2.11,2.18,2.23,2.29,2.33,2.37,2.41,2.44,2.47,2.50,2.53,2.56,2.58,2.60,2.62,2.64,2.66};Double g2[28]={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.71,2.75,2.79,2.82,2.85,2.88,2.91,2.94,2.96,2.99,3.10};int n,i,j,u;printf("请输入数据个数 n=");scanf("%d",printf("请输入%d 个数据:\n",n);for(i=0;i9*s2)printf("由莱特准则可知第%d 个数据为异常值。
\n",i);else{printf("由莱特准则可知该数据无异常值\n");break;}}if(u==2){ch=ch1[n-5];printf("ch=%7.2f\n",ch);if(vmax*vmax>ch*ch*s2)printf("由肖维纳准则可知第%d 个数据为异常值\n",i);else {printf("由肖维纳准则可知该数据无异常值\n");break;}}if(u==3){if(ng*g*s2) printf("由格拉布斯准则可知第%d 个数据为异常值\n",i);else {printf("由格拉布斯准则可知该数据无异常值\n");break;}}if(u==4){if(ng*g*s2)printf("由格拉布斯准则可知第%d 个数据为异常值\n",i);else {printf("由格拉布斯准则可知该数据无异常值\n");break;}}if(iv2&&v1-v2>=vmax)printf("由马利科夫判据知该数据存在累进性系统误差\n");elseprintf("由马利科夫判据知该数据不存在累进性系统误差\n");if(v1=vmax)printf("由马利科夫判据知该数据存在累进性系统误差。
\n");elseprintf("由马利科夫判据知该数据不存在累进性系统误差\n");}else {for(i=0;iv2)if(v1-v2>=vmax)printf("由马利科夫判据知该该数据存在累进性系统误差\n");elseprintf("由马利科夫判据知该该数据不存在累进性系统误差\n");if(v1=vmax)printf("由马利科夫判据知该该数据存在累进性系统误差\n");elseprintf("由马利科夫判据知该该数据不存在累进性系统误差\n");} for(i=0;i(n-1)*s2*s2)printf("由阿卑-赫梅特判据该数据存在周期性系统误差\n");elseprintf("由阿卑-赫梅特判据该数据不存在周期性系统误差\n");}调试截图如下:。












