%自己编程剔除数据异常值
clear off
clc
X=[1 3 5 7 4 6 3 8 4 7 12 3 5 7 17 4 6 7 8 5 3]
ls=length(X)
K=3
figure(1)
plot(X)
for i=1:3
A1(i)=abs(X(i)-(X(i+3)+X(i+2)+X(i+1))/3)
Y1=[abs(X(i+3)-X(i+2))abs(X(i+3)-X(i+1))abs(X(i+1)-X(i+2))]
Y(i)=max(Y1')
if(A1(i)/Y(i)>K)
X(i)=(X(i+1)+X(i+2)+X(i+3))/3
else
end
end
for i=ls-2:ls
A2(i)=abs(X(i)-(X(i-1)+X(i-2)+X(i-3))/3)
Z1=[abs(X(i-3)-X(i-2))abs(X(i-3)-X(i-1))abs(X(i-1)-X(i-2))]
Z(i)=max(Z1')
if(A2(i)/Z(i)>K)
X(i)=(X(i-3)+X(i-2)+X(i-1))/3
else
end
end
for i=4:ls-3
A1(i)=abs(X(i)-(X(i-3)+X(i-2)+X(i-1))/3)
A2(i)=abs(X(i)-(X(i+1)+X(i+2)+X(i+3))/3)
Y1=[abs(X(i-3)-X(i-2))abs(X(i-2)-X(i-1))abs(X(i-3)-X(i-2))]
Y(i)=max(Y1')
Z1=[abs(X(i+3)-X(i+2))abs(X(i+3)-X(i+1))abs(X(i+1)-X(i+2))]
Z(i)=max(Z1')
if(A1(i)/Y(i)>K&A2(i)/Z(i)>K)
X(i)=(X(i-3)+X(i-2)+X(i-1)+X(i+1)+X(i+2)+X(i+3))/6
else
end
end
figure(2)
plot(X)
再来一个简单的
clc
clear all
load X
K=1N=length(X)
x=X
figure(1)
plot(x)
for i=4:N-3
if (x(i)-x(i-1)>K&x(i)-x(i-2)>K&x(i)-x(i-3)>K)
x(i)=(x(i-3)+x(i-2)+x(i-1)+x(i+1)+x(i+2)+x(i+3))/6
end
end
figure(2)
plot(x)
这个语句可能是你上传的有问题吧。因为i=1;5(分号)没什么意义。
分号就像c里面一样分割了语句。
就是相当于赋值i=1然后输入一个值5,当然会有ans=5出现。
你可以每一步自己运行一下,不加分号可以产生一些结果。
while里面的就是最简单的c循环,也没有什么特别的作用。
有点意义的话可能是,
如
x=1:5(冒号)
x= 1 2 3 4 5
x=1:2:5
x=1 3 5
x=1:3:5
x= 1 4
% t4.m参考程序(考虑了多人最高、最低等情况):% 请看懂!!!能编最好!
function t4()
clc
%---------start 初始化---------------
row=input('输入学生人数:')
col=input('输入课程数目:')
score=fix(rand(row,col)*49)+49
xh0=1:row
kch0=1:col
for ii=1:row
zcj_pre(ii)=sum_(score(ii,:))
end
disp('原始成绩表:')
disp([xh0' score zcj_pre'])
%---------end 初始化--------------------
% 调用tongji1
[c_max,index_max,c_min,index_min,c_ave]=tongji1(score)
disp('平均分统计:')
fprintf(' 课程 平均\n')
% 按以上格式输出
disp([kch0',round(c_ave)'])
disp('课程最高分统计:')
fprintf(' 课程 最高 学号\n')
for jj=1:col
fprintf('%d %d',kch0(jj),c_max(jj))
for kk=1:length(index_max{jj})
fprintf('%d ',index_max{jj}(kk))
end
fprintf('\n')
end
disp('课程最低分统计:')
fprintf(' 课程 最低 学号\n')
% 按以上格式输出
for jj=1:col
fprintf('%d %d',kch0(jj),c_min(jj))
for kk=1:length(index_min{jj})
fprintf('%d ',index_min{jj}(kk))
end
fprintf('\n')
end
% 调用tongji23
[s_max,index_max,s_min,index_min,px]=tongji23(score)
disp('学生总成绩最高分统计:')
fprintf('最高总分 学号\n')
% 按以上格式输出
fprintf('%d ',s_max)
disp(index_max)
disp('学生总成绩最低分统计:')
fprintf('最低总分 学号\n')
% 按以上格式输出
fprintf('%d ',s_min)
disp(index_min)
disp('--------------------------------')
fprintf('总成绩排降序:\n')
fprintf('总成绩 学号\n')
% 按以上格式输出
disp(px)
% 存入zcj
zcj=px(:,1)%zcj在主函数空间
% 存入xh
xh=px(:,2)%xh也在主函数空间
function [c_max,index_max,c_min,index_min,c_ave]=tongji1(score)
% c_max课程最高分col*1向量
% index_max课程最高分对应学号col*1元胞
% c_min课程最低分col*1向量
% index_min课程最低分对应学号col*1元胞
% c_ave课程平均成绩col*1向量
[row,col]=size(score)
for jj=1:col
[c_max(jj),index_max{jj}]=max_(score(:,jj))
[c_min(jj),index_min{jj}]=min_(score(:,jj))
c_ave(jj)=ave_(score(:,jj))
end
function [s_max,index_max,s_min,index_min,px]=tongji23(score)
% s_max col门课程总成绩最高分
% index_max col门课程总成绩最高分对应学号
% s_min col门课程总成绩最低分
% index_min col门课程总成绩最低分对应学号
% px 排降序后的矩阵row*2 [col门课程总成绩学号]
[row,col]=size(score)
for ii=1:row
zcj(ii)=sum_(score(ii,:))
end
[s_max,index_max]=max_(zcj)
[s_min,index_min]=min_(zcj)
px=sort_down(zcj)
function y=sum_(x)%自编求和函数,x为向量
y=0
for ii=1:length(x)
y=y+x(ii)
end
function y=ave_(x)%自编求平均值函数,x为向量
y=sum_(x)/length(x)
function [x_max,index]=max_(x)%自定义函数
% x_max:向量x中的最大值
% index:向量x中的最大值对应的下标向量(有可能多个)
index=[]
x_max=x(1)
for ii=1:length(x)
if x(ii)>=x_max
x_max=x(ii)
end
end
for ii=1:length(x)
if x(ii)==x_max
index=[index,ii]
end
end
function [x_min,index]=min_(x)%自定义函数
% x_min:向量x中的最小值
% index:向量x中的最小值对应的下标向量(有可能多个)
index=[]
x_min=x(1)
for ii=1:length(x)
if x(ii)<=x_min
x_min=x(ii)
end
end
for ii=1:length(x)
if x(ii)==x_min
index=[index,ii]
end
end
function px=sort_down(x)
% px=[y_down index]
% y_down:x排降序
% index:x排序后的行标序列
[row,col]=size(x)
if row==1&&col~=1%保证x为列向量
x=x'
end
row=length(x)
index=1:row
px=[x,index']%构成排序前px
%采用选择排序2:
for ii=1:row-1
kk=ii
for jj=ii+1:row
if px(jj,1)>px(kk,1)
kk=jj
end
end
if kk~=ii
temp=px(kk,:)
px(kk,:)=px(ii,:)
px(ii,:)=temp
end
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)