用python制作通用的热平衡求解器

如何解决用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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?