利用MATLAB计算水文极值(年最大值,年连续5日最大,连续干/湿日,连续极端径流低值日数)
[filename,filepath]=uigetfile('*.*','请选择文件');
%计算水文极端,年最大,年连续5日最大,连续干日,连续极端径流低值日数
%wqianghy@
%南京大学流域水文过程模拟实验室
datapath=strcat(filepath,filename);
data=dlmread(datapath);
data(1)=[];
datalength=length(data);
numyear=datalength/365;
AM1X=zeros(numyear,1); %求年最大值
for i=1:numyear
tmin=365*(i-1)+1;
tmax=365*i;
AM1X(i)=max(data(tmin:tmax));
end
AM5X=zeros(numyear,1); %求连续5日最大
data5x=zeros(datalength,1);
for i=1:datalength
if i<5
data5x(i)=mean(data(1:5));
else
tmi=i-5+1;
tmx=i;
data5x(i)=mean(data(tmi:tmx));
end
end
for i=1:numyear
tmin=365*(i-1)+1;
tmax=365*i;
AM5X(i)=max(data5x(tmin:tmax));
end
CDD=zeros(numyear,1); %求连续干日
datacdd=zeros(datalength,1);
for i=1:datalength
if data(i)<=1 %判断是否为干日
datacdd(i)=1;
end
end
for i=1:numyear
tmin=365*(i-1)+1;
tmax=365*i;
cdnum1=[];
lfind=find(datacdd(tmin:tmax)==0);
for j=1:length(lfind)-1
cdnum1(j)=lfind(j+1)-lfind(j)-1;
end
cdnum1(length(lfind))=365-lfind(length(lfind));
CDD(i)=max(cdnum1);
end
sortdata=sort(data); %连续极端低值日数
per10=sortdata(round(datalength*0.1));
CDS=zeros(numyear,1); %求连续干日
datacds=zeros(datalength,1);
for i=1:datalength
if data(i)
datacds(i)=1;
end
end
for i=1:numyear
tmin=365*(i-1)+1;
tmax=365*i;
cdsnum1=[];
lfind=find(datacds(tmin:tmax)==0);
for j=1:length(lfind)-1
cdsnum1(j)=lfind(j+1)-lfind(j)-1;
end
cdsnum1(length(lfind))=365-lfind(length(lfind));
CDS(i)=max(cdsnum1);
end
转载本文请联系原作者获取授权,同时请注明本文来自刘朋科学网博客。
链接地址:/blog-3306552-1157810.html
上一篇:[转载]张凌博士个人网站
下一篇:[转载]水文工具集