微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Gekko 中数组变量的总和

如何解决Gekko 中数组变量的总和

我试过这段代码,但似乎有问题。通常打印 (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)

解决方法

使用 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)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。