在过程模拟期间初始化状态变量的导数
Posted
技术标签:
【中文标题】在过程模拟期间初始化状态变量的导数【英文标题】:Initializing the derivative of a state variable during process simulation 【发布时间】:2021-11-24 20:35:16 【问题描述】:在使用 GEKKO 模拟过程时(例如,如示例 15 here),我将如何设置状态变量的导数的初始值?我使用的是 IMODE=4,但我也可以使用 IMODE=7。
[编辑] 我已使用 IMODE=5 将 ODE 模型的参数与测量的输入和输出拟合,我想预测超出测量时间点的模型输出。
【问题讨论】:
【参考方案1】:这里是对问题 8 的修改,来自同一链接作为一个简单示例。要初始化导数,请创建一个新变量,例如 dydt
,并定义一个等于导数的新方程。
from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
m = GEKKO()
k = 10
m.time = np.linspace(0,20,100)
y = m.Var(value=5)
dydt = m.Var(value=0)
t = m.Param(value=m.time)
m.Equation(k*dydt==-t*y)
m.Equation(dydt==y.dt())
m.options.IMODE=4
m.solve(disp=False)
plt.plot(m.time,y.value,label='y')
plt.plot(m.time,dydt.value,label='dy/dt')
plt.xlabel('time'); plt.ylabel('y')
plt.legend(); plt.grid(); plt.show()
与其他微分代数方程 (DAE) 求解器不同,Gekko 不需要状态和导数的一致初始条件。 Gekko 也可以solve higher-index DAEs,其中索引是必须区分约束以返回 ODE 形式的次数。
【讨论】:
以上是关于在过程模拟期间初始化状态变量的导数的主要内容,如果未能解决你的问题,请参考以下文章