matlab统计水文参数,科学网—[转载]利用MATLAB计算水文极值 - 刘朋的博文

利用MATLAB计算水文极值(年最大值,年连续5日最大,连续干/湿日,连续极端径流低值日数)

[filename,filepath]=uigetfile('*.*','请选择文件');

%计算水文极端,年最大,年连续5日最大,连续干日,连续极端径流低值日数

%wqianghy@163.com

%南京大学流域水文过程模拟实验室

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

转载本文请联系原作者获取授权,同时请注明本文来自刘朋科学网博客。

链接地址:http://blog.sciencenet.cn/blog-3306552-1157810.html

上一篇:[转载]张凌博士个人网站

下一篇:[转载]水文工具集

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我是一个语言模型AI,无法运行程序或进行数据库操作。但是,我可以提供一些基本的SQL语句供参考: 1. 创建表S、SC和C: ``` CREATE TABLE S ( sno CHAR(10) PRIMARY KEY, sname CHAR(20), ssex CHAR(2), sage INT, sdept CHAR(20) ); CREATE TABLE SC ( sno CHAR(10), cno CHAR(10), grade INT, PRIMARY KEY (sno, cno), FOREIGN KEY (sno) REFERENCES S(sno), FOREIGN KEY (cno) REFERENCES C(cno) ); CREATE TABLE C ( cno CHAR(10) PRIMARY KEY, cname CHAR(20), cpno CHAR(10), ccredit INT ); ``` 2. 插入数据: ``` INSERT INTO S VALUES ('1', '李勇', '男', 20, 'IS'); INSERT INTO S VALUES ('2', '刘晨', '女', 19, 'IS'); INSERT INTO S VALUES ('3', '刘朋', '男', 20, 'IS'); INSERT INTO S VALUES ('1', '王敏', '女', 18, 'MA'); INSERT INTO S VALUES ('2', '张锋', '男', 19, 'MA'); INSERT INTO S VALUES ('3', '李敏', '男', 20, 'MA'); INSERT INTO SC VALUES ('1', '1', 92); INSERT INTO SC VALUES ('1', '2', 85); INSERT INTO SC VALUES ('1', '3', 88); INSERT INTO SC VALUES ('2', '2', 90); INSERT INTO SC VALUES ('2', '3', 80); INSERT INTO SC VALUES ('2', '1', 75); INSERT INTO SC VALUES ('2', '2', 92); INSERT INTO SC VALUES ('2', '3', 89); INSERT INTO SC VALUES ('3', '1', 90); INSERT INTO C VALUES ('1', '数据库', '5', 4); INSERT INTO C VALUES ('2', '数学', NULL, 2); INSERT INTO C VALUES ('3', '信息系统', '1', 4); INSERT INTO C VALUES ('4', '操作系统', '6', 3); INSERT INTO C VALUES ('5', '数据结构', '7', 4); INSERT INTO C VALUES ('6', '数据处理', NULL, 2); INSERT INTO C VALUES ('7', 'PASCAL语言', '6', 4); ``` 3. 查询学生基本信息: ``` SELECT * FROM S WHERE sno = '1'; ``` 4. 查询课程名和成绩信息: ``` SELECT c.cname, sc.grade FROM C c, SC sc WHERE c.cno = sc.cno AND sc.sno = '1'; ``` 5. 修改成绩信息: ``` UPDATE SC SET grade = 90 WHERE sno = '1' AND cno = '1'; ``` 6. 删除学生信息: ``` DELETE FROM S WHERE sno = '3'; ``` 以上仅是一些简单的SQL语句示例,具体实现还需要根据所用数据库的不同进行调整。建议您参考相关文献或请专业人士进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值