标准化降水SPI计算

clear;clc;
scale = 12;
Rm = xlsread('mon.xlsx');
Rspi = [-0.5 -1 -1.5 -2];

%%%%%%%%%%%%scale12=12;scale12=12;%%%%%%%%%
SPI=length(Rm);
L = scale-1;
R=zeros(SPI-L,1);
for j=1:(SPI-L)
    R(j)=sum(Rm(j:j+L));
end
Rn=R(1:12:length(R),:);
[x]=find(Rn==0);
Rn_nozero=Rn;
Rn_nozero(x)=[];
q=length(x)/length(Rn);
parm=gamfit(Rn_nozero);
G=q+(1-q)*gamcdf(Rn,parm(1),parm(2));
SPIn12=norminv(G,0,1);
SPI12 = SPIn12;



%%%%%%%%%%%%scale12=12;scale12=12;%%%%%%%%%

%%%%%%%%%%%%scale1 = 1;scale1 = 1;%%%%%%%%%
Dm=Rm;
for i1=1:12                  %月份1、2.。。12
    k1=i1:12:length(Dm);     %60到19年的 1、2.。12月
    Dn=Dm(k1);               %对应所有年某月的dm
    [x]=find(Dn==0);
    Rn_nozero=Dn;
    Rn_nozero(x)=[];
    q=length(x)/length(Dn);
    parm=gamfit(Rn_nozero);
    G=q+(1-q)*gamcdf(Dn,parm(1),parm(2));
    SPI1(:,i1)=norminv(G,0,1);
end
SPI1 = SPI1';
SPI1 = SPI1(:);
%%%%%%%%%%%%scale1 = 1;scale1 = 1;%%%%%%%%%



%%%%%%%%%%%%scale3 = 3;scale3 = 3;%%%%%%%%%
scale3= 3;
L3 = scale3-1;
R3=zeros(SPI-L3,1);
for j=1:(SPI-L3)
    R3(j)=sum(Rm(j:j+L3));
end
%%%%%%%%%%%%scale3 = 3;scale3 = 3;%%%%%%%%%

%%%%%%%%%%%%春春春春春春春春春春春春春;%%%%%%%%%
Rspr = R3(3:12:length(R3));
[x]=find(Rspr==0);
Rn_nozero=Rspr;
Rn_nozero(x)=[];
q=length(x)/length(Rspr);
parm=gamfit(Rn_nozero);
G=q+(1-q)*gamcdf(Rspr,parm(1),parm(2));
SPInspr=norminv(G,0,1);
SPIspr = SPInspr;
%%%%%%%%%%%%春春春春春春春春春春春春春;%%%%%%%%%

%%%%%%%%%%%%夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏;%%%%%%%%%
Rsum = R3(6:12:length(R3));
[x]=find(Rsum==0);
Rn_nozero=Rsum;
Rn_nozero(x)=[];
q=length(x)/length(Rsum);
parm=gamfit(Rn_nozero);
G=q+(1-q)*gamcdf(Rsum,parm(1),parm(2));
SPInsum=norminv(G,0,1);
SPIsum = SPInsum;
%%%%%%%%%%%%夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏;%%%%%%%%%

%%%%%%%%%%%%秋秋秋秋秋秋秋秋秋秋秋秋;%%%%%%%%%
Raut = R3(9:12:length(R3));
[x]=find(Raut==0);
Rn_nozero=Raut;
Rn_nozero(x)=[];
q=length(x)/length(Raut);
parm=gamfit(Rn_nozero);
G=q+(1-q)*gamcdf(Raut,parm(1),parm(2));
SPInaut=norminv(G,0,1);
SPIaut= SPInaut;
%%%%%%%%%%%%秋秋秋秋秋秋秋秋秋秋秋秋;%%%%%%%%%

%%%%%%%%%%%%冬冬冬冬冬冬冬冬冬冬冬冬冬冬;%%%%%%%%%
Rwin = R3(12:12:length(R3));
[x]=find(Rwin==0);
Rn_nozero=Rwin;
Rn_nozero(x)=[];
q=length(x)/length(Rwin);
parm=gamfit(Rn_nozero);
G=q+(1-q)*gamcdf(Rwin,parm(1),parm(2));
SPInwin=norminv(G,0,1);
SPIwin = SPInwin;
SPIwin(length(SPIaut),1) = nan;
%%%%%%%%%%%%冬冬冬冬冬冬冬冬冬冬冬冬冬冬;%%%%%%%%%

SP = [SPI12 SPIspr SPIsum SPIaut SPIwin];
SP0 = nan(length(SPI1)-length(SPI12),5);
SP = [SP;SP0];
SP = [SPI1 SP];

[m,n] = size(SP);
for i=1:n
    han(1,i) = length(find(SP(:,i)>Rspi(1)));
    han(2,i) = length(find(SP(:,i)>Rspi(2)&SP(:,i)<=Rspi(1)));
    han(3,i) = length(find(SP(:,i)>Rspi(3)&SP(:,i)<=Rspi(2)));
    han(4,i) = length(find(SP(:,i)>Rspi(4)&SP(:,i)<=Rspi(3)));
    han(5,i) = length(find(SP(:,i)<=Rspi(4)));
end
han1 = han ./sum(han);
[m,n] = size(han1);
han1(m+1:length(SPI1),:)=nan;
SP = [han1 SP];
xlswrite('SPEI-SPI.xlsx',SP,'SPI年春夏秋冬');

月降水数据,计算SPI1 SPI3 SPI12

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
标准化降水指数(SPI)是一种常用的降水异常检测和评估方法。它能够通过统计学的方法来计算降水的相对湿润或干旱程度,并提供一种与长期平均降水比较的标准。 SPI计算过程如下: 1. 收集降水观测数据:首先需要收集要分析的降水数据,包括不同时间尺度的降水观测值,比如日、月、年等等。 2. 求得累计降水:对于每个时间尺度,计算一定时间段内的累计降水量。可以选择不同时间段,比如一年、三年、五年等等。 3. 求得平均值和标准差:通过历史降水观测数据计算出每个时间尺度上的平均值和标准差。这里的历史数据时间跨度要尽量长,以便更准确地反映长期气候变化趋势。 4. 计算SPI值:利用公式 SPI = (X - μ) / σ 来计算每个时间尺度下的SPI值。其中X为当前时间段的累计降水量,μ为历史降水的平均值,σ为历史降水的标准差。 5. 分析SPI值:根据SPI值的正负和大小,可以对当前时间段的降水情况进行评估。SPI=0表示当前降水正好等于历史平均值,SPI>0表示降水偏多,SPI<0表示降水偏少。SPI值的大小也反映了降水异常的严重程度,绝对值越大,异常程度越大。 通过SPI计算,可以更加客观地评估降水的异常情况,并为气候监测、干旱预警以及水资源管理等提供参考依据。然而,SPI计算也有一定的局限性,比如对于非均匀降水分布地区的应用效果可能不理想,所以在实际应用中需要综合考虑其他影响因素,提高分析的准确性。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HFUT1202

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值