Есть ли инструмент для анализа влияния переменных

Когда вы пишете программу с большим количеством кода, трудно определить, какие значения оказывают большое влияние на ваш конечный результат. В моем случае у меня есть несколько дифференциальных уравнений, которые я решаю с odeint. Потребовалось бы много времени, чтобы выяснить, какие значения оказывают большое влияние на мой результат (скорость). Есть ли в Python инструмент для анализа ваших ценностей или у кого-то есть идеи?

Спасибо за вашу помощь.

[Редактировать]

MathBio: "В общем, анализ чувствительности - это то, что вы будете делать".

@MathBio Сейчас я прочитал несколько блогов о SALib ( Руководство по SALib) и попытался написать "более простую " тестовую программу для решения дифференциальных уравнений. Ниже вы видите мою написанную программу: я получаю сообщение об ошибке:

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 ответ

Вы действительно должны включить свои оды, чтобы мы могли видеть параметры и начальные условия. Код был бы также хорош.

В общем, анализ чувствительности - это то, что вы будете делать. Выполнение безразмера также является стандартным. Посмотрите эти советы и попробуйте реализовать их, чтобы увидеть, как небольшое изменение параметра повлияет на ваше решение.

Я предлагаю вам взглянуть на эти понятия и включить свой код. Вы должны попробовать первые шаги самостоятельно, и тогда я с радостью помогу с чем-нибудь техническим, когда вы явно приложите усилия. С наилучшими пожеланиями.

Другие вопросы по тегам