有没有任何工具可以分析变量的影响

时间:2016-01-19 16:41:10

标签: python variables analysis differential-equations odeint

当您编写包含大量代码的程序时,很难找出哪些值对您的最终结果有很大影响。 在我的情况下,我有一些微分方程式,我用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']

1 个答案:

答案 0 :(得分:1)

你真的应该包括你的颂歌,所以我们可以看到参数和初始条件。代码也不错。

一般来说,灵敏度分析就是你要做的。执行非维度化也是标准的。查看这些提示并尝试实现它们,以查看少量参数的变化将如何影响您的解决方案。

我建议您查看这些概念,并包含您的代码。您应该自己尝试第一步,然后我很乐意在您明确付出努力后帮助解决任何技术问题。最好的祝愿。