ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:251.20KB ,
资源ID:7714323      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7714323.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言编程处理粗 大 误 差.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言编程处理粗 大 误 差.docx

1、C语言编程处理粗 大 误 差误差理论与数据处理实验报告*班 级: 076091 学 号: *设计时间: 2011.10.01 粗 大 误 差 处 理一、实验目的通过编程深入地了解误差的基本性质以及处理方法二、实验原理1、误差的基本概念所谓误差就是测量值与真实值之间的差,可以用下式表示误差=测得值-真值(1)绝对误差:某量值的测得值和真值之差为绝对误差,通常简称为误差。绝对误差=测得值-真值(2)相对误差绝对误差与被测量的真值之比称为相对误差,因测得值与真值接近,故也可以近似用绝对误差与测得值之比值作为相对误差。相对误差=绝对误差/真值绝对误差/测得值(3)引用误差所谓引用误差指的是一种简化和使

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

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

4、量所得的值,则算术平均值 算术平均值与真值最为接近,由概率论大数定律可知,若测量次数无限增加,则算术平均值必然趋近于真值。 -第个测量值,=的残余误差(简称残差)2、算术平均值的计算校核算术平均值及其残余误差的计算是否正确,可用求得的残余误差代数和性质来校核。残余误差代数和为:当为未经凑整的准确数时,则有1)残余误差代数和应符合:当=,求得的为非凑整的准确数时,为零;当,求得的为凑整的非准确数时,为正;其大小为求时的余数。当,求得的为凑整的非准确数时,为负;其大小为求时的亏数。2)残余误差代数和绝对值应符合:当n为偶数时,A;当n为奇数时,式中A为实际求得的算术平均值末位数的一个单位。(3)测

5、量的标准差测量的标准偏差称为标准差,也可以称之为均方根误差。1、测量列中单次测量的标准差式中 测量次数(应充分大)测得值与被测量值的真值之差2、测量列算术平均值的标准差3、标准差的其他计算法1别捷尔斯法三、实验内容:假定该测量列不存在固定的系统误差,则可按下列步骤求测量结果。1、算术平均值2、求残余误差3、校核算术平均值及其残余误差4、判断系统误差5、求测量列单次测量的标准差6、判别粗大误差7、求算术平均值的标准差8、求算术平均值的极限误差9、写出最后测量结果四、实验报告运行编制的程序,分析运行结果。为方便验证程序的正确性,验证课本第50页例222数据。分析第九号数据,得知其存在粗大误差。重新

6、输入数据:得到正确结果。程序如下:#include stdafx.h#include stdafx.h#include stdio.h#include stdlib.h#include math.hdouble gebruce=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.64,2.66,2.74, 2.81,2.87,2.96,3.17;double T=63.66,9.92,5.84,4.60,4.03,3.71,3.

7、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,2.70,2.68,2.66,2.65,2.64, 2.63,2.63,2.58;double average_fun(double datas,int datas_num);/求平均数void canyu_error_fun(double datas,double canyu_error_data,double average,int datas_nu

8、m);/求残余误差void revise_average_fun(double datas,double canyu_error_data,double average,int datas_num);void judge_system_error_fun(double canyu_error_data,int datas_num);/判断系统误差/马利准则/阿卑准则void abei(double canyu_error_data,double std_error_average,int datas_num);/求测量列单次测量的标准差double std_row_fun(double can

9、yu_error_data, int datas_num);/判别粗大误差void crassitude_error_fun(double datas, double average, double std_besia, int datas_num);int liyiter(double canyu_error_data,double std_row_besia,int datas_num);/求算数平均值的标准差double std_error_average_fun(double std_bersia,int datas_num);/求算数平均值的极限误差double limit_erro

10、r_average_fun(double std_error_average,int datas_num);double myround(double val,int digits);int main(int argc, char* argv)/开辟数组的指针double *datas,*canyu_error_data;/保存的数据double average,canyu_error=0,std_besia=0,std_error_average=0,limit_error_average=0;/测试数据/double datas=24.774,24.778,24.771,24.780,24

11、.772,24.777,24.773,24.775,24.774;/数组长度以及一些常量int datas_num,j,flags;datas_num=9;printf(输入你要创建的数据容量:);scanf_s(%d,&datas_num);/创建数组,数据,残余误差datas=(double *)calloc(datas_num,sizeof(double);canyu_error_data=(double *)calloc(datas_num,sizeof(double);printf(请输入你要测试的数据:n);/接收数据for(j=0;jdatas_num;j+) printf(%d

12、:,j+1); scanf_s(%lf,datas+j);/ printf(接收数据成功!n);average=myround(average_fun(datas,datas_num),3);canyu_error_fun(datas,canyu_error_data,average,datas_num); /平均值 printf(*n); printf(平均值为:%lfn,average); printf(*n); /残余误差 printf(残余误差为:n); for(j=0;jdatas_num;j+) printf(%d:,j+1); printf(%lfn,canyu_error_da

13、taj); printf(*n); /校核算术平均值 revise_average_fun(datas,canyu_error_data,average,datas_num); printf(*n); /判别系统误差 printf(马利可夫准则判定:n); judge_system_error_fun(canyu_error_data,datas_num); printf(*n); /测量列单次测量的标准差 std_besia=std_row_fun(canyu_error_data,datas_num); printf(测量列单次测量的标准差为:%lfn,std_besia); printf

14、(*n); /判别粗大误差 crassitude_error_fun(datas,average,std_besia,datas_num); printf(*n); flags=liyiter(canyu_error_data,std_besia,datas_num); printf(莱以特准则判断粗大误差:n); if(flags=0)printf(不存在粗大误差n); else printf(存在粗大误差,应剔除n); printf(*n); /算数平均值的标准差 std_error_average=std_error_average_fun(std_besia,datas_num); p

15、rintf(算数平均值的标准差为:%lfn,std_error_average); printf(*n); /算数平均值的极限误差 limit_error_average=limit_error_average_fun(std_error_average,datas_num); printf(算数平均值的极限误差为:%lfn,limit_error_average); printf(*n); /阿卑 printf(阿卑准则判定:n); abei(canyu_error_data,std_error_average,datas_num); printf(*n); return 0;/main/求

16、平均数double average_fun(double datas,int datas_num)int k=0;double average=0;for(k=0;kdatas_num;k+) average+=datask;average/=datas_num;return average;/求残余误差void canyu_error_fun(double datas,double canyu_error_data,double average,int datas_num) int k=0; for(k=0;kdatas_num;k+) canyu_error_datak=datask-av

17、erage; /校核算术平均值void revise_average_fun(double datas,double canyu_error_data, double average,int datas_num)int k=0;double sum_canyu=0,sum_datas=0,sum_canyu_test,A;for(k=0;kdatas_num/2.0*A) printf(该算术平均值不正确!n); else printf(该算术平均值正确!n);else if(sum_canyu_test(datas_num/2.0-0.5)*A) printf(该算术平均值不正确!n); e

18、lse printf(该算术平均值正确!n);/残余误差法判断系统误差void judge_system_error_fun(double canyu_error_data,int datas_num)int k,j;double system_errors=0,system_error=0,data_error;j=(datas_num+1)/2;for(k=0;kj;k+)system_errors+=canyu_error_datak;for(k=0;kdatas_num;k+)system_error+=canyu_error_datak;data_error=system_error

19、s-system_error;printf(该系统误差为:%lf,data_error);if(data_error0.01)printf(系统误差较小,故不存在系统误差n);else printf(存在系统误差n);/求测量列单次测量的标准差,方法二double std_row_fun(double canyu_error_data,int datas_num)double std_row_besia=0,std_row_bejacks=0,u;int k=0;for(k=0;kdatas_num;k+) std_row_besia+=canyu_error_datak*canyu_erro

20、r_datak; std_row_bejacks+=double(fabs(canyu_error_datak);std_row_besia=myround(sqrt(std_row_besia/(float)(datas_num-1),4);std_row_bejacks=myround(1.253*std_row_bejacks/(sqrt(datas_num*(float)(datas_num-1),4);u=myround(std_row_bejacks/std_row_besia-1,4);printf(贝赛尔-别捷尔斯判断系统误差:n);if(double(fabs(u)2/sqr

21、t(double)datas_num-1) printf(因为|u|=%lf2/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时=0.01,flag=1

22、时=0.05int k=0,j=0,flag=0;datas_list=(double *)calloc(datas_num,sizeof(double);for(k=0;kdatas_num;k+)datas_listk=datask;/冒泡排序法.由小到大排序for(k=0;kdatas_num;k+)for(j=0;jdatas_listj+1) temp=datas_listj; datas_listj=datas_listj+1; datas_listj+1=temp; else continue;x1=datas_list1;xi=datas_listdatas_num;x1=av

23、erage-x1;xi=xi-average;gi=xi/std_besia;g0=gebrucedatas_num-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(g1gi&gig0)printf(不存

24、在粗大误差n);else printf(存在粗大误差n);free(datas_list);/莱以特准则判别int liyiter(double canyu_error_data,double std_row_besia,int datas_num)int k=0,m=0;while(k3*std_row_besia) m=1; break; else k+;return m;/求算数平均值的标准差double std_error_average_fun(double std_bersia,int datas_num)double std_error_average;std_error_ave

25、rage=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_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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1