- 积分
- 933
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2019-8-14
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2020-7-7 20:21:14
|
显示全部楼层
本帖最后由 卫宫切嗣菲尔 于 2020-7-7 20:25 编辑
clc,clear all,dbstop if error
% a=[0 0 0 0 0 1 2 0 0 0 0 20 0 0 0 0 0 3 2 5 4 0 0 0 5]';
% b=[1 2 45 21 1 50 2 3 4 43 5 0 0 2 3 6 45 5 6 8 7 8 65 63 6]';
load P
load R
Rr=Rain;
Pp=PWV;
New=zeros(5,99);
aa=[New;Rr];
bb=[New;Pp];
[HANG,LIE]=size(aa);
%% 建立存储数据的0矩阵
C=zeros(60,99); %定义0矩阵,用来存储后面的结果
H=zeros(60,1);
B=zeros(60,1);
m=zeros(6,40); % 存放降雨前的PWV值
ind_1=zeros(60,LIE); % 存放无降雨(0)序号
ind_2=zeros(60,LIE); % 存放降雨序号
%% 循环
for jj=1:LIE
a=aa(:,jj); % 按列提取数据
b=bb(:,jj);
a_neq_0=a~=0;
k=diff([0;a_neq_0;0]);
ind11=find(k==-1); % 记录一段连续0中的第一个0的位置.假如第一段全为0,那么就记录第二段连续为0的第一个0的位置;
ind22=find(k==1); % 记录一段连续1中的第一个1的位置
if isempty(ind11)==1 % 判断空矩阵,首先,空矩阵意味着没有降雨;赋值三个0给空矩阵,为了下面好存储数据
ind11=[1,1,1]';
ind22=[1,1,1]';
else
ind11;
ind22;
end
[hang_11,lie_11]=size(ind11);
ind_1(1:hang_11,jj)=ind11;
ind_2(1:hang_11,jj)=ind22;
end
for i=1:99 % 第二个for循环
a=aa(:,i); % 按列提取数据
b=bb(:,i);
ind1=ind_1(:,i);
ind1a=ind_1(:,i);
ind1a(ind1a==0)=[];
nn=length(ind1a); % 数据长度
ind2=ind_2(:,i);
% ind2(ind2==0)=[];
% ind2=ind2(1:length(ind2),1);
for e=1:ind1
if ind1(1)==length(a)+1 && ind2(1)==6 % 降雨全为1,需要删除数据
p1=0; p2=0; p3=0; p4=0; p5=0;p6=0;
m1=[p1,p2,p3,p4,p5,p6]';
m(:,e)=m1;
m(:,all(m==0,1))=[];
[hang,lie]=size(m);
elseif ind1(1)-ind2(1)==0 && ind1(2)-ind2(2)==0 % 降雨全为0,没有下雨的情况
p1=0; p2=0; p3=0; p4=0; p5=0;p6=0;
m1=[p1,p2,p3,p4,p5,p6]';
m(:,e)=m1;
m(:,all(m==0,1))=[];
[hang,lie]=size(m);
elseif ind2(1)==9 && e+1<nn % 大于9时才能保证前面有连续3个小时没有降雨
p1=b(ind2(1)); p2=b(ind2(1)-1); p3=b(ind2(2)-2); p4=b(ind2(1)-3); p5=0;p6=0;
m1=[p1,p2,p3,p4,p5,p6]';
m(:,e)=m1;
m(:,all(m==0,1))=[];
[hang,lie]=size(m);
elseif ind2(1)>9 && e+1<nn && ind2(e+1)-ind2(e)<=4 % 中间3小时内无雨,忽略不计
p1=b(ind2(e)); p2=b(ind2(e)-1); p3=b(ind2(e)-2); p4=b(ind2(e)-3); p5=b(ind2(e)-4);p6=b(ind2(e)-5);
m1=[p1,p2,p3,p4,p5,p6]';
m(:,e)=m1;
m(:,all(m==0,1))=[];
[hang,lie]=size(m);
elseif ind2(1)<9 && ind2(2)>9 && e+1<nn && ind2(e+1)-ind2(e)<=4 % 中间3小时内无雨,忽略不计
p1=b(ind2(e)); p2=b(ind2(e)-1); p3=b(ind2(e)-2); p4=b(ind2(e)-3); p5=b(ind2(e)-4);p6=b(ind2(e)-5);
m1=[p1,p2,p3,p4,p5,p6]';
m(:,e)=m1;
m(:,all(m==0,1))=[];
[hang,lie]=size(m);
else
p1=0; p2=0; p3=0; p4=0; p5=0;p6=0;
m1=[p1,p2,p3,p4,p5,p6]';
m(:,e)=m1;
m(:,all(m==0,1))=[];
[hang,lie]=size(m);
end
for kk=1:lie
p1=m(1,kk);p2=m(2,kk);p3=m(3,kk);p4=m(4,kk);p5=m(5,kk);p6=m(6,kk);
[z,t,bhl,max_p,min_p]=chang(p1,p2,p3,p4,p5,p6);
B(kk,1)=bhl; % 这里将结果存放到B中
end
end
H(:,jj)=B; % % 然后这里,再将B存放到H中,,,我觉得每次把得出的结果这样存到矩阵中没有错啊 好难受,搞不明白
F=unique(H); %
% F(F==0)=[];
end
这个是主程序跑的代码,方便各位大佬支出错误所在,谢谢了 |
|