Python 将参数传递给odeint

Python 将参数传递给odeint,python,odeint,Python,Odeint,为了熟悉python,我目前正在尝试模拟冷凝器。计算得到了预期的结果,但我无法在下面的代码中绘制变量Tg 我收到错误:ValueError:x和y必须具有相同的第一维度,但具有形状(50,)和(1,)。 所以我假设,我目前正试图绘制一个Tg值与50个A值的对比图。为了解决这个问题,我尝试将Tg作为参数传递给odeint,但几乎没有成功。如何将Tg与Tf和TkvsA一起绘制 import numpy as np from scipy.integrate import odeint import m

为了熟悉python,我目前正在尝试模拟冷凝器。计算得到了预期的结果,但我无法在下面的代码中绘制变量
Tg

我收到错误:
ValueError:x和y必须具有相同的第一维度,但具有形状(50,)和(1,)
。 所以我假设,我目前正试图绘制一个
Tg
值与50个
A
值的对比图。为了解决这个问题,我尝试将
Tg
作为参数传递给
odeint
,但几乎没有成功。如何将
Tg
Tf
Tk
vs
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,A,args=(Tg,))

plt.ylim(30, 300)
plt.xlim(0, 1.25)
plt.plot(A,x[:,0])
plt.plot(A,x[:,1])
plt.plot(A,Tg)
plt.xlabel("Fläche / m²")
plt.ylabel("Temperatur / °C")
plt.legend(["Tf","Tk"])