sobol敏感性分析 matlab代码
生活随笔
收集整理的這篇文章主要介紹了
sobol敏感性分析 matlab代码
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
% sobol 參數(shù)敏感性分析
%參考:
% csdn : https://blog.csdn.net/xiaosebi1111/article/details/46517409
% wiki: https://en.wikipedia.org/wiki/Variance-based_sensitivity_analysis
%運行環(huán)境 matlab2016b%% 初始化
clc;
clear all;
close all;
%% 設(shè)定:給定參數(shù)個數(shù)和各個參數(shù)的范圍
D=3;% 維度3,幾個參數(shù)
M=D*2;%
nPop=4;% 采樣點個數(shù),也就是參數(shù)水平數(shù) ,取大了好,比如4000,但慢
VarMin=[0 0 0 ];%各個參數(shù)下限
VarMax=[1 1 1];%各個參數(shù)上限
%% 產(chǎn)生所需的各水平參數(shù)
VarMin=[VarMin,VarMin];
VarMax=[VarMax,VarMax];
p= sobolset(M);% https://www.cnblogs.com/zhubinglong/p/12260292.html
% R=p(1:nPop,:);% 我只用前nPop個
R=[];
for i=1:nPopr=p(i,:);r=VarMin+r.*(VarMax-VarMin);R=[R; r];
end
% plot(R(:,1),'b*')
% 拆分為A B
A=R(:,1:D);% 每行代表一組參數(shù),其中每列代表每組參數(shù)的一個參數(shù);行數(shù)就代表共有幾組參數(shù)
B=R(:,D+1:end);
% 根據(jù)A B 產(chǎn)生矩陣AB
AB=zeros(nPop,D,D);
for i=1:DtempA=A;tempA(:,i)=B(:,i);AB(1:nPop,1:D,i)=tempA;
end
%% 求各參數(shù)解
YA=zeros(nPop,1);% 解
YB=zeros(nPop,1);
YAB=zeros(nPop,D);%分別代表YAB1,YAB2,YAB3,YAB(:,D)就代表YABD
for i=1:nPopYA(i)=myfun(A(i,:));YB(i)=myfun(B(i,:));for j=1:DYAB(i,j)=myfun(AB(i,:,j));end
end
%% 根據(jù)一階影響指數(shù)公式:
VarX=zeros(D,1);% S的分子
S=zeros(D,1);% 0: 估算基于給定樣本的方差(EXCEL var.p) ; 1:計算基于給定的樣本總體的方差(EXCEL var.p())
% var([2.091363878 1.110366059 3.507651769 1.310950363 2.091363878 3.507651769 1.110366059 1.7066512],1);
VarY=var([YA;YB],1);% S的分母。 計算基于給定的樣本總體的方差(EXCEL var.p())
for i=1:Dfor j=1:nPopVarX(i)=VarX(i)+YB(j)*(YAB(j,i)-YA(j));endVarX(i)=1/nPop*VarX(i);S(i)=VarX(i)/VarY;
end%% 總效應(yīng)指數(shù)
EX=zeros(D,1);
ST=zeros(D,1);
for i=1:Dfor j=1:nPopEX(i)=EX(i)+(YA(j)-YAB(j,i))^2;endEX(i)=1/(2*nPop)* EX(i);ST(i)=EX(i)/VarY;
end
disp('一階影響指數(shù):S');
disp(S);
disp('總效應(yīng)指數(shù):ST');
disp(ST);
disp('success!');%% 子函數(shù) matlab2016之前不支持子函數(shù)寫在同一個m文檔中
function y=myfun(x)
y=sin(x(1))+7*(sin(x(2)))^2+0.1*x(3)^4*sin(x(1));
end
?
總結(jié)
以上是生活随笔為你收集整理的sobol敏感性分析 matlab代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自动微分(Automatic Diffe
- 下一篇: Keras: 多输入及混合数据输入的神经