一、误差理论与数据处理实验报告
题目3、代码
import numpy as npfrom numpy import linalgimport matplotlib.pyplot as pltdata_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) / nprint("该测量列的算术平均值为:",aver_value)# 求残余误差v_is = []for data in datas:v_i = data - aver_valuev_is.append(v_i)print("该测量列的残余误差列为:\n",v_is)# 校核算术平均值及残余误差# 方法 1if 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")# 方法 2A = 0.000001if (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_isplt.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.85standard_deviation = w_n / d_nprint("极差法下测量列单次测量的标准差为:\n",standard_deviation)# 最大误差法k_n = 0.61standard_deviation = max(abs_v_is)*k_nprint("最大误差法下测量列单次测量的标准差为:\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 = 3ave_limt_error = - (t * ave_standard_deviation)print("算数平均值的下极限误差\n",ave_limt_error)ave_limt_error = t * ave_standard_deviationprint("算数平均值的上极限误差\n",ave_limt_error)# 最终测量结果print("测量列的残余误差为:\n",v_is)print("测量列的残余误差的平方为:\n",v_i_squareds)
4、结语
以上内容,我都做好了word版本和pdf版本,有需要的可以联系我。也可以直接百度网盘获取。
链接:/s/1k837F9nW-uS1IVFKgArUNw
提取码:Pyno