其他的不用多说,能找到这篇博客说明读者已经基本了解了一、二阶灵敏度的定义是啥,但苦于其他博客的博大精深,很难用python代码写出自己模型的灵敏度测试。
这里直接给出代码,读者只需要修改模型的函数表达式即可。
from SALib.sample import saltelli
from SALib.analyze import sobol
from pylab import *
import matplotlib.pyplot as plt
import pandas as pd
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 修复中文乱码
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
np.seterr(divide='ignore', invalid='ignore') # 消除被除数为0的警告
# 上面不用管
problem = {
'num_vars': 4, # 模型变量的数量
'names': ['T', 'PT', 'Pr', 'i'], # 模型的变量
'bounds': [[2000, 10000],
[0, 0.2],
[0.1, 0.5],
[1, 30],
] # 指定变量的范围,一一对应
}
def evaluate(xx): # 进行灵敏度分析的模型
return np.array([x[0] * np.power(1 - (1 - np.power(1 - x[1], 1.4263 * np