gekko - 在过程模拟期间初始化状态变量的导数
问题描述
使用 GEKKO 模拟过程时(例如,此处的示例 15 ),我将如何设置状态变量的导数的初始值?我使用的是 IMODE=4,但我也可以使用 IMODE=7。
[编辑] 我已经使用 IMODE=5 拟合了带有测量输入和输出的 ODE 模型的参数,我想预测超出测量时间点的模型输出。
解决方案
以下是从同一链接对问题 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 还可以解决更高索引的 DAE,其中索引是必须区分约束以返回 ODE 形式的次数。
推荐阅读
- c# - 如何反序列化对对象列表的 JSON 响应
- java - 在 Java 中使用 Selenium 单击动态下拉 div
- reactjs - REACT 16 中的 React 组件中的错误处理
- android - 如何更改 ViewPager 中特定页面的 textView 的文本?
- python - 如何分配变量以从数组中选择?
- pyspark - 我如何在 jupyter notebook 上的 pyspark 中进行测试
- c# - 仅更改对象的 X 轴比例
- ksqldb - KSQL SERVER & 应用程序并行
- android - Kotlin - 将 ListView 的单击项目复制到剪贴板
- c++ - 试图学习指针,为什么要使用它们而不是 &?