调用Ishingami Homma解析函数测试PAWN算法(Matlab代码实现)

           目录

1 概述

2 运行结果

3 参考文献

‍4 Matlab代码


1 概述

灵敏度分析分为局部灵敏度分析和全局灵敏度分析;局部灵敏度分析包括:直接求导法、有限差分法、格林函数法。全局灵敏度分析算法有筛选法、蒙特卡洛方法、基于方差的方法。筛选法主要有IFFD、MOAT、COTTER法等,一般用于分析包含大量输入变量的系统模型、计算量相对较小。蒙塔卡罗方法是一种主要基于统计学理论的方法,包括散点图法、相关系数法、回归分析法等,对于线性单调模型分析具有较强的适用性。基于方差的方法是近年来研究较多且应用最广的一类方法,主要有重要性估计法、傅里叶幅值灵敏度测试法(FAST)、以及拓展傅里叶幅值灵敏度检验方法(EFAST)等。SOBOL全局灵敏度分析法同时具备了蒙塔卡罗法和方差法的特点。

2 运行结果

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3 参考文献

[1]吴庶宸,戚宗锋,李建勋.基于深度学习的智能全局灵敏度分析[J].上海交通大学学报,2022,56(07):840-849.DOI:10.16183/j.cnki.jsjtu.2021.191.

‍4 Matlab代码

主函数部分代码:

clear;

% Ishigami-Homma function
f = @(x,p) sin(x(1)) + p.a * sin(x(2)^2) + p.b * x(3)^4 * sin(x(1));
p.a = 2; p.b = 1;
ih = @(x) f(x, p);

% Bounds
lb = ones(1,3) * -pi; ub = ones(1,3) * pi;

% Parameters from Figure 4's caption
n=15;
Nu = 100;
Nc = 100; % Is actually 50 in the paper

% Other parameters
npts = 100; seed = 4;

[KS,xvals,y_u, y_c, par_u, par_c, ft] = PAWN(f, p, lb, ub, Nu, n, Nc, npts, seed);

m1 = min([y_c, y_u']);
m2 = max([y_c, y_u']);
[f,ci] = ksdensity(y_u, linspace(m1,m2,npts), 'Function', 'cdf');

% Begin Plotting
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

你可能感兴趣的:(优化算法,灵敏度分析,matlab,开发语言)