电子测量技术-测量数据误差处理大作业
测量数据误差处理
一、题目要求
设计测量数据误差处理的通用程序,提供测试数据输入、粗大误差判别准则等的人机交互界面。
二、设计思路
在对测量数据进行处理的过程中我们通常经过以下四步:首先求出这组数据的均值及标准差估计值,再检查有无异常数据,异常数据处理之后判断有无随时间变化的变值系差,最后给出置信区间。要进行程序设计,我们就要对这四部分的原理进行分析。
1. 求平均值及标准偏差估计值
\[\bar V = 1/N \sum_{i=1}^{N}{V_i} \]\[\hat{\sigma}(V)=\sqrt\frac{\sum_{i=1}^{N}{u_i}-N\bar U^2}{N-1} \]2. 检查有无异常数据
? 剔除异常数据是一件需慎重对待的事。若有多个可疑数据同时超过检验所定置信区间,应逐个剔除,先剔出残差绝对值最大的,然后重新计算标准偏差估计值,再行判别。若有多个相同数据超出范围时,也应逐个剔除。当偏离正态分布、测量次数少时,检验可靠性将受影响。在一组测量数据中,可疑数据应极少;反之,说明系统工作不正常。
常用准则:
莱特准则:正态分布,n>10的情况
肖维纳准则: 正态分布,n>5的情况
\[|x_i-\bar x|>ch\hat{\sigma}(X) \]格拉布斯准则:正态样本或接近正态样本,g值根据重复测量次数n及置信概率确定,n>2的情况
\[|x_i-\bar x|>g\hat{\sigma}(X) \]3. 判断有无随时间变化的变值系统误差
系统误差分为恒值系差和变值系差。
常用校准的方法来检查恒值系统误差是否存在;依据仪器说明书、校准报告上的修正值,对测量结果进行修正。测量前分析测量方案或方法中可能造成系统误差的因素,并尽力消除这些因素。用修正值对结果进行修正,估算出未能消除而残留下来的系统误差对最终测量结果的影响,即测量结果的不确定度 。
变值误差一般有以下两种判据方法:
① 马利可夫判据:用于累进性系差的判别。
\[M=\sum_{i=1}^{(n-1)/2}{v_i}-\sum_{i=(n+3)/2+1}^{n}{v_i},N为奇数 \]\[M=\sum_{i=1}^{n/2}{v_i}-\sum_{i=n/2+1}^{n}{v_i},N为偶数 t_a \]\[当|M|>=max|v_i|,存在累进性系差 \]② 阿卑-赫梅特判据常用于判别周期性系差,也可用来发现累进性系差。
\[若|\sum_{i=1}^{n-1}{v_i}{v_{i+1}}|>\sqrt{n-1}\hat{\sigma}^2(X) \]则认为测量中存在变值系差。
4. 给出置信区间
先求出平均值的标准偏差,根据n值,查t分布表,在给定置信概率下,查出ta的值,然后求出置信区间。
\[平均值的标准偏差:\hat{\sigma}(\bar v)=\frac{\hat{\sigma}(\bar v)}{\sqrt n} \]\[置信区间:[\bar U-t_a\hat{\sigma}(U), \bar U+t_a\hat{\sigma}(U)] \]三、程序设计
1. 人机界面
人机界面使用QTdesigner设计,在使用时需要数据输入窗口、粗大误差判别准则的选择、确定按键、清除按键、结果显示窗口以及流程显示窗口,如下图所示:
2. 流程图
3. 功能函数(具体代码见main.py)
;所有功能函数均封装在MyWindow类中。
self.aver = np.mean(self.data_arrary) # 求均值
self.var = np.var(self.data_arrary) # 求方差
# 均值和方差的计算直接使用numpy的库函数
def get_sigema(self): # 计算标准差估计
def get_cancha(self): # 计算残差
def Wright_rule(self): # 莱特准则处理数据
def Chauvenet_rule(self): # 肖维纳准则处理数据
def Grubbs_rule(self): # 格拉布斯准则处理数据
def cal_zone(self): # 计算置信区间
def malikefu_rule(self): # 玛利科夫判据
def abei_hemeite_rule(self): # 阿卑-赫梅特判据
四、实验结果
测试数据:2.72,2.75,2.65,2.71,2.62,2.45,2.62,2.70,2.67,2.73,2.74
五、源代码
main.py
import mywin
import numpy as np
import sys
import time
from PyQt5 import QtWidgets
class MyWindow(mywin.Ui_MainWindow):
# 数据
data_arrary = [] # 存放数据数组
data_num = 0 # 数组长度
data_flag = 0 # 判断数组是否输入
data_p_flag = 0 # 判断概率是否输入
data_p = 0 # 置信概率
aver = 0 # 期望
var = 0 # 方差
sigema = 0 # 标准差估计
cancha = [] # 残差
str_rule = '' # 粗大误差处理准则
cal_flag = 1
def __init__(self,ui):
super().setupUi(ui) #调用父类的setupUI函数
self.num_ok.clicked.connect(self.get_num) # 输入栏后面的 √ 按钮点击后获取输入数据
self.clear.clicked.connect(self.cclear) # 清除按钮
self.comboBox.activated.connect(self.choose_rule) # 选择粗大误差处理准则
self.p_ok.clicked.connect(self.get_p)
self.start_run.clicked.connect(self.start)
return
def get_p(self):
if ( self.data_flag == 0 ):
self.output.append("请先输入数据!")
return
self.data_p = self.input_p.toPlainText()
if ( self.data_p == ''):
self.output.append("请输入概率!")
return
self.data_p = float(self.data_p)
if ( self.data_p > 1 or self.data_p <= 0): # 概率在(0,1)之间
self.data_p = 0
self.output.append("概率输入错误!")
return
self.data_p_flag = 1
return
def get_sigema(self): # 计算标准差估计
sigema2 = 0
for i in range(self.data_num):
sigema2 = sigema2 + self.data_arrary[i]*self.data_arrary[i]
sigema2 = (sigema2-self.data_num*self.aver*self.aver)/(self.data_num-1)
sigema = np.sqrt(sigema2)
return sigema
def get_num(self):
str = self.input.toPlainText() # 从输入栏获取输入的信息
if(str == ''):
self.output.append("请输入数据!")
return
count = 0
# 判断输入数据中的非法字符
for s in str:
if ( ord(s) >= 48 and ord(s) <= 57 or ord(s) == 32 or ord(s) == 46): # 32是空格,46是小数点
count = count + 1
if ( count < len(str) ):
self.output.append("数据输入有误,请重试")
str = ''
count = 0
return
# 字符串分割
self.data_arrary = str.split(' ')
self.data_num = len(self.data_arrary)
# 按空格分割后转为数字
for index in range(self.data_num):
self.data_arrary[index] = eval(self.data_arrary[index])
if ( self.data_num <=2 ):
self.output.append("数据过少,请重试")
self.data_num = 0
self.data_arrary = []
return
self.data_flag = 1 # 表示数据已经输入
# print(self.data_arrary)
self.aver = np.mean(self.data_arrary) # 求均值
self.var = np.var(self.data_arrary) # 求方差
self.sigema = self.get_sigema() # 求标准差估计
self.cancha = self.get_cancha() # 残差
# print(self.aver,self.var)
self.output.append("均值为{:6f}".format(self.aver))
self.output.append("方差为{:6f}".format(self.var))
self.output.append("标准差估计为{:6f}".format(self.sigema))
return
def get_cancha(self): # 计算残差
self.cancha = []
for i in range(self.data_num):
self.cancha.append(self.data_arrary[i]-self.aver)
def cclear(self):
self.input.clear()
self.data_arrary = [] # 存放数据数组
self.data_num = 0 # 数组长度
self.data_flag = 0 # 表示数据未输入
self.var = 0 # 方差
self.aver = 0 # 均值
self.sigema = 0 # 标准差估计
self.str_rule = '' # 粗大误差准则
self.data_p = 0 # 置信概率
self.data_p_flag = 0 # 概率未输入
self.cancha = [] # 残差
self.cal_flag = 1
self.output.clear()
self.result.clear()
self.input_p.clear()
def choose_rule(self):
if ( self.data_flag == 0 ):
self.output.append("请先输入数据!")
return
# 先输入数据,再选准则(与数据量有关)
self.str_rule = self.comboBox.currentText() # 获取选项
if ( self.str_rule == "莱特准则"): # 莱特准则要在n>10时使用
if self.data_num < 10:
self.output.append("有{}个数据,不可用{},请重新选择".format(self.data_num,self.str_rule))
self.str_rule = ''
return
if ( self.str_rule == "肖维纳准则"): # 肖维纳准则要在n>5时使用
if self.data_num < 5:
self.output.append("有{}个数据,不可用{},请重新选择".format(self.data_num,self.str_rule))
self.str_rule = ''
return
if ( self.str_rule == "格拉布斯准则"): # 格拉布斯准则要在n>2时使用
if self.data_num < 2:
self.output.append("有{}个数据,不可用{},请重新选择".format(self.data_num,self.str_rule))
self.str_rule = ''
return
self.output.append("已选择{}".format(self.str_rule))
# print(self.str_rule)
def start(self):
if ( self.data_flag == 0 ):
self.output.append("请先输入数据")
return
if ( self.data_p_flag == 0 ):
self.output.append("请输入置信概率")
return
if ( self.str_rule == ""):
self.output.append("请先选择粗大误差处理准则")
return
# 粗大误差处理
if ( self.str_rule == "莱特准则"): # 莱特准则要在n>10时使用
self.Wright_rule()
if ( self.str_rule == "肖维纳准则"): # 肖维纳准则要在n>5时使用
self.Chauvenet_rule()
if ( self.str_rule == "格拉布斯准则"): # 格拉布斯准则要在n>2时使用
self.Grubbs_rule()
# 判断变值系统误差
self.malikefu_rule() # 玛利科夫判据
self.abei_hemeite_rule() # 阿卑-赫梅特判据
if ( self.cal_flag == 1 ):
# 根据t分布表计算置信区间
self.cal_zone()
else:
self.cclear()
def cal_zone(self):
sigema_bar = self.sigema/np.sqrt(self.data_num) # 平均值的标准偏差
dict_t = { 3 : {0.9 : 1.638, 0.95 : 2.353, 0.975 : 3.182, 0.99 : 4.541, 0.995 : 5.841 },
4 : {0.9 : 1.533, 0.95 : 2.132, 0.975 : 2.766, 0.99 : 3.747, 0.995 : 4.604 },
5 : {0.9 : 1.476, 0.95 : 2.015, 0.975 : 2.571, 0.99 : 3.365, 0.995 : 4.032 },
6 : {0.9 : 1.44 , 0.95 : 1.943, 0.975 : 2.447, 0.99 : 3.143, 0.995 : 3.707 },
7 : {0.9 : 1.415, 0.95 : 1.895, 0.975 : 2.365, 0.99 : 2.998, 0.995 : 3.499 },
8 : {0.9 : 1.397, 0.95 : 1.860, 0.975 : 2.306, 0.99 : 2.896, 0.995 : 3.355 },
9 : {0.9 : 1.383, 0.95 : 1.833, 0.975 : 2.262, 0.99 : 2.821, 0.995 : 3.250 },
10 : {0.9 : 1.372, 0.95 : 1.812, 0.975 : 2.228, 0.99 : 2.764, 0.995 : 3.169 },
11 : {0.9 : 1.363, 0.95 : 1.796, 0.975 : 2.201, 0.99 : 2.718, 0.995 : 3.106 },
12 : {0.9 : 1.356, 0.95 : 1.782, 0.975 : 2.179, 0.99 : 2.681, 0.995 : 3.055 },
13 : {0.9 : 1.350, 0.95 : 1.771, 0.975 : 2.160, 0.99 : 2.650, 0.995 : 3.012 },} # t分布表(部分)
ta = dict_t[self.data_num][self.data_p]
self.output.append("根据t分布表,ta的取值为{}".format(ta))
min = self.aver - ta * sigema_bar
max = self.aver + ta * sigema_bar # 计算置信区间
self.result.append('({:.2f},{:.2f})'.format(min,max)) # 显示结果
def malikefu_rule(self): # 玛利科夫判据
M = 0
self.get_cancha()
if (self.data_num % 2 == 0): # N为偶数时
# print(type(self.data_num))
for i in range(int(self.data_num/2)):
M = M + self.cancha[i] - self.cancha[i+int((self.data_num)/2)]
else:
for i in range(int((self.data_num-1)/2)):
M = M + self.cancha[i] - self.cancha[i+int((self.data_num+1)/2)]
max = 0
for i in range(self.data_num):
if (max < abs(self.cancha[i]) ):
max = abs(self.cancha[i])
if (abs(M) >= max):
self.output.append("根据玛利科夫判据,发现累进性系差")
pass # 修正累进系差,这里没修正,pass了
else:
self.output.append("根据玛利科夫判据,未发现累进性系差")
def abei_hemeite_rule(self): # 阿卑-赫梅特判据
summ = 0
self.get_cancha()
for i in range(self.data_num-1):
summ += self.cancha[i]*self.cancha[i+1]
if (abs(summ) > self.sigema*self.sigema*np.sqrt(self.data_num-1)):
self.output.append("根据阿卑-赫梅判据,发现周期性系差")
pass # 修正周期性系差,这里没修正,pass了
else:
self.output.append("根据阿卑-赫梅判据,未发现周期性系差")
def Wright_rule(self): # 莱特准则处理数据
for i in range(self.data_num):
if (abs(self.data_arrary[i]-self.aver) > 3*self.sigema):
# 剔除坏值
self.data_num -= 1
if(self.data_num < 2 ): # 数据剔除完说明...实验测量失败了
self.output.append("实验测量有问题...数据3s后清除")
time.sleep(3)
self.cal_flag = 0
return
self.output.append("根据{},{}可能为坏值,已剔除,剩余{}个数据".format(self.str_rule, self.data_arrary[i],self.data_num))
del self.data_arrary[i]
# 剔除坏值后运算要重修进行
self.aver = np.mean(self.data_arrary) # 求均值
self.var = np.var(self.data_arrary) # 求方差
self.sigema = self.get_sigema() # 求标准差估计
# 数据更新后从头开始算,即将执行的这一层出来之后直接break循环,退出程序
self.output.append("重新开始计算")
self.output.append("均值为{:6f}".format(self.aver))
self.output.append("方差为{:6f}".format(self.var))
self.output.append("标准差估计为{:6f}".format(self.sigema))
if(self.data_num > 10):
self.Wright_rule()
else: # 剔除至数量少于10时用肖维纳
self.str_rule = "肖维纳准则"
self.output.append("剩余数值较少,切换为{}".format(self.str_rule))
self.Chauvenet_rule()
break
return
def Chauvenet_rule(self): # 肖维纳准则处理数据
dict_Chauvenet = { 5 : 1.68,
6 : 1.73,
7 : 1.79,
8 : 1.86,
9 : 1.92,
10 : 1.96,
11 : 2.00,
12 : 2.03,
13 : 2.07,
14 : 2.10,
15 : 2.13,
16 : 2.16,
17 : 2.18,
18 : 2.20,
19 : 2.22,
20 : 2.24,
30 : 2.39,
35 : 2.45,
40 : 2.50,
50 : 2.58,
100 : 2.81} # 肖维纳准则表
ch = dict_Chauvenet[self.data_num]
self.output.append("ch的值为{}".format(ch))
for i in range(self.data_num):
if(abs(self.data_arrary[i]-self.aver) > ch*self.sigema):
# 剔除坏值
self.data_num -= 1
if(self.data_num < 2 ): # 数据剔除完说明...实验测量失败了
self.output.append("实验测量有问题...数据3s后清除")
time.sleep(3)
self.cal_flag = 0
return
self.output.append("根据{},{}可能为坏值,已剔除,剩余{}个数据".format(self.str_rule, self.data_arrary[i],self.data_num))
del self.data_arrary[i]
# 剔除坏值后运算要重修进行
self.aver = np.mean(self.data_arrary) # 求均值
self.var = np.var(self.data_arrary) # 求方差
self.sigema = self.get_sigema() # 求标准差估计
self.cancha = self.get_cancha() # 残差
# 数据更新后从头开始算,即将执行的这一层出来之后直接break循环,退出程序
self.output.append("重新开始计算")
self.output.append("均值为{:6f}".format(self.aver))
self.output.append("方差为{:6f}".format(self.var))
self.output.append("标准差估计为{:6f}".format(self.sigema))
if(self.data_num > 5):
self.Chauvenet_rule()
else: # 剔除至数量少于10时用肖维纳
self.str_rule = "格拉布斯准则"
self.output.append("剩余数值较少,切换为{}".format(self.str_rule))
self.Grubbs_rule()
break
return
def Grubbs_rule(self): # 格拉布斯准则处理数据
dict_Grubbs = { 3 : {0.9 : 1.148, 0.95 : 1.153, 0.975 : 1.155, 0.99 : 1.155, 0.995 : 1.155 },
4 : {0.9 : 1.425, 0.95 : 1.463, 0.975 : 1.481, 0.99 : 1.492, 0.995 : 1.496 },
5 : {0.9 : 1.602, 0.95 : 1.672, 0.975 : 1.715, 0.99 : 1.749, 0.995 : 1.764 },
6 : {0.9 : 1.729, 0.95 : 1.822, 0.975 : 1.887, 0.99 : 1.944, 0.995 : 1.973 },
7 : {0.9 : 1.828, 0.95 : 1.938, 0.975 : 2.020, 0.99 : 2.097, 0.995 : 2.139 },
8 : {0.9 : 1.909, 0.95 : 2.032, 0.975 : 2.126, 0.99 : 2.221, 0.995 : 2.274 },
9 : {0.9 : 1.977, 0.95 : 2.110, 0.975 : 2.215, 0.99 : 2.323, 0.995 : 2.387 },
10 : {0.9 : 2.036, 0.95 : 2.176, 0.975 : 2.290, 0.99 : 2.410, 0.995 : 2.482 },
11 : {0.9 : 2.088, 0.95 : 2.234, 0.975 : 2.355, 0.99 : 2.485, 0.995 : 2.564 },
12 : {0.9 : 2.134, 0.95 : 2.285, 0.975 : 2.412, 0.99 : 2.550, 0.995 : 2.636 },
13 : {0.9 : 2.175, 0.95 : 2.331, 0.975 : 2.462, 0.99 : 2.670, 0.995 : 2.699 },
14 : {0.9 : 2.213, 0.95 : 2.371, 0.975 : 2.507, 0.99 : 2.659, 0.995 : 2.755 },
15 : {0.9 : 2.247, 0.95 : 2.409, 0.975 : 2.549, 0.99 : 2.705, 0.995 : 2.806 },}
g = dict_Grubbs[self.data_num][self.data_p]
self.output.append("g的值为{}".format(g))
for i in range(self.data_num):
if(abs(self.data_arrary[i]-self.aver) > g*self.sigema):
# 剔除坏值
self.data_num -= 1
if(self.data_num <= 2 ): # 数据剔除完说明...实验测量失败了
self.output.append("实验测量有问题...数据3s后清除")
time.sleep(3)
self.cal_flag = 0
return
self.output.append("根据{},{}可能为坏值,已剔除,剩余{}个数据".format(self.str_rule, self.data_arrary[i],self.data_num))
del self.data_arrary[i]
# 剔除坏值后运算要重修进行
self.aver = np.mean(self.data_arrary) # 求均值
self.var = np.var(self.data_arrary) # 求方差
self.sigema = self.get_sigema() # 求标准差估计
self.cancha = self.get_cancha() # 残差
# 数据更新后从头开始算,即将执行的这一层出来之后直接break循环,退出程序
self.output.append("重新开始计算")
self.output.append("均值为{:6f}".format(self.aver))
self.output.append("方差为{:6f}".format(self.var))
self.output.append("标准差估计为{:6f}".format(self.sigema))
self.Grubbs_rule()
break
return
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv) #监听当前app,来自QtWidgets.QApplication
MainWindow = QtWidgets.QMainWindow()
ui = MyWindow(MainWindow)
MainWindow.show()
sys.exit(app.exec_()) #退出app
my_ui.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'e:\学!\电子测量技术\大作业\测量数据误差处理\my_ui.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(816, 401)
MainWindow.setMinimumSize(QtCore.QSize(816, 401))
MainWindow.setMaximumSize(QtCore.QSize(816, 401))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.start_run = QtWidgets.QPushButton(self.centralwidget)
self.start_run.setGeometry(QtCore.QRect(50, 300, 161, 51))
self.start_run.setMaximumSize(QtCore.QSize(161, 16777215))
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(16)
self.start_run.setFont(font)
self.start_run.setObjectName("start_run")
self.clear = QtWidgets.QPushButton(self.centralwidget)
self.clear.setGeometry(QtCore.QRect(250, 300, 161, 51))
self.clear.setMaximumSize(QtCore.QSize(161, 16777215))
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(18)
self.clear.setFont(font)
self.clear.setObjectName("clear")
self.output = QtWidgets.QTextBrowser(self.centralwidget)
self.output.setGeometry(QtCore.QRect(510, 30, 271, 341))
self.output.setMaximumSize(QtCore.QSize(271, 16777215))
font = QtGui.QFont()
font.setFamily("黑体")
font.setPointSize(14)
self.output.setFont(font)
self.output.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.ForbiddenCursor))
self.output.setObjectName("output")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(70, 0, 381, 71))
self.label.setMaximumSize(QtCore.QSize(381, 16777215))
font = QtGui.QFont()
font.setFamily("隶书")
font.setPointSize(28)
self.label.setFont(font)
self.label.setObjectName("label")
self.input = QtWidgets.QTextEdit(self.centralwidget)
self.input.setGeometry(QtCore.QRect(40, 90, 401, 41))
self.input.setMaximumSize(QtCore.QSize(401, 16777215))
font = QtGui.QFont()
font.setFamily("黑体")
font.setPointSize(16)
self.input.setFont(font)
self.input.setObjectName("input")
self.num_ok = QtWidgets.QPushButton(self.centralwidget)
self.num_ok.setGeometry(QtCore.QRect(440, 90, 31, 41))
self.num_ok.setMaximumSize(QtCore.QSize(31, 16777215))
font = QtGui.QFont()
font.setFamily("Comic Sans MS")
font.setPointSize(12)
self.num_ok.setFont(font)
self.num_ok.setObjectName("num_ok")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(40, 70, 441, 16))
self.label_2.setMaximumSize(QtCore.QSize(441, 16777215))
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(12)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(50, 160, 161, 16))
self.label_3.setMaximumSize(QtCore.QSize(161, 16777215))
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(12)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(250, 140, 161, 41))
self.comboBox.setMaximumSize(QtCore.QSize(161, 16777215))
font = QtGui.QFont()
font.setFamily("黑体")
font.setPointSize(12)
self.comboBox.setFont(font)
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(50, 260, 161, 16))
self.label_4.setMaximumSize(QtCore.QSize(161, 16777215))
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(12)
self.label_4.setFont(font)
self.label_4.setObjectName("label_4")
self.result = QtWidgets.QTextBrowser(self.centralwidget)
self.result.setGeometry(QtCore.QRect(250, 250, 221, 41))
self.result.setMaximumSize(QtCore.QSize(221, 16777215))
font = QtGui.QFont()
font.setFamily("黑体")
font.setPointSize(14)
self.result.setFont(font)
self.result.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.ForbiddenCursor))
self.result.setObjectName("result")
self.line = QtWidgets.QFrame(self.centralwidget)
self.line.setGeometry(QtCore.QRect(480, 0, 20, 371))
self.line.setMaximumSize(QtCore.QSize(20, 16777215))
self.line.setFrameShape(QtWidgets.QFrame.VLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setObjectName("line")
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setGeometry(QtCore.QRect(50, 210, 161, 21))
self.label_5.setMaximumSize(QtCore.QSize(161, 16777215))
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(12)
self.label_5.setFont(font)
self.label_5.setObjectName("label_5")
self.p_ok = QtWidgets.QPushButton(self.centralwidget)
self.p_ok.setGeometry(QtCore.QRect(410, 200, 31, 41))
self.p_ok.setMaximumSize(QtCore.QSize(31, 16777215))
font = QtGui.QFont()
font.setFamily("Comic Sans MS")
font.setPointSize(12)
self.p_ok.setFont(font)
self.p_ok.setObjectName("p_ok")
self.input_p = QtWidgets.QTextEdit(self.centralwidget)
self.input_p.setGeometry(QtCore.QRect(250, 200, 161, 41))
self.input_p.setMaximumSize(QtCore.QSize(401, 16777215))
font = QtGui.QFont()
font.setFamily("黑体")
font.setPointSize(16)
self.input_p.setFont(font)
self.input_p.setObjectName("input_p")
self.label_6 = QtWidgets.QLabel(self.centralwidget)
self.label_6.setGeometry(QtCore.QRect(520, 10, 261, 16))
font = QtGui.QFont()
font.setFamily("Comic Sans MS")
font.setPointSize(11)
self.label_6.setFont(font)
self.label_6.setObjectName("label_6")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.start_run.setText(_translate("MainWindow", "确 定"))
self.clear.setText(_translate("MainWindow", "清 除"))
self.label.setText(_translate("MainWindow", "测量数据误差处理"))
self.input.setHtml(_translate("MainWindow", "\n"
"\n"
"
"))
self.num_ok.setText(_translate("MainWindow", "√"))
self.label_2.setText(_translate("MainWindow", "输入数据,用空格隔开,全部输入完成后点击√"))
self.label_3.setText(_translate("MainWindow", "去除粗大误差准则"))
self.comboBox.setItemText(0, _translate("MainWindow", "莱特准则"))
self.comboBox.setItemText(1, _translate("MainWindow", "肖维纳准则"))
self.comboBox.setItemText(2, _translate("MainWindow", "格拉布斯准则"))
self.label_4.setText(_translate("MainWindow", "置信区间(结果)"))
self.result.setHtml(_translate("MainWindow", "\n"
"\n"
"
"))
self.label_5.setText(_translate("MainWindow", "置信概率(小数)"))
self.p_ok.setText(_translate("MainWindow", "√"))
self.input_p.setHtml(_translate("MainWindow", "\n"
"\n"
"
"))
self.label_6.setText(_translate("MainWindow", " "))