粗大误差C语言程序#(精选.)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
误差分析的C语言实现
学院:电子信息工程学院
专业班级:通信1004
学生姓名:童博
学号:10284043
2012 年12 月26 日
一、编程分析
1、误差的基本概念
所谓误差就是测量值与真实值之间的差,可以用下式表示
误差=测得值-真值
(1)绝对误差:某量值的测得值和真值之差为绝对误差,通常简称为误差。
绝对误差=测得值-真值
(2)相对误差
绝对误差与被测量的真值之比称为相对误差,因测得值与真值接近,故也可以近似用绝对误差与测得值之比值作为相对误差。
相对误差=绝对误差/真值≈绝对误差/测得值
(3)引用误差
所谓引用误差指的是一种简化和使用方便的仪器仪表表示值的相对误差,它以仪器仪表某一刻度点的示值误差为分子,以测量范围上限值或全量程为分母,所得的比值称为引用误差。
引用误差=示值误差/测量范围上限
2、精度
反映测量结果与真值接近程度的量,称为精度,它与误差大小相对应,因此可以用误差大小来表示精度的高低,误差小则精度高,误差大则精度低。
精度可分
ⅰ准确度它反映测量结果中系统误差的影响程度
ⅱ精密度它反映测量结果中随机误差的影响程度
ⅲ精确度它反映测量结果中系统误差和随机误差综合的影响程度,其定量特征可以用测量的不确定度来表示。
3、有效数字与数据运算
含有误差的任何近似数,如果其绝对误差界是最末位数的半个单位,那么从这个近似数左方起的第一个非零的数字,称为第一位有效数字。从第一位有效数字起到最末一位数字止的所有数字,不论是零或非零的数字,都叫有效数字。
数字舍入规则如下:
①若舍入部分的数值,大于保留部分的末位的半个单位,则末位加1。 ②若舍去部分的数值,小于保留部分的末位的半个单位,则末位不变。
③若舍去部分的数值,等于保留部分的末位的半个单位,则末位凑成偶数。即当末位为偶数时则末位不变,当末位为奇数时则末位加1。 (2)算术平均值
对某一量进行一系列等精度测量,由于存在随机误差,其测得值皆不相同,应以全部测得值的算术平均值作为最后的测量结果。 1、算术平均值的意义
在系列测量中,被测量所得的值的代数和除以n 而得的值成为算术平均值。
设 1l ,2l ,…,n l 为n 次测量所得的值,则算术平均值121...n
i
n i l l l l x n n
=++=
=∑ 算术平均值与真值最为接近,由概率论大数定律可知,若测量次数无限增加,则算术平均值x 必然趋近于真值0L 。
i v = i l -x
i l ——第i 个测量值,i =1,2,...,;n i v ——i l 的残余误差(简称残差)
2、算术平均值的计算校核
算术平均值及其残余误差的计算是否正确,可用求得的残余误差代数和性质来校核。 残余误差代数和为:
1
1
n n
i
i
i i v l nx ===-∑∑
当x 为未经凑整的准确数时,则有
1
n
i
i v
==∑0
1)残余误差代数和应符合: 当
1
n i
i l =∑=nx ,求得的x 为非凑整的准确数时,1
n
i
i v =∑为零;
当
1n i
i l =∑>nx ,求得的x 为凑整的非准确数时,1n
i
i v =∑为正;其大小为求x 时的余数。
当
1
n
i
i l =∑ n i i v =∑为负;其大小为求x 时的亏数。 2)残余误差代数和绝对值应符合: 当n 为偶数时, 1n i i v =∑≤ 2 n A; 当n 为奇数时, 1 n i i v =∑≤0.52n A ⎛⎫- ⎪⎝⎭ 式中A 为实际求得的算术平均值x 末位数的一个单位。 (3)测量的标准差 测量的标准偏差称为标准差,也可以称之为均方根误差。 1、测量列中单次测量的标准差 σ= = 式中 n —测量次数(应充分大) i δ——测得值与被测量值的真值之差 σ= 2、测量列算术平均值的标准差 x σ= 3、标准差的其他计算法 1. 别捷尔斯法 n i v σ=∑ 二、程序流程 1、算术平均值 2、求残余误差 3、校核算术平均值及其残余误差 4、判断系统误差 5、求测量列单次测量的标准差 6、判别粗大误差 7、求算术平均值的标准差 8、求算术平均值的极限误差 9、写出最后测量结果 三、编程实现 源程序: #include "stdafx.h" #include "stdio.h" #include "stdlib.h" #include "math.h" double 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.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_num);//求残余误差 void revise_average_fun(double datas[],double canyu_error_data[],double average,int datas_num);