当您编写包含大量代码的程序时,很难找出哪些值对您的最终结果有很大影响。 在我的情况下,我有一些微分方程式,我用odeint解决。 需要花费大量时间才能找出哪些值对我的结果(速度)有很大影响。 在python中有任何工具来分析你的价值观或有人有任何想法吗?
感谢您的帮助。
[编辑]
MathBio:"一般来说,灵敏度分析就是你要做的。 "
@MathBio我现在阅读了一些关于SALib的博客(SALib Guide)并试图写一个更简单的#34;测试程序来解决微分方程。 下面你看我写的程序: 我收到错误消息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 685, in runfile
execfile(filename, namespace)
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 71, in execfile
exec(compile(scripttext, filename, 'exec'), glob, loc)
File "C:/Users/Tim_s/Desktop/Workspace/test/TrySALib.py", line 44, in <module>
Y = Odefunk(param_values)
File "C:/Users/Tim_s/Desktop/Workspace/test/TrySALib.py", line 24, in Odefunk
dT=odeint(dTdt,T0,t,args=(P,))
File "C:\Python27\lib\site-packages\scipy\integrate\odepack.py", line 148, in odeint
ixpr, mxstep, mxhnil, mxordn, mxords)
File "C:/Users/Tim_s/Desktop/Workspace/test/TrySALib.py", line 17, in dTdt
dT[0]=P[0]*(T[1]-T[0])+P[2]
IndexError: tuple index out of range
这里是代码:
from SALib.sample import saltelli
from SALib.analyze import sobol
import numpy as np
from pylab import *
from scipy.integrate import odeint
Tu=20.
t=linspace(0,180,90)
def dTdt(T,t,P):# DGL
dT=zeros(2)
dT[0]=P[0]*(T[1]-T[0])+P[2]
dT[1]=P[1]*(Tu-T[1])+P[0]*(T[0]-T[1])
return dT
T0=[Tu,Tu]
def Odefunk(values):
for P in enumerate(values):
dT=odeint(dTdt,T0,t,args=(P,))
return dT
# Define the model inputs
problem = {
'num_vars': 3,
'names': ['P0', 'P1', 'P2'],
'bounds': [[ 0.1, 0.2],
[ 0.01, 0.02],
[ 0.5, 1]]
}
# Generate samples
param_values = saltelli.sample(problem, 1000, calc_second_order=True)
# Run model (example)
Y = Odefunk(param_values)
# Perform analysis
Si = sobol.analyze(problem, Y, print_to_console=False)
# Print the first-order sensitivity indices
print Si['S1']
答案 0 :(得分:1)
你真的应该包括你的颂歌,所以我们可以看到参数和初始条件。代码也不错。
一般来说,灵敏度分析就是你要做的。执行非维度化也是标准的。查看这些提示并尝试实现它们,以查看少量参数的变化将如何影响您的解决方案。
我建议您查看这些概念,并包含您的代码。您应该自己尝试第一步,然后我很乐意在您明确付出努力后帮助解决任何技术问题。最好的祝愿。