我正在使用 Python GEKKO 来模拟化学反应,可以这样描述:
1 -> 2 -> 3 -> 4
副反应如下:
2 -> 5
3 -> 5
产物(4)是稳定的。这导致了以下一组 ODE(速率方程),具有速率常数 k 和组分 c(i) 的浓度。
m.Equation(c_1p.dt() == -k1*c_1p)
m.Equation(c_2p.dt() == k1*c_1p - (k21 + k22)*c_2p)
m.Equation(c_3p.dt() == k21*c_2p - (k31 + k32)*c_3p)
m.Equation(c_4p.dt() == k31*c_3p)
Run Code Online (Sandbox Code Playgroud)
我在 GEKKO 中实现了这些方程来估计速率常数。我将测量值初始化为参数,将预测值初始化为变量,将速率常数初始化为固定值(有限制)。目标函数是最小二乘法。这工作正常,结果在预期范围内(R2 > 0.99)。
问题是,当我尝试通过使用计算出的速率常数来求解 ODE(使用 GEKKO 或 scipy odeint)来验证这些结果时,我得到了不同的结果(见图 1)。点是测量值,X 标记预测值,虚线表示使用 odeint 使用计算的速率常数计算的曲线。
问题是,这种偏差从何而来?我找不到来源。
谢谢!
from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
m = GEKKO(remote=False) …Run Code Online (Sandbox Code Playgroud)