问题描述
我目前正在尝试模拟冷凝器,以熟悉python。计算产生了预期的结果,但是我无法在下面的代码中绘制变量Tg
。
我收到错误:ValueError: x and y must have same first dimension,but have shapes (50,) and (1,)
。
因此,我假设当前正在尝试将Tg
的一个值与A
的50个值作图。为了解决这个问题,我尝试将Tg
传递给odeint
作为参数,但是收效甚微。如何在Tg
和Tf
与Tk
旁边绘制A
?
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
# constants
Nk = 0.018
Ng2 = 0.1389
p = 1.5
b = 0.02
ag = 60
k = 25
Hvap = 80000
cpg = 100
cpk = 600
cpf = 600
N0 = 0.158
def cond(x,A,Tg):
# states
Tf = x[0]
Tk = x[1]
Ng = x[2]
Nf = x[3]
Ng1 = x[4]
# equations
Ng = Ng2 + Ng1
y1f = np.exp(153.666 - 19622.441 / (273.15 + Tf) - 17.9729 * np.log(273.15 + Tf)) / 1000 / p
y2f = 1 - y1f
Tg = 1063.388 / (2.8369 - np.log10(Ng1 / Ng * 1.5))
ng = Ng / ((Ng1 * 8.314 * (273.15 + Tg) + (Ng2 * 8.314 * (273.15 + Tg))) / (p * 10 ** 5))
q = k * (Tf-Tk)
y2b = 1 - Ng1 / Ng
phi = ng * b * cpg / ag * np.log(y2f / y2b)
n1 = ng * b * np.log(y2f / y2b)
dTfdA = (ag * phi * (Hvap / cpg + (Tg - Tf) / (1 - np.exp(-phi))) - q) / ((N0-Ng) * cpf)
dTkdA = 0.0 - q / (Nk * cpk)
dNfdA = 0.0 - n1
dNgdA = 0.0 - n1
dNg1dA = 0.0 - n1
return [dTfdA,dTkdA,dNfdA,dNgdA,dNg1dA]
### initial cond. ###
A = np.linspace(0,1.5)
x0 = [295,270,0.158,0.000000001,0.019]
x = odeint(cond,x0,args=(Tg,))
plt.ylim(30,300)
plt.xlim(0,1.25)
plt.plot(A,x[:,0])
plt.plot(A,1])
plt.plot(A,Tg)
plt.xlabel("Fläche / m²")
plt.ylabel("Temperatur / °C")
plt.legend(["Tf","Tk"])
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)