粗大误差c语言程序

上传人:mg****85 文档编号:35531696 上传时间:2018-03-17 格式:DOC 页数:14 大小:341.50KB
返回 下载 相关 举报
粗大误差c语言程序_第1页
第1页 / 共14页
粗大误差c语言程序_第2页
第2页 / 共14页
粗大误差c语言程序_第3页
第3页 / 共14页
粗大误差c语言程序_第4页
第4页 / 共14页
粗大误差c语言程序_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《粗大误差c语言程序》由会员分享,可在线阅读,更多相关《粗大误差c语言程序(14页珍藏版)》请在金锄头文库上搜索。

1、误差分析的 C 语言实现学学 院:院:电子信息工程学院专业班级:专业班级:通信 1004学生姓名:学生姓名:童博学学 号:号:102840432012 年年 12 月月 26 日日一、编程分析一、编程分析1、误差的基本概念所谓误差就是测量值与真实值之间的差,可以用下式表示误差=测得值-真值(1)绝对误差:某量值的测得值和真值之差为绝对误差,通常简称为误差。绝对误差=测得值-真值(2)相对误差绝对误差与被测量的真值之比称为相对误差,因测得值与真值接近,故也可以近似用绝对误差与测得值之比值作为相对误差。相对误差=绝对误差/真值绝对误差/测得值(3)引用误差所谓引用误差指的是一种简化和使用方便的仪器

2、仪表表示值的相对误差,它以仪器仪表某一刻度点的示值误差为分子,以测量范围上限值或全量程为分母,所得的比值称为引用误差。引用误差=示值误差/测量范围上限2、精度反映测量结果与真值接近程度的量,称为精度,它与误差大小相对应,因此可以用误差大小来表示精度的高低,误差小则精度高,误差大则精度低。精度可分准确度 它反映测量结果中系统误差的影响程度精密度 它反映测量结果中随机误差的影响程度精确度 它反映测量结果中系统误差和随机误差综合的影响程度,其定量特征可以用测量的不确定度来表示。3、有效数字与数据运算含有误差的任何近似数,如果其绝对误差界是最末位数的半个单位,那么从这个近似数左方起的第一个非零的数字,

3、称为第一位有效数字。从第一位有效数字起到最末一位数字止的所有数字,不论是零或非零的数字,都叫有效数字。数字舍入规则如下:若舍入部分的数值,大于保留部分的末位的半个单位,则末位加 1。若舍去部分的数值,小于保留部分的末位的半个单位,则末位不变。若舍去部分的数值,等于保留部分的末位的半个单位,则末位凑成偶数。即当末位为偶数时则末位不变,当末位为奇数时则末位加 1。(2)算术平均值对某一量进行一系列等精度测量,由于存在随机误差,其测得值皆不相同,应以全部测得值的算术平均值作为最后的测量结果。1、算术平均值的意义在系列测量中,被测量所得的值的代数和除以 n 而得的值成为算术平均值。设 ,,为 n 次测

4、量所得的值,则算术平均值 1l2lnl121.ni nillllxnn算术平均值与真值最为接近,由概率论大数定律可知,若测量次数无限增加,则算术平均值必然趋近于真值。x0L-iv ilx第 个测量值, =ilii1,2,., ; n的残余误差(简称残差)ivil2、算术平均值的计算校核算术平均值及其残余误差的计算是否正确,可用求得的残余误差代数和性质来校核。残余误差代数和为:11nnii iivlnx当为未经凑整的准确数时,则有x1ni iv01)残余误差代数和应符合:当=,求得的为非凑整的准确数时,为零;1ni ilnxx1ni iv当,求得的为凑整的非准确数时,为正;其大小为求时的余数。1

5、ni ilnxx1ni ivx当datas_num/2.0*A) printf(“该算术平均值不正确!n“);else printf(“该算术平均值正确!n“); else if(sum_canyu_test(datas_num/2.0-0.5)*A) printf(“该算术平均值不正确!n“);else printf(“该算术平均值正确!n“); /残余误差法判断系统误差 void judge_system_error_fun(double canyu_error_data,int datas_num) int k,j; double system_errors=0,system_error

6、=0,data_error; j=(datas_num+1)/2; for(k=0;k2/sqrt(%d-1)=%lfn“,u,datas_num,2/sqrt(double)datas_num-1);printf(“存在系统误差n“); return std_row_besia; /判别粗大误差 void crassitude_error_fun(double datas,double average,double std_besia,int datas_num) double *datas_list,temp; double x1,xi,g0,g1,gi;/flag 为 ,flag=0 时

7、 =0.01,flag=1 时 =0.05 int k=0,j=0,flag=0; datas_list=(double *)calloc(datas_num,sizeof(double); for(k=0;kdatas_listj+1)temp=datas_listj;datas_listj=datas_listj+1;datas_listj+1=temp;else continue; x1=datas_list1; xi=datas_listdatas_num; x1=average-x1; xi=xi-average; gi=xi/std_besia; g0=gebrucedatas_n

8、um-3; g1=x1/std_besia;printf(“使用格罗布斯判别准则判定粗大误差为:n“); printf(“x1=%lf,tx%d=%lfn“,datas_list1,datas_num,datas_listdatas_num); printf(“x1=%lf,tx%d=%lfn“,x1,datas_num,xi); printf(“g1=%lf,tg%d=%lftg0=%lfn“,gebrucedatas_num,datas_num,gi,g0);if(g13*std_row_besia) m=1;break;else k+; return m; /求算数平均值的标准差 dou

9、ble std_error_average_fun(double std_bersia,int datas_num) double std_error_average; std_error_average=std_bersia/(sqrt(double)datas_num); return myround(std_error_average,4); /求算数平均值的极限误差 double limit_error_average_fun(double std_error_average,int datas_num) double ta,limit_error_average;ta=Tdatas_

10、num-1;limit_error_average=ta*std_error_average;return myround(limit_error_average,4); void abei(double canyu_error_data,double std_error_average,int datas_num) int k; double abei_sum=0; for(k=0;ksqrt(double)datas_num-1)*std_error_average*std_error_average) printf(“因为 u=%lfsqrt(%d-1)*=%lfn“,abei_sum,

11、datas_num,sqrt(double)datas_num-1)*std_error_average*std_error_average);printf(“存在周期性误差n“); else printf(“不存在周期性误差n“); double myround(double val,int digits) double d = pow(10.0, digits); return (int)( val * d + 0.5 ) / d; 四、程序使用说明四、程序使用说明根据界面提示输入所需测试数据个数 再逐一输入测试数据 即可判断出该组数据是否存在粗大误差五、程序实例五、程序实例1.输入数据个数为 8 个 输入数据分别为: 12.113 12.114 12.117 12.119 12.115 12.116 12.118 12.301通过程序可以发现最后一位存在粗大误差2.输入数据个数为 9 个 输入数据分别为: 24.774 24.778 24.771 24.780 24.772 24.777 24.773 24.775 24.774通过程序验证该组数据无粗大误差

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号