模拟洛伦兹系统崩溃
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()
我才刚刚开始探索 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()