爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2991|回复: 0

关于标准化降水指数的编程问题

[复制链接]

新浪微博达人勋

发表于 2014-10-22 15:58:07 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Rosanlin 于 2014-10-22 17:04 编辑

       在论坛里下载了一个计算SPI的matlab程序,可是自己没有学过,看不太懂,希望大家帮忙解释一下红字的部分。谢谢!或者谁有更好的程序来计算SPI,我也可以借鉴一下,下面是那个程序:
function n=spi(R)
P=zeros(84,1);
file_data=zeros(84,1);
filedata=zeros(84,1);
g=zeros(84,1);
A=zeros(84,1);
C=zeros(30,84);
c0=2.515517;
c1=0.802853;
c2=0.010328;
d1=1.432788;
d2=0.189269;
d3=0.001308;
D=importdata('D:\Program Files\气象要素实时资料处理系统\text\ZX旬降水.txt');
data=D.data;
text=D.textdata;
[c,r]=sort(text(3:86,1));
for m=1:84
x(m,:)=data(r(m),:);
end
pathname=['D:\SPI\1971-2000逐站各旬降水量\'];
files=dir([pathname '*.txt' ]);
[file_num,s]=size(files);
for m=1:file_num
    B=load([pathname files(m).name]);
    n=R;
    C(:,m)=B(:,n);

end
C=C.*0.1;
for m=1:84
    c=C(:,m);
    index=find(c~=32766);
    index0=find(c==0);
    [num,p]=size(index);
    [num0,q]=size(index0);
    if num0~=0
        c(index0)=0.001;
    end
    P(m,1)=sum(c(index))/num;
    file_data(m,1)=log(P(m,1));
    d=prod(c(index));
    filedata(m,1)=log(d)/num;
end
A=file_data-filedata;
X=x(:,2);
for m=1:84
if X(m,1)==0
    X(m,1)=0.001;
end
a(m,1)=(1+sqrt(1+4*A(m,1)/3))/(4*A(m,1));
b(m,1)=P(m,1)/a(m,1);
G(m,1)=gammainc(X(m,1)/b(m,1),a(m,1));
end
   for M=1:84
       if G(M,1)>0.5
    t=sqrt(log(1/((1-G(M,1))^2)));
    SPI(M,1)=(t-(c1*t+c2*t^2-c0))/(1+d1*t+d2*t^2+d3*t^3);
else t=sqrt(log(1/(G(M,1)^2)));
    SPI(M,1)=((c1*t+c2*t^2-c0)-t)/(1+d1*t+d2*t^2+d3*t^3);
       end
    end
fid=fopen('D:\SPI\data.txt','w');
fprintf(fid,'%.1f\r\n',SPI);
fclose(fid);

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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