首先看抛物线函数:
现在我取a=2,b=3,c=4 ,得到如下函数:
x或t都是指自变量,就不改了,一个意思。
问题是,我想知道对于此数据和模型,参数a,b,c的敏感性,也就是y的改变量与a、b、c的改变量的比值关系。
首先用1stopt分析:
1 NewCodeBlock"SA";2 Parameter a=[1,3],b=[2,4],c=[3,5];//要优化的参数及其范围3 Variable t,y;//变量4 Function y=a*t^2+b*t+c;5 Data;6 //t y 变量顺序要和Variable后变量对应
7 -5 39
8 -4 24
9 -3 13
10 -2 6
11 -1 3
12 0 4
13 1 9
14 2 18
15 3 31
16 4 48
17 5 69
以下分别为各种参数敏感性方法(包括morris局部和全局,偏微分方法局部和全局):
以上就是4中方法的结果。用的目标函数是SSR,点的范围我用的是上下浮动50%,正好布满整个给定空间:
可以看morris局部敏感度分析具体数据:
a:
b:
c:
然后将灵敏度指数平均得到morris局部方法(本质是OAT方法,一次改变一个)分析结果:
全局方法(本质是通过拉丁抽样实现同时考虑多个参数的影响)就不是这个思路了,看一下超拉丁抽样:
总结一下1stopt中4种方法参数灵敏度结果:
morris方法局部:
名称 灵敏度指数 灵敏度指数(%)
a3.916E1889.1113892365457
b4.125E179.38673341677096
c6.6E161.50187734668335
morris方法全局:
名称 灵敏度指数 灵敏度指数(%)
a2.00290323137447E1881.4890482414753
b2.10289523274038E178.55572692595605
c2.44687506069835E179.95522483256862
偏微分方法局部:
名称 灵敏度指数 灵敏度指数(%)
a3.99432000000567E1889.1113892365577
b4.20750000000213E179.38673341676365
c6.73199999998753E161.50187734667864
偏微分方法全局:
名称 灵敏度指数 灵敏度指数(%)
a3.98876054886661E1882.084202339751
b4.20542269921853E178.65428655186941
c4.50049450186404E179.26151110837963
下面用matlab写sobol方法进行分析:
1 %sobol 参数敏感性分析2 %算法参考:3 % csdn : https://blog.csdn.net/xiaosebi1111/article/details/46517409
4 % wiki: https://5 %运行环境 matlab2016b6 %作者 [email protected] 2020年6月7日7 %%初始化8 clc;9 clear all;10 close all;11 %%设定:给定参数个数和各个参数的范围12
13 % % 1-自定义子函数114 % D=3;%维度3,几个参数15 % nPop=4:500:5000;%采样点个数,也就是参数水平数 ,取大了好,比如4000,但慢16 % VarMin=[-pi -pi -pi ];%各个参数下限 SALib :S1: [ 0.30797549 0.44776661 -0.00425452] ;ST: [0.56013728 0.4387225 0.24284474]17 % VarMax=[pi pi pi];%各个参数上限18 % myFunction=@(x) Ishigami(x);%目标函数,也可以是个黑盒子19
20 % % 1-自定义子函数221 D=3;%维度3,几个参数22 nPop=4:50:1000;%采样点个数,也就是参数水平数 ,取大了好,比如4000,但慢23 VarMin=[1 2 3 ];%各个参数下限24 VarMax=[3 4 5];%各个参数上限25 myFunction=@(x) myx2(x);26
27 % % 1-自定义子函数328 % D=4;%维度3,几个参数29 % nPop=4:50:1000;%采样点个数,也就是参数水平数 ,取大了好,比如4000,但慢30 % VarMin=[1 2 3 4];%各个参数下限31 % VarMax=[3 4 5 5];%各个参数上限32 % myFunction=@(x) myx3(x);33
34
35 %%开始计算36 numnPop=numel(nPop);37 SAll=zeros(numnPop,D+1);%分别是各参数的敏感度,最