Sensitivität Analyse mit SALib
Verfasst: Freitag 22. Januar 2016, 15:23
Hey ich möchte eine Sensitivität analyse durchführen und dazu habe ich das Modul SALib gefunden.
Nun möchte ich dieses nutzen um meine Variablen in den DGL meines Programms auf ihrere Sensitivität zu prüfen.
Soweit habe ich es auch geschafft, doch leider gibt mir python nun als Lösung [nan,nan,nan] aus und keinerlei Fehlermeldung
Es wäre schön wenn mir jmd helfen könnte.
Hier ein Link zur Seite von SALib http://salib.readthedocs.org/en/latest/
Hier ist der CODE:
Nun möchte ich dieses nutzen um meine Variablen in den DGL meines Programms auf ihrere Sensitivität zu prüfen.
Soweit habe ich es auch geschafft, doch leider gibt mir python nun als Lösung [nan,nan,nan] aus und keinerlei Fehlermeldung
Es wäre schön wenn mir jmd helfen könnte.
Hier ein Link zur Seite von SALib http://salib.readthedocs.org/en/latest/
Hier ist der CODE:
Code: Alles auswählen
from SALib.sample import saltelli
from SALib.analyze import sobol
from pylab import *
from scipy.integrate import odeint
Tu=20.
time=600#only time at one point here: 10min
def dTdt(T,t,P):# DGL Sensitiv P to analysis
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=array([Tu,Tu])
def odefunk(values):
dTlist=zeros(len(param_values))#8000=N*(2*num_vars+2) with N=1000 num_vars=3
for i,P in enumerate(values):#loop the odeintfunk with values
Ti=odeint(dTdt,T0,time,args=(P,))
dTlist[i]=Ti[:,0] #odeint creats a array (2,t) but Salib needs a single value
return dTlist
# Define the model inputs
problem = {
'num_vars': 3,
'names': ['P0', 'P1', 'P2'],
'bounds': [[ -10,30],
[ 4, 64],
[ 16,155]]
}
# Generate samples for N=1000 it prints [nan,nan,nan]
param_values = saltelli.sample(problem, 1000, calc_second_order=True)
# Perform analysis
Solve=odefunk(param_values)
Si = sobol.analyze(problem, Solve, print_to_console=False)
# Print the first-order sensitivity indices
print Si['S1']