爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7614|回复: 4

[源程序] matlab计算spi代码的解释

[复制链接]

新浪微博达人勋

发表于 2019-11-17 22:12:17 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 帅帅f 于 2020-5-12 17:35 编辑

其中这一步的意思是:A1=[];
for is=1:scale
A1=[A1,Data(is:length(Data)-scale+is)];  
end
XS=sum(A1,2)
Data是降雨量数据。如果计算尺度(scale=3),那么A1就变成了n行3列的数据,第一列是从第一个月降水开始,第二列是从第二个月降水开始,第三列是从第3个月降水开始,再使用求和工具sum,使矩阵A1变成n行1列的数据,也就是上面的XS。
for is=1:nseas
    tind=is:nseas:length(XS);%这里的nseas取12,当is从1开始取时,tind的矩阵包括了研究时期所有1月份的降雨量。当is取2时,以此类推。
    Xn=XS(tind);
    [zeroa]=find(Xn==0);%找出降雨量为0的位置
    Xn_nozero=Xn;Xn_nozero(zeroa)=[];
    q=length(zeroa)/length(Xn);%降雨量为0的概率
    parm=gamfit(Xn_nozero);%拟合pdf
    Gam_xs=q+(1-q)*gamcdf(Xn,parm(1),parm(2));%看过spi计算原理的都知道当考虑降雨的等于0的情况,伽马函数会作调整。
    Z(tind)=norminv(Gam_xs);%转换为标准正态分布
end


代码来自mathworks.cn Taesam Lee编写



SPI.m

1.04 KB, 下载次数: 34, 下载积分: 金钱 -5

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

新浪微博达人勋

发表于 2019-11-18 08:10:38 | 显示全部楼层
谢谢您解释
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-11-18 11:32:22 | 显示全部楼层

一起学习
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-3-11 20:44:30 | 显示全部楼层
在matlab上打开你的程序后,怎么输入数据啊?能不能演示下
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-4-3 20:33:20 | 显示全部楼层
leijiajin 发表于 2020-3-11 20:44
在matlab上打开你的程序后,怎么输入数据啊?能不能演示下

这个很简单的  你把降水量搞成一列数据  在运用那个函数(matlab加载函数会把)就可以得出结果  我和个只是解释函数中的某些东西
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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