2017-11-29 1 views
2

Ich versuche Python (3) zu verwenden, um die Ergebnisse eines Thermodynamiklabors zu verarbeiten. Dazu gehört es, eine Kurve zu finden, die am besten passt, und den benötigten Exponenten zu erraten. Ich benutze SymPy, um danach zu suchen, und dann den Durchschnitt zu finden, nachdem ich meine Daten durchlaufen habe (Es sollte eine Konstante sein).Fehler beim Erstellen einer SymPy Lösung in einer Funktion

Nur ich stecke fest. SymPy löst die Gleichung ganz gut, aber die Lösung in eine brauchbare Form zu bringen, überfordert mich. Gibt es eine Möglichkeit, SymPy als etwas anderes als symbolisch zurückzubekommen? Dies ist, was ich bisher versucht:

def Solve_Tao(Td,TC,t): 
"""Solves for Decay Constant and Returns Average For Data""" 
T = t # Time, Storing so it doesn't become symbolic 
Tao, t, Tinf, Tsi, Ts_t = sp.symbols('Tao t Tinf Tsi Ts_t') 
sp.init_printing(use_unicode=False) 
TaoStrings = sp.solve([(Tinf + (Tsi - Tinf) * sp.exp(-t/Tao))-Ts_t], [Tao]) 
TaoStrings = sp.sstrrepr(TaoStrings) 
TaoS = TaoStrings[6:9] + 'np.'+ TaoStrings[9:-1] 
eq = parse(TaoS) 

Tinf = Td 
Ts_t = TC 
Tsi = TC[0] 
t = T 
tao = eq 
print('tao',tao) 
return tao 

Aber gedruckt tao Wert stellt sich heraus, 0 zu sein (was es nicht soll). Typ (eq) gibt tao '< _ast.Module Objekt bei 0x10773b3c8>'. Kann ich damit etwas anfangen? Wenn nicht, gibt es eine Möglichkeit, die gelöste Gleichung aus SymPy zu verwenden?

Ihre Hilfe wird geschätzt.

Antwort

2

Es könnte einfacher sein, die Lösung so zu bewerten, wie sie ist. Um beispielsweise die Lösung bei t=0 zu bewerten, verwenden Sie die subs Methode.

>>> soln = sp.solve([(Tinf + (Tsi - Tinf) * sp.exp(-t/Tao))-Ts_t], [Tao])[Tao] 
>>> soln 
-t/log((Tinf - Ts_t)/(Tinf - Tsi)) 
>>> soln.subs(t,0) 
0 

Wenn Sie die Lösung für alle vier Variablen bewerten müssen einfach sub wiederholen.

soln.subs(t,0).subs(Tinf,<something>).subs(Ts_t,<something>).subs(Tsi,<something>) 

Wenn Sie alle vier Variablenwerte in einem Wörterbuch haben, passieren d dann können Sie dieses Formular verwenden:

soln.subs(d) 
+0

Dank. Ich habe versucht, was Sie vorgeschlagen haben, sowohl mit dem Wörterbuch und wiederholten .Subs(). Der erste sagt mir, dass 'Dict' keine 'Subs' hat und wenn ich den zweiten versuche, bekomme ich: AttributeError: 'Mul' Objekt hat kein Attribut 'Subs' –

+1

Ich hoffe, du hast keine Großbuchstaben 'Subs' benutzt. Wenn nicht, zeigen Sie bitte Ihren gesamten Code an. –

+0

habe ich! Problem gelöst und es funktioniert super. Vielen Dank! –

Verwandte Themen