当前位置:文档之家› 程序matlab

程序matlab

function outers = fenBuTu(originData)% 采用分布图法剔除粗大误差点
% 输出参数为cell矩阵
% 2004.5
[m,n]=size(originData);
outers=cell(n,2);
for k=1:n % 对各列分别处理
Data=originData(:,k);
sortData=sort(Data);
rownum=size(sortData,1);% 算中位数
if mod(rownum,2) % 奇数个样本点
Xm=sortData((rownum+1)/2); % 算四分位数
lcol=sortData(1:round((rownum+1)/2));
ucol=sortData(round((rownum+1)/2):end);
rownum2=size(lcol,1);
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
else
Xm=(Data(round(rownum/2+1))+Data(round(rownum/2)))/2; % 算四分位数lcol=sortData(1:round((rownum+1)/2));
ucol=sortData(round((rownum+1)/2):end);
rownum2=size(lcol,1);
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(Data<ruo1|Data>ruo2);
outercoor=Data(outerindex);
outers{k,1}=outerindex;
outers{k,2}=outercoor
end
function outers = laYiDa(originData% laYiDa;
% 采用拉依达法剔除粗大误差点
% 输出参数为cell矩阵
% 2004.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)%采用递归的方法剔除
outercolStd = 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。

相关主题