2017-11-29 2 views
2

열역학 실험실의 결과를 처리하기 위해 Python (3)을 사용하려고합니다. 그 중 가장 적합한 곡선을 찾고, 지수를 추측해야합니다. SymPy를 사용하여이를 해결하고 내 데이터를 실행 한 후 평균을 구합니다 (상수이어야 함).SymPy 해결 방정식을 함수로 바꾸는 데 문제가 있습니다.

나만 붙어 있습니다. 심피 (SymPy)는 방정식을 훌륭하게 해결하지만, 솔루션을 유용한 형태로 바꾸는 것은 저를 뒤 흔드는 것입니다. SymPy에서 심볼릭이 아닌 다른 것으로 되돌릴 수있는 방법이 있습니까? 이것은 지금까지 시도한 것입니다 :

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 

그러나 인쇄 된 tao 값은 0이 아닙니다. 유형 (eq)은 tao '< _ast.Module 객체 (0x10773b3c8>)'를 제공합니다. 내가 이걸로 할 수있는 것이 있습니까? 그렇지 않다면 SymPy에서 해결 된 방정식을 사용할 수있는 방법이 있습니까?

귀하의 도움에 감사드립니다.

답변

2

솔루션을 평가하는 것이 더 쉬울 수 있습니다. 예를 들어, t=0에서 솔루션을 평가하려면 subs 메서드를 사용하십시오. 당신이 네 가지 변수에 대한 솔루션을 평가해야하는 경우

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

단순히 sub를 반복합니다.

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

당신이 사전 d에 네 개의 변수 값이 일어날 경우이 양식을 사용할 수 있습니다

soln.subs(d) 
+0

감사합니다. 나는 당신이 사전과 반복을 제안했다 .Subs(). 첫 번째는 'Dict'에 attibute 'Subs'가 없다는 것을 알리고 두 번째 시도는 다음과 같습니다. AttributeError : 'Mul'객체에 'Subs'속성이 없습니다. –

+1

대문자 'Subs'를 사용하지 않았 으면합니다. 그렇지 않은 경우 전체 코드를 표시하십시오. –

+0

나는 그랬다! 문제가 해결되어 잘 작동합니다. 고맙습니다! –

관련 문제