我正在尝试用odeint解决ODE。
我的代码就像这个
from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt
K = 35.94143542
S = 10
M = 30.03
Vr = 58
R = 8.3145
T = 293.15
Q = 0.4998
Vp = 0.000022
Mr = 18
Pvap = 518624.013
Cv = (40000/0.000022)*0.001
Cr = (40000/0.000022)*(1-0.001)
tr = 0.333333333
t = np.arange(0,4+1e-2,1e-2)
def Cair(C, t):
if t <= tr:
dCdt = ((K*S*M*Peq)/(Vr*R*T))-(((K*S)/Vr)+Q)*C
else:
dCdt = -(((K*S)/Vr)+Q)*C
return dCdt
Peq = (Cv*Pvap)/(Cv+Cr*(M/Mr))
C = odeint(Cair, 0 , t)
plt.plot(t, C)
def Cvt(c, t):
dcdt = -((K*S*M)/(Vp*R*T))*(Peq-((C*R*T)/M))
return dcdt
s = (K*S*M)/(Vp*R*T)
p = ((K*S*M)/(K*S*R*T+Vr*R*T*Q))*((Cv*Pvap)/(Cv+(Cr*M/Mr)))
q = ((K*S)/Vr)+Q
init = ((s*p*R*T)/M)*(1+(1/q))
c = odeint(Cvt, init, t)
plt.plot(t, c)
我成功地求解并绘制了第一个方程和图(由t表示的Cas函数(,但我未能求解第二个方程并绘制图(由t表示的c函数(
怎么做?
我知道这个答案不会帮你找到问题,但我需要告诉你,这个代码特别令人困惑!
https://www.python.org/dev/peps/pep-0008/#function-和变量名
函数名称应小写,单词之间用下划线分隔。变量名称遵循相同的约定
所以没有var C和C或T和T,即使它是数学或物理常数并命名!
您不应该使用未传递给函数的变量。我不理解在这个代码示例中使用2个函数的目的,因为它只被调用一次。
此外,函数中var的名称可以与调用函数的名称不同。所以不要纠结于写函数中的每个var是什么,这样更容易理解。
def calculate_distance(speed, time):
return speed*time
s = 30
t = 1
calculate_distance(s, t)
所以说:
# variables
r = 8.3145
t = 293.15
q = 0.4998
...
# list all var you need here
def calculate_dcdt(c, t, tr, k ... q):
if t <= tr:
dcdt = ((k*s*m*peq)/(vr*r*t))-(((k*s)/vr)+q)*c_1
else:
dcdt = -(((k*s)/vr)+q)*c_1
return dcdt
def calculate_cvt(c, t, k, ... peq):
dcdt = -((k*s*m)/(vp*r*t))*(peq-((c_1*r*t)/m))
return dcdt
peq = (vv*pvap)/(cv+cr*(m/mr))
c_1 = odeint(calculate_dcdt, 0 , t)
...