您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 北京交通大学电子测量第二章大作业
电子测量大作业姓名班级老师王俊峰时间2015年12月12日数据处理的通用程序一.实验要求参考例2-2-6的解题过程,用c语言或MATLAB设计测量数据误差处理的通用程序,要求如下:(1)提供测试数据输入,粗大误差判别准则选择等的人机界面;(2)编写程序使用说明;(3)通过实例来验证程序的正确性。二.实验原理1.求平均值—U及标准偏差估计值)(UNiiUNU11—1)(1i2NUNuUNi2.检查有无异常数据。用于粗大误差剔除的常见方法有:①莱特检验法:当)(3xxxi时,该误差为粗大误差。用于数据服从正态分布的情况下判断异常值,主要用于测量数据较多时,一般要求n10。②肖维纳检验法:当)(xchxxi时,该误差为粗大误差。用于数据服从正态分布的情况下判断异常值,要求在n5时使用。③格拉布斯检验法:当)(xgxxi时,该误差为粗大误差,g值根据重复测量次数n和置信概率由附录3的格拉布斯准则表查出。格拉布斯检验法是在未知总体偏差的情况下,对正态样本或接近正态样本的异常值进行判别。④除了上述三种检验法外,还有奈尔检验法、Q检验法、狄克逊检验法等。3.判断有无随时间变化的变值系统误差。①判断有无累进性系统误差:n为偶数时,若max2/112/ininniiivvvn为奇数时,若max2/)1(12/)1(ininniiivvv则认为测量中存在累进性系统误差。②判断有无周期性系统误差:)(12111xnvvniii则认为测量中存在周期性系统误差。4.给出置信区间先求出平均值的标准偏差nvv)()(,根据n值,查t分布表,可以在给定置信概率下,查出at的值。然后求出置信区间:)(),(taUtUUUa三.实验程序#includestdio.h#includemath.hintw=0;/********求平均值**********//*形参分别为数据总量、数据*/floatave(intb,floata[]){floatsum,average;inti;for(i=0,sum=0;ib;i++){sum=sum+a[i];}average=sum/b;returnaverage;}/*********标准差估计值************//*形参分别为数据总量、数据、平均值*/floatsd(intb,floata[],floatav){floatsum2,c,d;inti;for(i=0,sum2=0;ib;i++){sum2=sum2+a[i]*a[i];}c=sum2-b*av*av;d=sqrt(c/(b-1));returnd;}/******莱特检验法判断粗大误差******//*形参分别为数据总量、数据、残差、标准差*/intWright(intcount,float*p,float*q,floatsd){inti,j[100],k,a;floatstandard=3*sd;do{k=0;for(i=0;icount;i++){if(fabs(*(q+i))standard){j[k]=i;k++;}}if(k!=0){a=j[0];if(k1){for(i=1;ik;i++){if(*(p+j[i-1])*(p+j[i]))a=j[i];}}printf(该组数据有异常数据%f\n,*(p+a));for(i=a;i=count;i++)*(p+i)=*(p+i+1);count--;k--;}}while(k!=0);return(count);}/****肖维纳检验法判断粗大误差******//*形参分别为数据总量、数据、残差、标准差*//**********数据总量为5-37*********/intChauvenet(intcount,float*p,float*q,floatsd){inti,j[100],k,a;floatch[38]={0,0,0,0,0,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};floatstandard=ch[count]*sd;do{k=0;for(i=0;icount;i++){if(fabs(*(q+i))standard){j[k]=i;k++;}}if(k!=0){a=j[0];if(k1){for(i=1;ik;i++){if(*(p+j[i-1])*(p+j[i]))a=j[i];}}printf(该组数据有异常数据%f\n,*(p+a));for(i=a;icount;i++)*(p+i)=*(p+i+1);count--;k--;}}while(k!=0);return(count);}/*******格拉布斯检验法判断粗大误差*******//*形参分别为数据总量、数据、残差、标准差*//*************数据总量为3-25*************/intGrabus(intcount,float*p,float*q,floatsd){inti,j[100],k,a;floatg[26]={0,0,0,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};floatstandard=g[count]*sd;do{k=0;for(i=0;icount;i++){if(fabs(*(q+i))standard){j[k]=i;k++;}}if(k!=0){a=j[0];if(k1){for(i=1;ik;i++){if(*(p+j[i-1])*(p+j[i]))a=j[i];}}}printf(该组数据有异常数据%f\n,*(p+a));for(i=a;i=count;i++)*(p+i)=*(p+i+1);count--;k--;}while(k!=0);return(count);}/******马利科夫判据判断累进性系统误差******//*形参分别为数据总量、数据、残差、标准差、平均值*/intmalikefu(intb,floata[],floatv[],floatsd,floatav){inti,q=0;floatmax,sum1=0,sum2=0,sum3=0,sum4=0,n,m;max=fabs(v[0]);for(i=0;ib;i++){if(fabs(v[i])max)max=fabs(v[i]);}if(b%2==0){for(i=0;i(b/2-1);i++){sum1=sum1+v[i];}for(i=b/2;ib;i++){sum2=sum2+v[i];}n=sum1-sum2;if(fabs(n)fabs(max)||fabs(n)==fabs(max)){printf(存在累进性系统误差\n);q=1;}if(fabs(n)fabs(max))printf(不存在累进性系统误差\n);}if(b%2!=0){for(i=0;i(b-1)/2;i++){sum3=sum3+v[i];}for(i=(b+1)/2;ib;i++){sum4=sum4+v[i];}m=sum3-sum4;if(fabs(m)fabs(max)||fabs(m)==fabs(max)){printf(存在累进性系统误差\n);q=1;}if(fabs(m)fabs(max))printf(不存在累进性系统误差\n);}returnq;}/******阿卑-赫梅判据判断周期性系统误差******//*形参分别为数据总量、数据、标准差、平均值*/intabhm(intb,floata[],floatv[],floatsd,floatav){inti,q=0;floatc[100],sum=0,n;for(i=0;ib-1;i++){sum=sum+v[i]*v[i+1];}n=sd*sd*sqrt(b-1);if(fabs(sum)n){printf(存在周期性系统误差\n);q=1;}else{printf(不存在周期性系统误差\n);}returnq;}/******95%置信概率下置信系数、置信区间*****//*形参分别为数据总量、数据、标准差、平均值*//**************数据总量为1-30**************/voidzxqj(intb,floata[],floatsd,floatav){floate[100]={0,0,12.706,4.303,3.182,2.776,2.571,2.447,2.365,2.306,2.262,2.228,2.201,2.179,2.160,2.145,2.131,2.120,2.110,2.101,2.093,2.086,2.080,2.074,2.069,2.064,2.06,2.056,2.052,2.048,2.045,2.042};floatn,m,l;intp,q;n=sd/(sqrt(b));m=av-e[b]*n;l=av+e[b]*n;printf(在95%%的置信概率下,\n置信系数为%f\t置信区间为%f至%f\n,e[b],m,l);}/**********主函数**********/voidmain(){intn,m,i,x,e,f;//n为测量数据个数,m为粗大误差剔除方法floata[100],vi[100];floatav1,sd1,av2,sd2,*p=a,*q=vi;printf(请输入需处理的测量数据的个数(小于30):\n);scanf(%d/n,&n);printf(请输入需处理的测量数据:\n);for(i=0;in;i++){scanf(%f,&a[i]);}printf(请选择粗大误差的剔除方法\n);if(n37)printf(1为莱特检验法;2为肖维纳检验法(不可取);3为格拉布斯检验法(不可取)\n);if(n25&&n=37)printf(1为莱特检验法;2为肖维纳检验法;3为格拉布斯检验法(不可取)\n);if(n10&&n=25)printf(1为莱特检验法;2为肖维纳检验法;3为格拉布斯检验法\n);if(5n&&n=10)printf(1为莱特检验法(不可取);2为肖维纳检验法;3为格拉布斯检验法\n);if(3n&&n=5)printf(1为莱特检验法(不可取);2为肖维纳检验法(不可取);3为格拉布斯检验法\n);scanf(%d,&m);av1=ave(n,a);sd1=sd(n,a,av1);for(i=0;in;i++){vi[i]=a[i]-av1;}printf(数据的均值为%f,方差为%f\n,av1,sd1);if(m==1)x=Wright(n,p,q,sd1);if(m==2)x=Chauvenet(n,p,q,sd1);if(m==3)x=Grabus(n,p,q,sd1);printf(除去粗大误差,剩余值为:\n);for(i=0;ix;i++)printf(%f,a[i]);printf(\n);av2=ave(x,a);sd2=sd(x,a,av2);printf(处理后数据的均值为%f,方差为%f\n,av2,sd2);for(i=0;ix;i++){vi[i]=a[i]-av2;}e=malikefu(x,a,vi,sd2,av2);f=abhm(x,a,vi,
本文标题:北京交通大学电子测量第二章大作业
链接地址:https://www.777doc.com/doc-4779253 .html