1 概述
大量参数是复杂环境模型的主要问题,因为它限制了它们的应用。因此,旨在识别模型的有影响和无影响参数的敏感性分析 (SA) 方法对于这些模型的有效校准至关重要。 SA 确实允许通过应用因子固定 (FF) 和因子优先级 (FP) 来减少校准过程中涉及的参数数量。在本文中,基于密度的全球敏感性分析 (GSA) 方法 -PAWN- 应用于土壤和水评估工具 (SWAT),这是一种高度参数化的水文模拟器。本研究的目的是将新开发的 PAWN 方法与 Sobol 方法进行比较,Sobol 方法是一种成熟且广泛使用的基于方差的 SA 方法。 PAWN 方法考虑整个模型输出分布来描述输出不确定性,而 Sobol 方法隐含地假设方差是用于此目的的充分指标。为此,使用PAWN和Sobol'方法,选择了比利时Zenne河SWAT模型的26个水量相关参数进行排名。此外,还从收敛性、参数排序结果的相关演变和所需的计算成本等方面对两种 SA 方法进行了评估和比较。
2 使基于SWAT 的高参数模型的 PAWN 和 Sobol 敏感性分析方法的比较
部分代码:
subplot(331); ylabel('y'); hold on;box on; subplot(334); ylabel('CDF'); hold on; box on; subplot(337); ylabel('KS'); hold on; xlabel('x_1'); box on; subplot(338); xlabel('x_2'); hold on;box on; subplot(339); xlabel('x_3'); hold on;box on; for ind=1:length(lb) subplot(330+ind) plot(par_c(:,ind),y_c, 'xk', 'markersize', 2); end crit_c = [1.22,1.36,1.48,1.63,1.73,1.95]; % 0.1, 0.05, 0.025, 0.010, 0.005, 0.001 critval = crit_c(2) * sqrt((Nu+Nc)/(Nu*Nc)); for ind=1:length(lb) subplot(333+ind) plot([-100, 100], [1, 1], 'k--'); hold on plot(ci,ft((ind-1)*n+1:ind*n,:), 'color', [0.8,0.8,0.8]); ylim([0,1]); plot(ci,f, 'r:','linewidth',4); ylim([0,1.2]) hold off end colData = linspace(0,n,n)'/n; colData = [colData colData colData]; for ind=1:length(lb) subplot(336+ind) [xtoplot, indices] = sort(xvals(ind,:)); ytoplot = KS(ind, :); ytoplot = ytoplot(indices); plot([min(xvals(:)), max(xvals(:))], [critval,critval], 'k--'); hold on; plot(xtoplot, ytoplot, 'k'); scatter(xtoplot, ytoplot, [], colData, 'filled', 'markeredgecolor', 'k'); ylim([0,1]) hold off end
subplot(331); ylabel('y'); hold on;box on; subplot(334); ylabel('CDF'); hold on; box on; subplot(337); ylabel('KS'); hold on; xlabel('x_1'); box on; subplot(338); xlabel('x_2'); hold on;box on; subplot(339); xlabel('x_3'); hold on;box on; for ind=1:length(lb) subplot(330+ind) plot(par_c(:,ind),y_c, 'xk', 'markersize', 2); end crit_c = [1.22,1.36,1.48,1.63,1.73,1.95]; % 0.1, 0.05, 0.025, 0.010, 0.005, 0.001 critval = crit_c(2) * sqrt((Nu+Nc)/(Nu*Nc)); for ind=1:length(lb) subplot(333+ind) plot([-100, 100], [1, 1], 'k--'); hold on plot(ci,ft((ind-1)*n+1:ind*n,:), 'color', [0.8,0.8,0.8]); ylim([0,1]); plot(ci,f, 'r:','linewidth',4); ylim([0,1.2]) hold off end colData = linspace(0,n,n)'/n; colData = [colData colData colData]; for ind=1:length(lb) subplot(336+ind) [xtoplot, indices] = sort(xvals(ind,:)); ytoplot = KS(ind, :); ytoplot = ytoplot(indices); plot([min(xvals(:)), max(xvals(:))], [critval,critval], 'k--'); hold on; plot(xtoplot, ytoplot, 'k'); scatter(xtoplot, ytoplot, [], colData, 'filled', 'markeredgecolor', 'k'); ylim([0,1]) hold off end