首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ODE系统使用中的误差

ODE系统使用中的误差
EN

Stack Overflow用户
提问于 2016-09-20 18:40:39
回答 1查看 205关注 0票数 0

我试图复制以下两张图表,它们是温度和浓度随时间变化的曲线。我已经检查了我的方法和代码一百万次,但似乎在其中找不到错误,但我不能重现这些图表。除了CA和T外,所有的值都是常数,这会不会是一个问题?任何帮助都将不胜感激!

这两个方程式如下:

dCA/dt = q*(CAi - CA)/V - k*CA

dT/dt = w*(Ti - T)/(V_p) + d_HR_k_CA/(p_C) + UA*(Tc - T)/(V_p_C)

守则是:

代码语言:javascript
复制
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

def ODESolve(y, t, q, CAi, V, k0, w, Ti, p, dH_R, C, UA, Tc):

    CA, T = y
    k = k0*np.exp(8750*1/T)
    dydt = [q*(CAi - CA)/V - k*CA, w*(Ti - T)/(V*p) + \
            dH_R*k*CA/(p*C) + UA*(Tc - T)/(V*p*C)]

    return dydt

q = 100
CAi = 1.0
V = 100
p = 1000
C = .239
dH_R = 5*(10**4)
k0 = 7.2*(10**10)
UA = 5*10**4
CA0 = .5
T0 = 350
Ti = T0 
w = p*q 

y0 = [CA0, T0]
t = np.linspace(0, 20, 100)

Tc = 305
sol1 = odeint(ODESolve, y0, t, args = (q, CAi, V, k0, w, Ti, p, dH_R, C, UA, Tc))

Tc = 300
sol2 = odeint(ODESolve, y0, t, args = (q, CAi, V, k0, w, Ti, p, dH_R, C, UA, Tc))

Tc = 290
sol3 = odeint(ODESolve, y0, t, args = (q, CAi, V, k0, w, Ti, p, dH_R, C, UA, Tc))

plt.figure(1)
plt.plot(t, sol1[:,0], label = 'Tc = 305')
plt.plot(t, sol2[:,0], label = 'Tc = 300')
plt.plot(t, sol3[:,0], label = 'Tc = 290')
plt.ylim(ymax = 1, ymin = 0)
plt.title ('CA(t)')
plt.legend(loc = 'best')

plt.figure(2)
plt.plot(t, sol1[:,1], label = 'Tc = 305')
plt.plot(t, sol2[:,1], label = 'Tc = 300')
plt.plot(t, sol3[:,1], label = 'Tc = 290')
plt.ylim(ymax = 450, ymin = 300)
plt.legend(loc = 'best')
plt.title ('T(t)')

plt.show()

下面是这些图表应该产生的结果:

下面是我上面代码的输出:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-20 19:36:27

显然,公式k = k0*np.exp(8750*1/T)中有一个符号错误。如果您将其更改为k = k0*np.exp(-8750*1/T),您将得到与您预期的一样的情节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39601483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档