【问题标题】:Is there any Tool for analyzing the Influence of variable是否有任何工具可以分析变量的影响
【发布时间】:2016-04-25 05:55:50
【问题描述】:

当您编写包含大量代码的程序时,很难找出哪些值对您的最终结果有很大影响。 就我而言,我有一些用 odeint 求解的微分方程。 找出哪些值对我的结果(速度)有很大影响需要很多时间。 python中是否有任何工具可以分析您的价值观或有人知道吗?

感谢您的帮助。

[编辑]

MathBio:“一般来说,你会做敏感性分析。”

@MathBio 我现在阅读了一些关于 SALib 的博客(SALib Guide)并尝试编写一个“更简单”的测试程序来求解微分方程。 下面你看我写的程序: 我收到错误消息:

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']

【问题讨论】:

    标签: python variables analysis differential-equations odeint


    【解决方案1】:

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

    一般来说,您会做敏感性分析。执行非维度化也是标准的。查看这些提示并尝试实施它们,以了解少量更改参数将如何影响您的解决方案。

    我建议您查找这些概念,并包含您的代码。您应该自己尝试第一步,一旦您明确做出努力,我很乐意为您提供任何技术方面的帮助。最良好的祝愿。

    【讨论】:

    • 谢谢。我试着用SALib写一个程序。代码在上面
    • 嘿 sqwertz,我不熟悉包 SALib,但我可以从您的代码中大致推断出它的作用。似乎在 dTdt 和 Odefunk 中,您正在传递一个数组 P 或引用它的值,例如P[0]。我感到困惑的是如何将带有 P0、P1、P2 的数组传递给 param_values,然后传递给参数生成器;您的代码是否知道如何将 P 与样本中的数组“名称”相关联?很抱歉没有阅读您提供的参考资料,我只是想确保“名称”中的条目与您的参数数组 P 相关联。
    猜你喜欢
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    相关资源
    最近更新 更多