GEKKO过程模拟中状态变量导数初始值设置及IMODE模式应用问询
GEKKO动态预测下状态变量导数初始值设置方法
该方案适用于已通过IMODE=5完成ODE模型参数拟合,需要在IMODE=4(同步动态模拟)或IMODE=7(顺序动态模拟)模式下完成实测范围外的输出预测,同时指定状态变量导数初始值的场景。
- 第一步先固定拟合完成的参数:将参数估计阶段得到的所有待优化参数的
FIXED属性设置为True,避免预测求解阶段参数被修改,示例代码:your_param.FIXED = True,将your_param替换为你自定义的参数变量名即可。 - 第二步设置初始值:先给状态变量的初始时刻(
m.time第一个时间点)赋值,再显式指定该时刻下状态变量导数的取值,示例代码如下:
# x为自定义状态变量,需替换为实际变量名 # 设置状态变量初始值 x.value[0] = 你的状态变量初始值 # 设置对应导数的初始值 x.dt().value[0] = 你需要的导数初始值
- 第三步配置预测时间序列:在原有实测时间序列的基础上,追加需要外推预测的时间节点,赋值给
m.time,原有实测最后一个时间点会作为预测的起始锚点。 - 第四步执行求解:根据你的需求选择
IMODE模式,启动求解即可,示例代码:
# 同步动态模拟用IMODE=4,顺序求解用IMODE=7 m.options.IMODE = 4 m.solve(disp=False)
注意:若你设置的状态变量初始值和导数初始值存在代数约束关联,请先保证两者符合约束逻辑,否则求解器会返回初始条件不可行的报错。
内容的提问来源于stack exchange,提问作者ajkswamy
相关产品推荐
相关产品推荐

