无法将 SymPy 求解的方程解转化为函数
Trouble making a SymPy Solved Equation Solution into a Function
我正在尝试使用 Python (3) 来处理热力学实验室的结果。其中一部分涉及找到最佳拟合曲线,并猜测我需要的指数我正在使用 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(这不应该)。 Type(eq) 给出 tao '<_ast.Module object at 0x10773b3c8>'。有什么我可以做的吗?如果没有,有没有办法可以使用 SymPy 中求解的方程式?
感谢您的帮助。
按原样评估解决方案可能更容易。例如,要评估 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)
我正在尝试使用 Python (3) 来处理热力学实验室的结果。其中一部分涉及找到最佳拟合曲线,并猜测我需要的指数我正在使用 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(这不应该)。 Type(eq) 给出 tao '<_ast.Module object at 0x10773b3c8>'。有什么我可以做的吗?如果没有,有没有办法可以使用 SymPy 中求解的方程式?
感谢您的帮助。
按原样评估解决方案可能更容易。例如,要评估 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)