Matlab小程序

Matlab小程序,第1张

刚好这里有一个现成的

%自己编程剔除数据异常值

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12054204.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存