是否可以使用 python 执行参数灵敏度分析?
Is it possible to perform a parameter sensitivity analysis using python?
这可能吗?我有一个基本方程式:
Q = (pi*(Ta-Ts))/(((1/ha*Do))+(1/(2*k))*math.log(Do/Di)) * L
where;
ha = 8.14
k = 0.0026
Do = 0.2
Di = 0.003175
L = 0.25
F = 0.0704
Ta = 293
Ts = 113
pi = 3.14159265
我想看看一些变量是如何影响最终输出的(并建立一个变量敏感性 table)。我已经以图形格式对此进行了管理,但想要一些描述性统计数据。
例如,我希望Do(外径)的范围为np.arange(0.1,2,100),并保持其他变量不变。
我有以下代码来创建一些这样的图:
def enthalpy_mod1(ambient_temp, LNG_temp, Flow):
ha = 8.14
k = 0.0026
Do = 0.2
Di = 0.003175
L = 0.25
F = Flow
Ta = ambient_temp
Ts = LNG_temp
pi = 3.14159265
Q = (pi*(Ta-Ts))/(((1/ha*Do))+(1/(2*k))*math.log(Do/Di)) * L
e = (Q*3600)/F
results.append(e) # append the result to the empty list
df['Enthalpy Result']= e
plt.plot(Flow, e)
plt.rcParams.update({'font.size': 12})
plt.annotate('Flow rate effects', xy =(0.1,14000))
plt.show()
print df
print Flow_mod(df['Temp'], df['LNG'], df['Flow'])
ambient_temp = [293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293]
Flow = np.linspace(0.04, 0.2, 18)
LNG_range = [113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113]
results = []
并将结果放入数据框中.. 并以此方式绘制。
敏感性分析本身就是一种方法,所以它应该独立于语言(当然你知道,只是说明一点)所以你可以自己在 python 中实现算法。但是正如您所问的 python,是的,人们已经做到了。查看 SALib,一个 Python 库,用于使用各种不同的方法执行全局敏感性分析。
您描述的方法一次移动一个参数。这是局部敏感性分析,不会让您深入了解变量之间的交互作用,也无法衡量上下文中的非线性影响。鉴于您的方程非常简单,这可能无关紧要,但这在更复杂的模型中非常重要。
这可能吗?我有一个基本方程式:
Q = (pi*(Ta-Ts))/(((1/ha*Do))+(1/(2*k))*math.log(Do/Di)) * L
where;
ha = 8.14
k = 0.0026
Do = 0.2
Di = 0.003175
L = 0.25
F = 0.0704
Ta = 293
Ts = 113
pi = 3.14159265
我想看看一些变量是如何影响最终输出的(并建立一个变量敏感性 table)。我已经以图形格式对此进行了管理,但想要一些描述性统计数据。
例如,我希望Do(外径)的范围为np.arange(0.1,2,100),并保持其他变量不变。
我有以下代码来创建一些这样的图:
def enthalpy_mod1(ambient_temp, LNG_temp, Flow):
ha = 8.14
k = 0.0026
Do = 0.2
Di = 0.003175
L = 0.25
F = Flow
Ta = ambient_temp
Ts = LNG_temp
pi = 3.14159265
Q = (pi*(Ta-Ts))/(((1/ha*Do))+(1/(2*k))*math.log(Do/Di)) * L
e = (Q*3600)/F
results.append(e) # append the result to the empty list
df['Enthalpy Result']= e
plt.plot(Flow, e)
plt.rcParams.update({'font.size': 12})
plt.annotate('Flow rate effects', xy =(0.1,14000))
plt.show()
print df
print Flow_mod(df['Temp'], df['LNG'], df['Flow'])
ambient_temp = [293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293]
Flow = np.linspace(0.04, 0.2, 18)
LNG_range = [113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113]
results = []
并将结果放入数据框中.. 并以此方式绘制。
敏感性分析本身就是一种方法,所以它应该独立于语言(当然你知道,只是说明一点)所以你可以自己在 python 中实现算法。但是正如您所问的 python,是的,人们已经做到了。查看 SALib,一个 Python 库,用于使用各种不同的方法执行全局敏感性分析。
您描述的方法一次移动一个参数。这是局部敏感性分析,不会让您深入了解变量之间的交互作用,也无法衡量上下文中的非线性影响。鉴于您的方程非常简单,这可能无关紧要,但这在更复杂的模型中非常重要。