系统误差处理

上传人:桔**** 文档编号:563725388 上传时间:2023-08-29 格式:DOCX 页数:6 大小:29.71KB
返回 下载 相关 举报
系统误差处理_第1页
第1页 / 共6页
系统误差处理_第2页
第2页 / 共6页
系统误差处理_第3页
第3页 / 共6页
系统误差处理_第4页
第4页 / 共6页
系统误差处理_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《系统误差处理》由会员分享,可在线阅读,更多相关《系统误差处理(6页珍藏版)》请在金锄头文库上搜索。

1、等精度测量系统误差编程处理一、实验目的(1)、通过 C 语言编程,实现系统误差的处理。(2)、加深对 C 语言的理解,提高对 C 语言的使用能力。(3)、掌握对系统误差的判断方法,加深对系统误差的理解。二、实验内容1、实验数据实验数据来源于书本 P50 的例 2-22,数据如下表:序号123456789L/mm24.77424.77824.77124.78024.77224.77724.77324.77524.774且书本给出的计算数据如下:算数平均值为24.775mm。残余误差和为-0.001mm。残余误差平方和为 0.000069mm2。贝塞尔公式求得的标准差为 0.0029mm。别捷尔斯

2、公式求得的标准差为 0.0031mm。2、实验思路要想得到单次测量的标准差,必须先求的测量列的算术平均值,其次求 的残余误差,再求残余误差平方和,然后由贝塞尔公式或别捷尔斯公式求得 测量列单次的标准差,然后由不同公式计算标准差比较法,得出是否含有系 统误差。三、编程实现1、求算术平均值为了实现模块化,在此处用调用函数的方法,对数组求平均值。将测量 列看成数组,且赋值给一个数组,然后将数组的首地址当做参数传递给函数, 结果由 return 语句返回到主函数。实现算术平均值程序为:double averaqe_number(double *s,int N)double sum=0.0;double

3、 averaqe=0.0;int i=0;while(iN)sum+=*s;s+;i+;averaqe=sum/N;return(averaqe);2残余误差和的实现由残余误差计算公式可得:残余误差=测量值-平均值。所以可以将上一 步求得的平均值作为函数的一个参数传递到残余误差函数,然后在编写残余 误差程序,实现对残余误差和的求解。残余误差和求解程序如下:double offset(double b,int N,double mean)double z=0.0;int i;for(i=0;iN;i+)z+=(bi-mean);return(z);3、残余误差平方和的实现由残余物差平方和的公式:

4、残余物差平方和=(测量值-平均值)辽,则 同理可由求残余误差的方法求得残差平方和。程序如下:double sum_squares(double b,int N,double mean)double cuwcpfh=0.0,arr9;int i;for(i=0;iN;i+)arri =(bi-mean)*(bi-mean);for(i=0;iN;i+) cuwcpfh+=arri;return(cuwcpfh);4、贝塞尔公式求标准差由贝塞尔公式可知:标准差等于残差平方和除以(n-1 )再开根号。所 以只需把残差平方和及数据个数传递到贝塞尔公式求标准差的函数里即可。 程序实现如下:double

5、standard_deviation(int N,double sse)double z;z= sqrt (sse/(N-1);return(z);5、别捷尔斯公式求标准差 由别捷尔斯公式可知,只需将测量值、数据个数、算术平均值传递到 别捷尔斯公式求标准差函数即可。程序如下:double biejiersi(double b,int N,double mean)double z,sum_1=0.0;int i;for(i=0;iN;i+)sum_1 += fabs(bi-mean);z = 1.253*(sum_1/sqrtf (N*(N-1);return(z);6、用不同公式计算标准差比较

6、法 此处只是简单的加减乘除运算,没涉及到求和之类的复杂运算,所以直接 在主函数里进行四则运算。7、主函数 主函数包括调用函数的申明以及需打印的函数值。还有对系统误差是否有无 得判别。判别依据是,别捷尔斯公式求标准差/贝塞尔公式求标准差减一得到的 差值与2除以根号下(n-1)作比较,如果前者小,则无根据怀疑测量列有系统 误差;反之亦然。四、实验结果及误差分析运行后结果如下:L 05116u+1因“-故可判断该测量列无系统误差存在。24.774 24.778 24.771 24.78 24.772 24_777 24-773 24_775 24-774 岳均 mean = 24.775Oof se

7、t_&uri = 3.55271&-815jsse = 6 . SSSS9&005std = 3,3293447差淀d_l =取繭3朋妬丄典耋尔公式枣标進; 書两霽鷲窿施准差比值:std_l/std =std_l/std =9.35116439.051164 = 3-707107由对比可知:实验数据与理论数据有一些误差。实验误差一部分是由于四舍 五入之后再对数据处理造成的。例如:在输出平均值时,平均值数值可以由数据 转换命令由六位小数转换成与例题一样的三位数据,不过是显示结果为三位,但 是存储平均值时依然是六位小数,在后面调用平均数的运算中,会导致数值差别。 实验误差的另一部分是由数据存储时造

8、成的。例如:输入数组的数值为 24.780, 但在内存里,可能是 24.777779,虽然表面上这些差值很小,但数据处理的多了, 这就对数据的处理造成了相应的误差。五、实验程序#include stdafx.h#include stdio.h#include math.hdouble mean=0.0;void main()double averaqe_number(double *s,int N);double offset(double b,int N,double mean); double sum_squares(double b,int N,double mean); double

9、standard_deviation(int N,double sse); double biejiersi(double,int N,double mean); int i,n=9;double offset_sum,sse,std,std_1,ratio,u,t;doublea9=24.774,24.778,24.771,24.780,24.772,24.777,24.773,24.775,24.774;for(i=0;i9;i+)printf(%5.3f ,ai);printf(n);mean = averaqe_number(a,n);pri ntf(平均数 mean = %5.3fn

10、,mean); offset_sum = offset(a,n,mean);pri ntf(残余误差和 offse t_sum = %gn,offse t_sum);sse = sum_squares(a,n,mean);prin tf(残差平方和 sse = %gn,sse);std = standard_deviation(n,sse); prin tf(贝塞尔公式求标准差std = %gn,s td); std_1=biejiersi(a,n,mean);prin tf(别捷尔斯公式求标准差st d_1 = %gn,s td_l); prin tf(用两种方法计算的标准差比值为:n);p

11、rintf(std_1/std = %gn,std_1/std);pri ntf(令st d_1/s td = u+1n);u = std_1/std-1;prin tf(贝 Iu 二 %gn,u);t=2.0/sqrtf(n-1);if(fabs(u)t)printf (因 I u | 二 %f 2/sqrt(n-l) = %gn,fabs(u), t); printf(故可判断该测量列有系统误差存在。n);getchar(); getchar();double averaqe_number(double *s,int N)double sum=0.0;double averaqe=0.0;

12、int i=0;while(iN)sum+=*s;s+;i+;averaqe=sum/N; return(averaqe);double offset(double b,int N,double mean)double z=0.0;int i;for(i=0;iN;i+)z+=(bi-mean);return(z);double sum_squares(double b,int N,double mean)double cuwcpfh=0.0,arr9;int i;for(i=0;iN;i+)arri =(bi-mean)*(bi-mean);for(i=0;iN;i+)cuwcpfh+=arri;return(cuwcpfh);double standard_deviation(int N,double sse) double z;z= sqrt (sse/(N-1);return(z);double biejiersi(double b,int N,double mean) double z,sum_1=0.0;int i;for(i=0;iN;i+)sum_1 += fabs(bi-mean);z = 1.253*(sum_1/sqrtf (N*(N-1); return(z);

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

当前位置:首页 > 学术论文 > 其它学术论文

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