在过程模拟期间初始化状态变量的导数

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 形式的次数。

【讨论】:

以上是关于在过程模拟期间初始化状态变量的导数的主要内容,如果未能解决你的问题,请参考以下文章

Python数模笔记-模拟退火算法多变量函数优化

控制工程数学模型

为啥通过 python 默认变量初始化变量会在对象实例化过程中保持状态?

深度学习的优化算法

模拟退火模型

在 Flex 中的组件初始化期间设置变量