MATLAB 格拉布斯准则代码
matlab处理离散数据时,会出现波动异常的点,而有些点不能靠滤波去噪处理掉,可以用格拉布斯准则进行处理。
某个测量值的残余误差的绝对值 |Vi |>Gg,则判断此值中有较大误差,应以剔除,此即格拉布斯准则。
利用格拉布斯(Grubbs)准则进行处理:
根据误差理论,要有效地剔除偶然误差,一般要测量10次以上,兼顾到精度和响应速度,取15次为一个单位。
在取得的15个数据中,有些可能含有较大的误差,需要对它们分检,剔除可疑值,提高自适应速度。
对可疑值的剔除有多种准则,如莱以达准则、肖维勒(Chauvenet)准则、格拉布斯(Grubbs)准则等。
以Grubbs准则为例,它认为若某测量值 xi对应的残差Vi满足下式 |Vi|=| xi-x|>=g(n,a)× σ(X) 时应将该数据舍去。
式中,为n次采集到的AD 值的平均值,=(∑xi)/n ;σ(X)为测量数据组的标准差,由贝塞尔函数可得: σ(X)=[(∑Vi2 )/(n-1)]1/2;g(n, a)是取决于测量次数n和显著性水平a (相当于犯“弃真” 错误的概率系数),a通常取0.01或0.05。
通过查表可得:当 n=15时,a=0.05, g(n,a)=2.41。
把15次采集到的AD值存入一个数组中然后求平均值,计算残差,求标准差σ(X)。
将残差绝对值与2.41倍的标准差σ(X)比较。剔除可疑值以后,再求平均值,求出新的平均值以后,应再重复以上过程,验证是否还有可疑值存在。
matlab代码实现格拉布斯准则:
flag_1=1; flag_2=0; %% 计算 while flag_1==1 n=length(x); avg=mean(x); st=std(x,1); reg=abs((x-avg)./st); reg_max=max(reg); %% 确定g值 T=[1.153 1.463 1.672 1.822 1.938 2.032 2.11 2.176 2.234 2.285 2.331 2.371 2.409 2.443 2.475 2.501 2.532 2.557 2.58 2.603 2.624 2.644 2.663 2.681 2.698 2.714 2.73 2.745;... 1.155 1.492 1.749 1.944 2.097 2.22 2.323 2.41 2.485 2.55 2.607 2.659 2.705 2.747 2.785 2.821 2.954 2.884 2.912 2.939 2.963 2.987 3.009 3.029 3.049 3.068 3.085 3.103]; switch alpha case 0.05 g=0.5; g=T(1,n); case 0.01 g=T(2,n); otherwise disp('输入了错误的alpha值'); end % 比较确定异常值 if reg_max>g flag_2=1; abn=x(reg>g); disp('被剔除的数据为') disp(abn); x=x(reg<=g); else flag_1=0; end; if flag_2==0 disp('没有异常数据'); end;
总结
以上是生活随笔为你收集整理的MATLAB 格拉布斯准则代码的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: FLUENT算例 —— Turbulen
- 下一篇: 品质体系及标准大集合(偏向软件)