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
- 下一篇: 品质体系及标准大集合(偏向软件)