Python-使用带有两个方程的odeint

时间:2017-04-27 11:11:33

标签: python scipy odeint

我试图在一段时间(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

我哪里错了?

1 个答案:

答案 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()

plot