我试图在一段时间(1800秒)内绘制温度。我有两个初始值问题,其中func2依赖于func1和两个初始值。
以下是两个功能:
rate = dA/dt = -(3.083e8*np.exp(-56000/(8.314*Temp))*A*0.033)
dT/dt = (-0.45*-98000*rate+5.7431*(273.15-Temp))/(2018.94)
其中A是物质的浓度,温度是温度。
我的初始值是:
T[0]=281.15
A[0]=6.529
到目前为止,这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
t = np.linspace(0,1800,100) #timeline
c0 = np.array([281.15,6.529]) #initial values
def df(c, t):
Temp = c[0]
A = c[1]
rate = -(3.083e8*np.exp(-56000/(8.314*Temp))*A*0.033)
dTdt = (-0.45*-98000*rate+5.7431*(273.15-Temp))/(2018.94)
return np.array([dTdt, rate])
sol = odeint(df, c0, t)
plt.plot(t, sol)
它只生成this graph这是错误的。它应该看起来像这个图中的上部曲线:here
我哪里错了?
答案 0 :(得分:0)
显然你在dT / dt的等式中有一个符号错误。当我把它改成
dTdt = (0.45*-98000*rate + 5.7431*(273.15-Temp))/(2018.94)
我得到了你期望的曲线。
这是您的代码的修改版本,以及结果图:
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
t = np.linspace(0, 1800, 901) # timeline
c0 = np.array([281.15, 6.529]) # initial values
def df(c, t):
Temp = c[0]
A = c[1]
rate = -(3.083e8*np.exp(-56000/(8.314*Temp))*A*0.033)
dTdt = (0.45*-98000*rate + 5.7431*(273.15 - Temp))/(2018.94)
return np.array([dTdt, rate])
sol = odeint(df, c0, t)
plt.plot(t, sol[:,0] - 273.15)
plt.xlabel('t (sec)')
plt.ylabel('T (degrees C)')
plt.grid()
plt.show()