失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > matlab自动识别粗大误差 剔除粗大误差

matlab自动识别粗大误差 剔除粗大误差

时间:2020-02-06 01:17:32

相关推荐

matlab自动识别粗大误差 剔除粗大误差

一、拉依达法

当试验次数较多时,可简单地用3倍标准偏差(3S)作为确定可疑数据取舍的标准。当某一测量数据(xi)与其测量结果的算术平均值(x-‘)之差大于3倍标准偏差时,用公式表示为:

?xi -x-‘?>3S

则该测量数据应舍弃。

这是美国混凝土标准中所采用的方法,由于该方法是以3倍标准偏差作为判别标准,所以亦称3倍标准偏差法,简称3S法。

取3S的理由是:根据随机变量的正态分布规律,在多次试验中,测量值落在 x-‘一3S与x-‘ 十3S之间的概率为99.73%,出现在此范围之外的概率仅为0.27%,也就是在近400次试验中才能遇到一次,这种事件为小概率事件,出现的可能性很小,几乎是不可能。因而在实际试验中,一旦出现,就认为该测量数据是不可靠的,应将其舍弃。

另外,当测量值与平均值之差大于2倍标准偏差(即 ?xi -x-‘?> 2S)时,则该测量值应保留,但需存疑。如发现生产(施工)、试验过程屯有可疑的变异时,该测量值则应予舍弃。

拉依达法简单方便,不需查表,但要求较宽,当试验检测次数较多或要求不高时可以应用,当试验检测次数较少时(如n<10)在一组测量值中即使混有异常值,也无法舍弃。

二、肖维纳特法

进行n次试验,其测量值服从正态分布,以概率1/(2n)设定一判别范围(一knS,knS),当偏差(测量值xi与其算术平均值x-‘之差)超出该范围时,就意味着该测量值xi是可疑的,应予舍弃。判别范围由下式确定:

肖维纳特法可疑数据舍弃的标准为:

?xi一 x-‘?/S≥kn

三、格拉布斯法

格拉布斯法假定测量结果服从正态分布,根据顺序统计量来确定可疑数据的取舍。

进行n次重复试验,试验结果为x1、x2、…、xi、…、xn ,而且xi服从正态分布。

为了检验 (i=1,2,…,n)中是否有可疑值,可将 按其值由小到大顺序重新排列,根据顺序统计原则,给出标准化顺序统计量g:

当最小值x(1)可疑时,则: g=( x-‘一x(1) )/S

当最大值x(n)可疑时,则: g=( x(n) 一 x-‘ )/S

根据格拉布斯统计量的分布,在指定的显著性水平β(一般β=0.05)下,求得判别可疑值的临界值g0( β,n) ,格拉布斯法的判别标准为:

g≥g0( β,n)

利用格拉布斯法每次只能舍弃一个可疑值,若有两个以上的可疑数据,应该一个一个数据的舍弃,舍弃第一个数据后,试验次数由n变为n一1,以此为基础再判别第二个可疑数据。

-5-14 04:33 #2

yutx121

工程师

if mod(rownum2,2)

F1=lcol(round((rownum2+1)/2));

F0=ucol(round((rownum2+1)/2));

else

F1=(lcol(round(rownum2/2+1))+lcol(round(rownum2/2)))/2;

F0=(ucol(round(rownum2/2+1))+ucol(round(rownum2/2)))/2;

end

end

dF=F0-F1; % 四分位数离散度

beta=2; % 精度常数

ruo1=F1-beta/2*dF;

ruo2=F0+beta/2*dF;

outerindex=find(Dataruo2);

outercoor=Data(outerindex);

outers{k,1}=outerindex;

outers{k,2}=outercoor;

end

%-------------------------------------------------------------------------------

functionouters = laYiDa(originData)

% laYiDa,m

%采用拉依达法剔除粗大误差点

%输出参数为cell矩阵

%.5

[m,n]=size(originData);

outers=cell(n,2);

for k=1:n

colData=originData(:,k);

outercoor=findouter(colData);% 找出列的outer

outerindex=[];

outercoor2=[];

for num=1:length(outercoor)

tempcoor=outercoor(num);

tempindex=find(abs(colData-tempcoor)<0.1);

tempcoor=tempcoor*ones(length(tempindex),1); % 避免出现相同值的情况露选

outerindex=[outerindex;tempindex];

outercoor2 =[outercoor2;tempcoor];

end

outers{k,1}=outerindex;

outers{k,2}=outercoor2;

end

%-------------------------------------------------------------------------------

function coor=findouter(colset)

%采用递归的方法剔除outer

colStd = std(colset);

colMean = mean(colset);

colSub = abs(colset-colMean);

index=find(colSub>(2.8*colStd));

coor=colset(index);

if(isempty(index))

return;

else

colset(index)=[];

tempcoor=findouter(colset);

coor=[coor;tempcoor];

end

上面的代码因为当时是同时对多列进行处理的,你不需要如此,也就应该少一层循环的;

并且上面是直接剔除粗大误差点,与你要采用插值代替不一样的,你自己得适当注意

整个程序应该不会太复杂的

如果觉得《matlab自动识别粗大误差 剔除粗大误差》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。