一、误差理论与数据处理实验报告
- 题目
3、代码
import numpy as np
from numpy import linalg
import matplotlib.pyplot as plt
data_l = [24.674, 24.675, 24.673, 24.676, 24.671, 24.678,
24.672, 24.674]
datas = np.array(data_l)
n = len(datas)
# 算术平均值
aver_value = sum(datas) / n
print("该测量列的算术平均值为:",aver_value)
# 求残余误差
v_is = []
for data in datas:
v_i = data - aver_value
v_is.append(v_i)
print("该测量列的残余误差列为:\n",v_is)
# 校核算术平均值及残余误差
# 方法 1
if sum(datas) == n*aver_value:
print("校核方法 1:\n")
print("\t 存在舍入误差;求得的算术平均值为非凑整的准确数时,残余
误差和为零!\n")
elif (sum(datas) > n*aver_value) and (sum(v_is) > 0):
print("校核方法 1:\n")
print("\t 存在舍入误差;求得的算术平均值为非凑整的准确数时,残余
误差之和为求平均值时的余数!\n")
elif (sum(datas) < n*aver_value) and (sum(v_is) < 0):
print("校核方法 1:\n")
print("\t 存在舍入误差;求得的算术平均值为非凑整的准确数时,残余
误差之和为求平均值时的亏数!\n")
else:
print("校核方法 1:\n")
print("\t 校核不通过,请检查\n")
# 方法 2
A = 0.000001
if (n%2 == 0) and (abs(sum(v_is)) <= ((n/2)*A)):
print("校核方法 2:\n")
print("\tn 为偶数,校核通过\n")
elif (n%2 != 0) and (abs(sum(v_is)) <= ((n/2-0.5)*A)):
print("校核方法 2:\n")
print("\tn 为奇数,校核通过\n")
else:
print("校核方法 2:\n")
print("\t 校核不通过,请检查\n")
# 判断系统误差
# 1、残余误差观察法
x_values = list(range(n))
y_values = v_is
plt.scatter(x_values, y_values, s = 15, c = 'red')
plt.title("残余误差分布图", fontsize = 20)
plt.ylabel("value of v_i", fontsize = 14)
plt.show()
print("\t 无根据怀疑存在系统误差")
# 求测量列单次测量的标准差
# 1、Bessel 公式
v_i_squareds = [v_i**2 for v_i in v_is]
standard_deviation1 = np.sqrt(sum(v_i_squareds)/(n-1))
print("Bessel 公式下测量列单次测量的标准差为:
\n",standard_deviation1)
# 2、Peters 公式
abs_v_is = []
for v_i in v_is:
abs_v_is.append(abs(v_i))
standard_deviation = 1.253*(sum(abs_v_is)/(n*np.sqrt(n-1)))
print("Peters 公式下测量列单次测量的标准差为:
\n",standard_deviation)
# 3、极差法
w_n = max(datas) - min(datas)
d_n = 2.85
standard_deviation = w_n / d_n
print("极差法下测量列单次测量的标准差为:\n",standard_deviation)
# 最大误差法
k_n = 0.61
standard_deviation = max(abs_v_is)*k_n
print("最大误差法下测量列单次测量的标准差为:
\n",standard_deviation)
# 判别粗大误差
# 3 西格玛准则
ross_erros = []
for abs_v_i in abs_v_is:
if abs_v_i > 3 * standard_deviation1:
gross_erros.append(abs_v_i)
if gross_erros:
print("该测量列中的粗大误差有:\n",gross_erros)
else:
print("\t 该测量列不存在粗大误差\n")
# 算术平均值的标准差
ave_standard_deviation = standard_deviation1 / np.sqrt(n)
print("算术平均值的标准差为:\n",ave_standard_deviation)
# 求算数平均值的极限误差
t = 3
ave_limt_error = - (t * ave_standard_deviation)
print("算数平均值的下极限误差\n",ave_limt_error)
ave_limt_error = t * ave_standard_deviation
print("算数平均值的上极限误差\n",ave_limt_error)
# 最终测量结果
print("测量列的残余误差为:\n",v_is)
print("测量列的残余误差的平方为:\n",v_i_squareds)
4、结语
以上内容,我都做好了word版本和pdf版本,有需要的可以联系我。也可以直接百度网盘获取。
链接:https://pan.baidu.com/s/1k837F9nW-uS1IVFKgArUNw
提取码:Pyno