爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6860|回复: 7

[程序设计] 百分位数法划分暴雨降水过程编程中遇到的问题

[复制链接]

新浪微博达人勋

发表于 2014-5-10 02:25:39 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
数据在EXCEL,编程在M文件里最近论文遇到百分位数法划分暴雨降水过程,其中需要对各暴雨过程强度分级。所以要统计历年各气象台站1、2、3、…、10d(含10d以上)暴雨过程降水量,将所有台站的过程降水量作为一个序列,建立不同时间长度的10个降水过程序列。  
    暴雨过程降水定义:过程降水量以连续降水日数划分为一个过程,一旦出现无降水则认为该过程结束,并要求该过程中至少一天的降水量达到或超过50毫米(新疆、青海、甘肃、宁夏、内蒙古中西部、西藏为30毫米),最后将整个过程降水量进行累加。
统计本省历年各气象台站1天、2天、3天、……10天(含10天以上)暴雨过程降水量。
将本省所有台站的过程降水量作为一个序列,建立不同时间长度的10个降水过程序列。

在实际编程中[img=0,1]file:///D:\Program Files\Tencent\QQ\Users\505606103\Image\OT`ODW}7J7[KSXR5M){3%Q0.jpg[/img]22-32这一段的功能是为了把不是50但是跟50那些挨着的保留下来,但是这一段其实保留的是》=50的那个值的前6个和后6个。就有可能出现这样的情况 (1)0  0  0  45  32  9  0 55 52 1 0 2 1 0
(2)0 0 0 56 1 2 3 4 5 6 7 8 9        无法正确统计
          但是这个思路是可行的,只需要改i的大小和j的值。
    想询问下具体哪里能实现改进。。
  另因为11 12无暴雨,并i和j的运算可能超出范围。所以i的取值没有取365,取了不会影响运算的300多,比较随意

复件 rain.m

1.66 KB, 下载次数: 3, 下载积分: 金钱 -5

raindata.xls

34.5 KB, 下载次数: 6, 下载积分: 金钱 -5

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

新浪微博达人勋

 楼主| 发表于 2014-5-10 02:30:28 | 显示全部楼层
乱码部分为截图没有显示,就是22-32段编程问题较大。编了很久都没有解决。处理结果如下
fenji.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-10 02:32:41 | 显示全部楼层
新手不知道怎么发。如果还需要下载的话我直接贴程序了。

复件 rain.m

1.66 KB, 下载次数: 2, 下载积分: 金钱 -5

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

新浪微博达人勋

 楼主| 发表于 2014-5-10 02:33:35 | 显示全部楼层
[num]=xlsread('raindata.xls'); %读取那个EXCEL表格, 存到num里,于是num就成了一个365*5的矩阵
for i=1:365
    if num(i,5)==32700
        num(i,5)=0;
    else
    end
end%然后第五列只要有数是32700,就变成0  (32700为微量)
for i=1:365
    num(i,4)=i;%第四列换成365天数排序
end
m=[];%先创建一个任意大小的矩阵m,然后只要第五列非0,就存到m里
for i =1:365
    if num(i,5)~=0
        m(i,:)=num(i,:);
    else
    end
end
n=[];
for i =1:354%如果m的第五列大于等于50,就把这一行的m给n,然后内嵌一个循环是,j从1到6循环,如果i-j对应的行的第5列非零,就一起存到n,同样的,如果i-j对应的行的第五列非零,也存到n
    if m(i,5)>=50
        n(i,:)=m(i,:);
        for j=1:6
            if m(i-j,5)~=0
                n(i-j,:)=m(i-j,:);
            else
               
            end
            if m(i+j,5)~=0
                n(i+j,:)=m(i+j,:);
            else
               
            end
        end
    else
    end
end
for i=1:313%就是把单独一天有降雨但是降雨量不超过50的也变成零
    if n(i,5)~=0 && n(i,5)<50 && n(i-1,5)==0 && n(i+1,5)==0
        n(i,:)=0;
    else
    end
end
data=[];%把所有的纯零行都抛弃掉
j=1;
for i=1:300
    if n(i,5)~=0
        data(j,:)=n(i,:);
        j=j+1;
    else
    end
end
fenji=[];%所以如果后一行的第四列减去前一行的第四列等于1,M就加1,并且N就加上降水量,但是如果相减不等于1,那就把之前累加起来的M和N分别存到fenji的行和列,并且把M和N重置
M=1;N=data(1,5);j=1;
for i=1:99
    if data(i+1,4)-data(i,4)==1
        M=M+1;N=N+data(i+1,5);
    else
        fenji(j,1)=M;
        fenji(j,2)=N;
        j=j+1
        M=1;N=data(i+1,5);
    end
end
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-10 02:35:57 | 显示全部楼层
EXCEL的截图数据格式如下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-10 02:36:42 | 显示全部楼层
没读出来么,急死人O O完全无心睡眠
rain11.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 32430
发表于 2014-5-12 11:48:57 | 显示全部楼层
希望把帖子好好整理编辑一下之后重新发布,这样太乱了,根本不知道你在讲什么!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-13 16:15:31 | 显示全部楼层
最近也遇到这个问题,正犯愁呢。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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