python如何做敏感度分析_1stopt、matlab和python用morris、sobol方法实现参数敏感性分析...

本文详细介绍了如何使用1stOpt和MATLAB进行参数敏感性分析,包括Morris局部和全局方法、偏微分方法以及Sobol方法。通过一个抛物线函数模型,展示了不同方法计算的一阶和总效应敏感性指数。Python中利用SALib库执行相同分析,并对比了两种环境下的结果。文章强调了SALib在不方便直接表达目标函数时的灵活性,以及参数灵敏度分析的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先看抛物线函数:

现在我取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);%分别是各参数的敏感度,最

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值