文章目录

  • 一、所需资料
  • 二、操作步骤
    • 1.导入matlab文件
    • 2.设置参数取值范围和必要变量
    • 3.生成随机参数组
    • 4.修改DHSVM参数配置文件
    • 5.修改efast_dhsvm工程
    • 6.进行自动计算
    • 7.提取日均径流量
    • 8.统计参数敏感性
  • 总结

参数敏感性分析是数值模型应用中常用的方法,通过敏感性分析,可以区分哪些参数对模拟结果的影响更大,从而更好的进行参数率定,加深对模型应用的认识。本文以DHSVM样例数据为基础,介绍如何利用EFAST敏感性分析方法,对DHSVM中4个土壤参数进行敏感性分析。


一、所需资料

1.DHSVM模型及数据:来自DHSVM模型官网 https://www.pnnl.gov/projects/distributed-hydrology-soil-vegetation-model
2.EFAST方法matlab代码:可能来自网络资源 https://www.codedown123.com/64477.html,忘记从哪里获取得了,感谢贡献者,本文另附一份修改后的以供使用。
3.连接EFAST与DHSVM模型的C语言代码:本文提供下载。

参考文献:(希望大家多多引用 ^ . ^)
Zhao Y, Nan Z*, Yu W, Zhang L. Calibrating a hydrological model by stratifying frozen ground types and seasons in a cold alpine basin. Water. 2019, 11(5): 985. DOI:10.3390/w11050985.
赵奕,南卓铜*,李祥飞,徐毅,张凌. 分布式水文模型DHSVM在西北高寒山区流域的适用性研究. 冰川冻土. 2019, 41(1): 147-157.

资源附件:
https://download.csdn.net/download/qq_21957901/21110845?spm=1001.2014.3001.5501

二、操作步骤

1.导入matlab文件

将matlab文件中的efast_DHSVM.m、Parameter_settings_EFAST.m、parameterdist.m、SETFREQ.m这四个文件用Matlab打开。

2.设置参数取值范围和必要变量

在efast_DHSVM.m中输入相关的参数个数,搜索曲线采样数等信息。注意k是参加敏感性分析的参数数量+1个虚拟参数,在本案例仅选取4个土壤参数。

在Parameter_settings_EFAST.m中输入参数的最大最小值,调整相应变量,本案例选取横向导水率LC、田间持水量FC、递减系数ED泡压BP这4个参数,另有一个虚拟参数dummy

3.生成随机参数组

运行代码,在生成的变量中找到X,X为生成的随机参数组,如果待测参数有4个,每组采样65次,则一共有5组(包含一个虚拟参数),每组有65条记录。
将X中的每一组的参数组分别保存为parameter.txt,放入工作文件夹parax中(x为对应的组号),具体样式请查看附件。(注意,将无关信息去除)

4.修改DHSVM参数配置文件

本样例通过识别并替换配置文件中的标识符,将随机参数组填入DHSVM配置文件中。打开模型参数配置文件INPUT.Mercer.3.1.2_Bin,将待测参数的值模型输出路径替换为唯一标识符,请务必注意保证唯一标识符不会与配置文件中的其他字符重复,将修改后的配置文件放入每个paraX文件夹。

5.修改efast_dhsvm工程

打开efast_dhsvm工程中的源代码,设置相应的变量。

//此分组数量和每组个数根据eFAST算法要求分类,可自行修改合适的分组
#define G 5 //参数总数量(包括一个虚拟参数,所以数量会比实际参数多1)     !!需自行修改!!
#define N 65 //每个参数的采样个数,一般默认为65,需跟matlab中一致          !!需自行修改!!
#define PN 4 //待测参数个数                                               !!需自行修改!!

第93行(附近)设置唯一标识符,唯一标识符的顺序要跟parameter.txt文件中每行参数的顺序一致,保存路径标识符放在最后。

int j,k;
char paraname[PN+1][50] = {"L123C","F123C","E123D","B123P","D123RI"};//识别符 最后一个是模型输出路径  !!需自行修改,且与参数采样文件中每行的参数对应
char paradata[PN+1][10];

第176行(附近)设置调用 DHSVM.exe 运行模型,将字符串改为自己的DHSVM执行程序,本文以 DHSVM3.1.2.exe 为例。修改完成后生成执行程序。

//运行模型
sprintf(do_DHSVM, "DHSVM3.1.2.exe SET-%d", j);//.exe执行程序名!!需自行修改!!
system(do_DHSVM);

6.进行自动计算

将生成的efast_dhsvm.exe、和DHSVM运行程序DHSVM3.1.2.exe,修改后的参数配置文件INPUT.Mercer.3.1.2_Bin以及每组对应的参数文件parameter.txt放入对应工作文件夹parax。同时注意驱动DHSVM模型的数据文件的位置,本案例所用的驱动数据在input、met、modelstate文件夹中。

运行efast_dhsvm.exe,对每个参数集合生成相应的参数配置文件SET-x,运行DHSVM模型,并将结果保存至对应的输出文件夹x

若提示模型输入数据无法打开,请仔细检查报错信息,在原参数文档INPUT.Mercer.3.1.2_Bin中修改输入数据路径为本机对应路径。所有DHSVM所需的输入数据在模型样例数据中的input、met和modelstate文件夹

7.提取日均径流量

打开c语言工程read_results,修改相关设置(已标注),生成read_results.exe,将其放入文件夹parax中,读取每个参数组的模拟结果中的Streamflow.Only文件,提取日平均径流量,保存为results.txt文档。如果要峰值流量等的其他数据,请自行提取。

将每组计算出的results.txt按照顺序合并成一个文件total_results.txt。包含 参数个数*每个参数采样个数 行数据,具体参考本文附件。

8.统计参数敏感性

将matlab文件Sensitivity.m导入matlab,调整相应设置,修改路径载入total_results.txt进行计算,得到的变量中,SiSti是每个参数的一阶敏感性和全局敏感性。



可以看到前三个参数横向导水率LC、田间持水量FC、递减系数ED具有较高的敏感性,而泡压BP基本对结果没有任何影响。虚拟参数反映的是参数之间的相互关系,在这里似乎并不高,具体解析可以参考EFAST方法的说明。


总结

EFAST方法是比较常用的分析模型参数敏感性的方法,不仅能反映单个参数变化下的一阶敏感性,也能反映多个参数狐仙关联下的全局敏感性。本文提供了一种将EFAST方法应用到DHSVM模型中的方法,虽然文中只选取了4个土壤参数,但对模型其他参数也可以用同样的方法分析敏感性,也为EFAST方法应用到其他模型提供一个思路。

利用EFAST方法分析DHSVM参数的敏感性相关推荐

  1. JS利用apply方法,将数组直接当做参数传给函数

    利用apply()方法. 语法:apply([thisObj[,argArray]])  定义:应用某一对象的一个方法,用另一个对象替换当前对象.  说明:  如果 argArray 不是一个有效的数 ...

  2. 利用递归下降分析方法完成语法分析

    一. 程序设计题目与说明 利用递归下降分析方法完成语法分析. 递归下降分析法是一种自顶向下的分析方法,文法的每个非终结符对应一个递归过程(函数).分析过程就是从文法开始符出发执行一组递归过程(函数), ...

  3. 利用matlab工具箱的pid参数科学整定方法

    声明 这篇文章目前仅对电机调速有效,暂时不知道对调整姿态这样的pid是否可以有同样的效果.如果是SISO,我的感觉是可以的,可以尝试方波信号而不是简单的阶跃. 采集数据 给电机提供一个单位阶跃输入(固 ...

  4. Gps高程拟合matlab代码,几种GPS高程拟合方法分析与比较.doc

    几种GPS高程拟合方法分析与比较 几种GPS高程拟合方法分析与比较 摘 要:文章论述了几种常用的GPS高程拟合的方法,并在MATLAB中编制了相应的程序,建立了相应的GPS高程拟合模型,并通过实例数据 ...

  5. matlab 非线性电感,基于Matlab/Simulink利用动态和静态电感等磁参数建立了一种开关磁阻电机的非线性磁参数模型...

    基于动.静态电感特性的开关磁阻电机非线性磁参数模型 蒋涛 (北京航空航天大学,北京100191) 摘要:基于Matlab/Simulink.利用动态和静态电感等磁参数建立了一种开关磁阻电机的非线性磁参 ...

  6. 如何高效提高倾斜摄影三维模型顶层合并的技术方法分析

    如何高效提高倾斜摄影三维模型顶层合并的技术方法分析 1.倾斜摄影三维模型顶层合并 1.1倾斜摄影三维模型是一种基于倾斜摄影技术,通过多个角度拍摄同一区域的影像,利用计算机图像处理和三维重建技术生成的三 ...

  7. 目前几种常见穿NAT的方法分析

    目前几种常见穿NAT的方法分析 本文转自http://blog.csdn.net/wcl0715/archive/2006/04/25/676078.aspx NAT的出现在一定程度上解决了发展中国家 ...

  8. checkm基因组_checkm8漏洞利用的技术分析

    checkm基因组 Most likely you've already heard about the famous exploit checkm8, which uses an unfixable ...

  9. 面向对象程序设计课程设计:利用决策树方法判定西瓜质量

    目录 第一章课程设计的目的及要求 1.1课程设计目标 1.2课程设计实验环境 1.3课程设计的预备知识 1.4课程设计要求 第二章课程设计的内容 2.1c++语言程序设计--<利用决策树方法判定 ...

最新文章

  1. 有必要总结一下:matlab图像灰度调整——imadjust函数的使用
  2. 过滤流的主要特点是什么_高效过滤器工艺流程是什么 高效过滤器特点介绍【详解】...
  3. 水平和垂直翻转可视对象
  4. Ubuntu 13.10下安装ns2 2.35遇到的小问题
  5. 【笔记】与Android酱的第一周
  6. 实现定时中断_EPIT 定时器,仅需做到如下几步,即可轻松配置使用
  7. Android判断网线连接
  8. stream流倒序排序_java8 stream多字段排序
  9. webpack----loader
  10. 几种JS倒计时代码 【转】
  11. [转载] python字符串_一文详解Python字符串条件判断方法
  12. iOS最好用的弹出框
  13. 2022 阿里 java 面经
  14. 加密word文档脱壳教程
  15. 新手如何做抖音直播带货?新号如何快速获取直播推荐流量?
  16. 深圳随到随考,科目四随到随考,科三理论第二理论随到随考说明
  17. 小米编程真题:风口的猪-中国牛市
  18. 大言不惭 swank? talk about sth or speak too confidently
  19. android获取特殊字符串,Android拨号盘特殊字符串处理
  20. html平行四边形按钮,如何绘制平行四边形按钮

热门文章

  1. 深入理解CSS之flex精要之 flex-basis flex-grow flex-shrink 实战讲解
  2. 国内安全厂商护航XP能力引争议
  3. 【无标题】6. 青蛙与蚊子
  4. OpenGL ES之变换反馈Transform Feedback的使用流程
  5. JS 实现网页的简体繁体切换
  6. 解决WORD疑难之:设置节起始页码后出现诡异隐藏页/跳页、节首页页面边框丢失
  7. 阿里正式启动2021届春季校招!java算法工程师,看完跪了
  8. Mars3d开发——飞行漫游
  9. python自动化测试学习笔记合集三
  10. kaggle数据挖掘竞赛--信用卡违约风险评估模型