模拟洛伦兹系统崩溃

Simulation of Lorenz System crashes

我才刚刚开始探索 Gekko 并尝试模拟 Lorenz ODE 系统。 不幸的是,对于使用 scipy.

运行正常的简单标准情况,我收到错误(“未找到解决方案”)

如果我只积分 time=0.5 而不是 1.0,问题就很好解决了

from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt

m = GEKKO()
m.time = np.arange(0.0, 1.0, 0.01)

sigma = 10.; rho   = 28.0; beta  = 8./3.

x = m.Var(value=10); y = m.Var(value=10); z = m.Var(value=10)
t = m.Param(value=m.time)

m.Equation(x.dt()== sigma*(y - x))
m.Equation(y.dt()== x*(rho -z) - y)
m.Equation(z.dt()== x*y - beta*z)
m.options.IMODE = 4
m.options.nodes = 4
m.solve(disp=False)

plt.plot(x.value, y.value)
plt.show()

顺序模拟m.options.IMODE=7求解成功。同时模拟是一个更大的问题(1782 Variables/Equations vs. 18 Variables/Equations)。如果您减少 m.options.NODES=3(1188 个变量)或增加最大迭代次数 m.options.MAX_ITER=300,它也会成功求解。之前它失败了,因为它需要 267 次迭代才能找到解决方案,而 IPOPT 的最大迭代限制默认为 200。

from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt

m = GEKKO()
m.time = np.arange(0.0, 1.0, 0.01)

sigma = 10.; rho   = 28.0; beta  = 8./3.

x = m.Var(value=10); y = m.Var(value=10); z = m.Var(value=10)
t = m.Param(value=m.time)

m.Equation(x.dt()== sigma*(y - x))
m.Equation(y.dt()== x*(rho -z) - y)
m.Equation(z.dt()== x*y - beta*z)
m.options.IMODE = 7
m.options.nodes = 4
m.solve(disp=True)

plt.plot(x.value, y.value)
plt.show()