如何使用gekko解决ini方程问题?
Posted
技术标签:
【中文标题】如何使用gekko解决ini方程问题?【英文标题】:how to solve ini equation problem using gekko? 【发布时间】:2022-01-18 14:00:33 【问题描述】:如果我想用V1_0表示V1的起始值,V2_0表示V2的起始值,并且有起始方程V2_0-V1_0=5,我应该如何用gekko来表示这个关系?
【问题讨论】:
【参考方案1】:对于这种级别的控制,我建议将动态问题写成数组。如果您有微分方程,则需要包含您自己的 collocation equations。
from gekko import GEKKO
m = GEKKO()
n = 5
V1 = m.Array(m.Var,n)
V2 = m.Array(m.Var,n)
# rename initial conditions
V1_0 = V1[0]; V2_0 = V2[0]
m.Equation(V1_0==3)
m.Equation(V2_0-V1_0==5)
for i in range(1,n):
m.Equation(V1[i]==V1[i-1]+1)
m.Equation(V2[i]==V2[i-1]+0.5)
m.solve(disp=False)
print(V1)
print(V2)
这会产生V1
和V2
的解决方案:
[[3.0] [4.0] [5.0] [6.0] [7.0]]
[[8.0] [8.5] [9.0] [9.5] [10.0]]
如果您使用的是动态模式(IMODE=5
或IMODE=6
),您还可以尝试使用m.Connection()
函数将初始条件与V1_0=m.FV()
和V2_0=m.FV()
与V2_0.STATUS=1
连接起来。然后你可以写公式m.Equation(V2_0-V1_0==5)
。
【讨论】:
以上是关于如何使用gekko解决ini方程问题?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Pulp Gekko和Scipy软件包修复具有不同结果的代码以解决线性优化问题?
在 Gekko 中减少我的方程式大小或在 APMonitor 中增加最大字符串长度