如何解决用python制作通用的热平衡求解器
使用python玩了一段时间(主要是icw coolprop),但是我正在手工做代数/计算部分(将未知数写为显式函数,积分等),然后利用python进行批计算或使用coolprop查找属性。 但是在网上,我看到人们使用sympy等可以解决方程式,但我不知道如何将其用于平衡方程式。
我想制作一个函数hex(),其输入变量为下图所示的变量,但我想获得一个填充某些变量并计算未知数的函数。
所以当我给它这样的东西时:
- Q1 = -300
- Cp1 = 3
- Cp2 = 2
- m1 = 5
- m2 = 3
- T1a = 100
- T2a = 20
它返回:
- T1b = 80
- T2b = 70
简单的 Q = cp m dT 图片,其中 dT = out-in ,如果工程师离开系统,则Q定义为负
def hex():
Cp1,T1a,T1b,m1,Q1 = sp.symbols('Cp1 T1a T1b m1 Q1')
Cp2,T2a,T2b,m2,Q2 = sp.symbols('Cp2 T2a T2b m2 Q2')
Eq1 = sp.Eq(Q1,Cp1*(T1b-T1a)*m1)
Eq2 = sp.Eq(Q2,Cp2*(T2b-T2a)*m2)
Eq3 = sp.Eq(Q1,-Q2)
Eq1.subs(Q1,-300)
Eq1.subs(Cp1,3)
Eq1.subs(T1a,100)
Eq1.subs(m1,5)
Eq2.subs(Cp2,2)
Eq2.subs(T2a,20)
Eq2.subs(m2,3)
Anw = sp.solve((Eq1,Eq2,Eq3),T2b)
print(Anw)
hex()
解决方法
我假设符号上方的点不是导数,因为您将常数作为输入。
您没有联立方程。您只有2个线性方程,因此最好同时解决它们。您还想输入值并获得输出值。因此,您无需制作符号或进行替换。它们只是函数的参数。
from sympy import *
def hex(Q1,Cp1,Cp2,m1,m2,T1a,T2a):
Q2 = -Q1
T1b,T2b = symbols('T1b T2b',real=True)
Eq1 = Eq(Q1,Cp1*(T1b-T1a)*m1)
Eq2 = Eq(Q2,Cp2*(T2b-T2a)*m2)
T1b_solution = solve(Eq1,T1b)[0]
T2b_solution = solve(Eq2,T2b)[0]
print(T1b_solution)
print(T2b_solution)
hex(-300,3,2,5,100,20)
在[0]
之后的solve
得到第一个解决方案。
如果您想要可以在其中输入除两个以外的所有值的内容,则可以执行以下操作:
from sympy import *
def hex(Q1=None,Cp1=None,Cp2=None,m1=None,m2=None,T1a=None,T2a=None,T1b=None,T2b=None):
unknowns = []
if Q1 is None:
Q1 = symbols('Q1',real=True)
unknowns.append(Q1)
if Cp1 is None:
Cp1 = symbols('Cp1',real=True)
unknowns.append(Cp1)
if Cp2 is None:
Cp2 = symbols('Cp2',real=True)
unknowns.append(Cp2)
if m1 is None:
m1 = symbols('m1',real=True)
unknowns.append(m1)
if m2 is None:
m2 = symbols('m2',real=True)
unknowns.append(m2)
if T1a is None:
T1a = symbols('T1a',real=True)
unknowns.append(T1a)
if T2a is None:
T2a = symbols('T2a',real=True)
unknowns.append(T2a)
if T1b is None:
T1b = symbols('T1b',real=True)
unknowns.append(T1b)
if T2b is None:
T2b = symbols('T2b',real=True)
unknowns.append(T2b)
if len(unknowns) > 2:
raise ValueError("There are too many unknowns.")
Q2 = -Q1
Eq1 = Eq(Q1,Cp2*(T2b-T2a)*m2)
solution = solve([Eq1,Eq2],unknowns)
print(solution)
hex(Q1=-300,Cp1=3,Cp2=2,m1=5,m2=3,T1a=100,T2a=20)
一堆if
语句是我不使用Python的eval
函数或列表作为输入时想到的最快方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。