我试过这段代码,但似乎有问题。通常打印 (z.value) 必须返回一个数字,但在我的情况下它返回一个数组。有人可以帮忙吗
from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
xm = np.array([0,1,2,3,4,5])
ym = np.array([0.1,0.2,0.3,0.5,0.8,2.0])
m = GEKKO()
x = m.Param(value=xm)
a = m.FV()
a.STATUS=1
y = m.CV(value=ym)
y.FSTATUS=1
z = None
m.Equation(y==0.1*m.exp(a*x))
z = m.Intermediate(sum([y[i] for i in range(len(y))]))
m.options.IMODE = 2
m.solve(disp=False)
print(z.value)
print(y.value)
答案 0 :(得分:0)
使用 z=m.vsum(y)
使用 IMODE=2
创建跨数据集变量的总和。
from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
xm = np.array([0,1,2,3,4,5])
ym = np.array([0.1,0.2,0.3,0.5,0.8,2.0])
m = GEKKO()
x = m.Param(value=xm)
a = m.FV()
a.STATUS=1
y = m.CV(value=ym)
y.FSTATUS=1
m.Equation(y==0.1*m.exp(a*x))
z = m.vsum(y)
m.options.IMODE = 2
m.solve(disp=False)
print(z.value)
print(y.value)
您定义 z
的方法会创建初始值 ym
的总和。在 Gekko 中定义模型时,重要的是要意识到模型为每个数据集定义一次。然后 Gekko 采用模型并为每个数据集求解。在解决多个时间点时,这也是相同的方法。尽管为 z
报告了多个值,但只有一个唯一值 (4.3146
)。