爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 12887|回复: 6

[程序设计] 多个for循环,就出了租后哦一个结果,我感觉前面的结果好像被覆盖一样

[复制链接]

新浪微博达人勋

发表于 2020-7-6 21:23:09 | 显示全部楼层 |阅读模式
100金钱
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;
[hang_1,lie_1]=size(Pp);

New=zeros(5,99);
aa=[New;Rr];
bb=[New;Pp];
[HANG,LIE]=size(aa);
for jj=1:LIE

   a=aa(:,LIE);
   b=bb(:,LIE);

   a_neq_0=a~=0;
   k=diff([0;a_neq_0;0]);
   ind1=find(k==-1);             % 记录一段连续0中的第一个0的位置.假如第一段全为0,那么就记录第二段连续为0的第一个0的位置;
   ind2=find(k==1);              % 记录一段连续1中的第一个1的位置
   m=zeros(6,length(ind1));     
   ind1=[ind1;0];                  % 提示这里会随迭代次数而改变,我感觉是这里出问题了
   ind2=[ind2;0];
   length(ind1)
   C=zeros(30,99);
   H=zeros(30,1);  

for i=1:length(ind1)

    if all(a==1)==1                               % 降雨全为1,需要删除数据
       p1=0; p2=0; p3=0; p4=0; p5=0;p6=0;
       m1=[p1,p2,p3,p4,p5,p6]';
       m(:,i)=m1;
       m(:,all(m==0,1))=[];
       [hang,lie]=size(m);
    elseif all(a==0)==1                            % 降雨全为0,没有下雨的情况
       p1=0; p2=0; p3=0; p4=0; p5=0;p6=0;
       m1=[p1,p2,p3,p4,p5,p6]';
       m(:,i)=m1;
       m(:,all(m==0,1))=[];
       [hang,lie]=size(m);
    elseif ind1(i)-ind2(i)>0  &&  ind2(i+1)-ind1(i)>2  && ind2(1)>5
       p1=b(ind2(i)); p2=b(ind2(i)-1); p3=b(ind2(i)-2); p4=b(ind2(i)-3); p5=b(ind2(i)-4);p6=b(ind2(i)-5);
       m1=[p1,p2,p3,p4,p5,p6]';
       m(:,i)=m1;
       m(:,all(m==0,1))=[];
       [hang,lie]=size(m);
    elseif length(ind1)==2 && length(ind2)==2 && ind1(i)-ind2(i)>1  && ind2(1)>5
       p1=b(ind2(i)); p2=b(ind2(i)-1); p3=b(ind2(i)-2); p4=b(ind2(i)-3); p5=b(ind2(i)-4);p6=b(ind2(i)-5);
       m1=[p1,p2,p3,p4,p5,p6]';
       m(:,i)=m1;
       m(:,all(m==0,1))=[];
       [hang,lie]=size(m);
    elseif ind1(i)-ind2(i)>1 && ind2(1)>3  && ind2(1)>5
       p1=b(ind2(i)); p2=b(ind2(i)-1); p3=b(ind2(i)-2); p4=b(ind2(i)-3); p5=b(ind2(i)-4);p6=b(ind2(i)-5);
       m1=[p1,p2,p3,p4,p5,p6]';
       m(:,i)=m1;
       m(:,all(m==0,1))=[];
       [hang,lie]=size(m);
    elseif ind1(i)-ind2(i)>0  && ind2(1)>5
       p1=b(ind2(i)); p2=b(ind2(i)-1); p3=b(ind2(i)-2); p4=b(ind2(i)-3); p5=b(ind2(i)-4);p6=b(ind2(i)-5);
       m1=[p1,p2,p3,p4,p5,p6]';
       m(:,i)=m1;
       m(:,all(m==0,1))=[];
       [hang,lie]=size(m);
    elseif ind2(1)==5 && i==1
       p1=b(5); p2=b(4); p3=b(3); p4=b(2); p5=b(1);p6=0;
       m1=[p1,p2,p3,p4,p5,p6]';
       m(:,i)=m1;
       m(:,all(m==0,1))=[];
       [hang,lie]=size(m);
    elseif ind2(1)==4 && i==1
       p1=b(4); p2=b(3); p3=b(2); p4=(b1); p5=0;p6=0;
       m1=[p1,p2,p3,p4,p5,p6]';
       m(:,i)=m1;
       m(:,all(m==0,1))=[];
       [hang,lie]=size(m);
    elseif ind2(1)==3 && i==1
       p1=b(3); p2=b(2); p3=b(1); p4=0; p5=0;p6=0;
       m1=[p1,p2,p3,p4,p5,p6]';
       m(:,i)=m1;
       m(:,all(m==0,1))=[];
       [hang,lie]=size(m);
    elseif ind2(1)==2  && i==1
       p1=b(2); p2=b(1); p3=0; p4=0; p5=0;p6=0;
       m1=[p1,p2,p3,p4,p5,p6]';
       m(:,i)=m1;
       m(:,all(m==0,1))=[];
       [hang,lie]=size(m);
    elseif ind2(1)==1  && i==1
       p1=0; p2=0; p3=0; p4=0; p5=0;p6=0;
       m1=[p1,p2,p3,p4,p5,p6]';
       m(:,i)=m1;
       m(:,all(m==0,1))=[];
       [hang,lie]=size(m);
    elseif length(ind1)==1  
       p1=0; p2=0; p3=0; p4=0; p5=0;p6=0;
       m1=[p1,p2,p3,p4,p5,p6]';
       m(:,i)=m1;
       m(:,all(m==0,1))=[];    % 输出的m矩阵,里面包含了几段连续降雨前的PWV值
       [hang,lie]=size(m);     % 有lie列就有连续lie段降雨
    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);

           H(kk,1)=bhl;      % 从这里入手

       end
    % 前面情况会被覆盖
end
           C(:,LIE)=H;
           F=unique(C);      % 删除重复数值
           F(F==0)=[];
end

Tq_PWV_1.m

3.86 KB, 下载次数: 0, 下载积分: 金钱 -5

P.mat

65.5 KB, 下载次数: 0, 下载积分: 金钱 -5

R.mat

2.19 KB, 下载次数: 0, 下载积分: 金钱 -5

chang.m

2.5 KB, 下载次数: 0, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2020-7-6 21:26:16 | 显示全部楼层
就只出现一个结果,运行看了下,只是最后一个结果,程序里面提出,红色注释那里出现了点问题,各位大佬帮忙看下,怎么才能改过来
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2020-7-7 11:17:19 | 显示全部楼层
eval函数了解一下
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2020-7-7 11:52:50 | 显示全部楼层
这样写很容易出错,而且运行快不起来
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-7 17:12:39 | 显示全部楼层
karstification 发表于 2020-7-7 11:52
这样写很容易出错,而且运行快不起来

那应该怎么弄好一点
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-7 17:14:35 | 显示全部楼层

求大佬指点下
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-8 11:29:59 | 显示全部楼层
自己已经解决,感谢各位大佬光临本帖指导
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表