繁体   English   中英

我如何 model GEKKO 中的一个不随时间而随体积变化的微分方程?

[英]How do I model a differential equation in GEKKO that doesn't change with time but with Volume?

我知道正常的方法。 例如...

m.Equation(x.dt() == v)

但是对于像 PFR 这样的东西呢? 假设稳定 state 但流速取决于反应器的体积(或长度)。 如果我还想优化 model 中的某些内容,我觉得 IMODE = 3 是最好的。 我会认为它看起来像这样。

m.Equation(Fa.dVr() == -ra)

有什么帮助吗? 我只是将 dt() 视为 dVr() 吗? 并将 m.time 声明为 Volume 数组? 它是否被认为是一个依赖于体积的动态系统?

我刚刚测试了这个。 下面的结果与我在 odeint 中的结果相同

from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint



k = .00384
Keq = 4
KB = .46
KW = 3.20
Ca_0 = 1.5
Cb_0 = 1.5
Cc_0 = 0
Cd_0 = 0
Fa_0 = 1 # mol/h
v = Fa_0/Ca_0
Fb_0 = Cb_0*v
Fc_0 = 0
Fd_0 = 0

m = GEKKO()
m.time = np.linspace(0, 4000, 1000)

Fa = m.Var(Fa_0)
Fb = m.Var(Fb_0)
Fc = m.Var(Fc_0)
Fd = m.Var(Fd_0)

Ca = m.Intermediate(Fa/v)
Cb = m.Intermediate(Fb/v)
Cc = m.Intermediate(Fc/v)
Cd = m.Intermediate(Fd/v)

r = m.Intermediate(k*(Ca*Cb - Cc*Cd/Keq)/\
                  ( 1 + KB*Cb + KW*Cd))

m.Equation(Fa.dt() == -r)
m.Equation(Fb.dt() == -r)
m.Equation(Fc.dt() ==  r)
m.Equation(Fd.dt() ==  r)

m.options.IMODE = 4
m.solve(disp=False)

plt.plot(m.time, Fa.value, label='Fa')
plt.plot(m.time, Fb.value, label='Fb')
plt.plot(m.time, Fc.value, label='Fc')
plt.plot(m.time, Fd.value, label='Fd')
from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint



k = .00384
Keq = 4
KB = .46
KW = 3.20
Ca_0 = 1.5
Cb_0 = 1.5
Cc_0 = 0
Cd_0 = 0
Fa_0 = 1 # mol/h
v = Fa_0/Ca_0
Fb_0 = Cb_0*v
Fc_0 = 0
Fd_0 = 0

def f(F, W):
    Fa, Fb, Fc, Fd = F
    Ca, Cb, Cc, Cd = Fa/v, Fb/v, Fc/v, Fd/v
    r = k*(Ca*Cb - Cc*Cd/Keq)/( 1 + KB*Cb + KW*Cd)
    
    return -r, -r, r, r
W = np.linspace(0, 4000, 1000)
Fa1, Fb1, Fc1, Fd1 = odeint(f, [Fa_0, Fb_0, Fc_0, Fd_0], W).T

plt.plot(W, Fa1, label='Fa')
plt.plot(W, Fb1, label='Fb')
plt.plot(W, Fc1, label='Fc')
plt.plot(W, Fd1, label='Fd')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM