在gekko中求解方程
Solving an Equation in gekko
这是我的代码的一部分:
import gekko as GEKKO
for i in range(0,4,1):
m = GEKKO()
x = m.Var()
e_i1 = R_n[0,0] * A_slice[i,0] + R_n[1, 0] * A_slice[i, 1]
e_i2 = R_n[0, 1] * A_slice[i, 1] + R_n[1, 1] * A_slice[i, 1]
r = get_determinante(R_n)
d = P[0,i]
m.Equation(e_i1*R_n[0,1]*x + e_i1*R_n[1,1]*A_slice[i,4] - e_i2*R_n[0,0]*x + e_i2*R_n[1,0]*A_slice[i,4] == r * d)
m.solve()
print(x)
但是它没有打印 x。
有什么原因吗?
尝试将 x
的值打印为:
print(x.value)
变量 x
是 Gekko 变量类型,结果作为 numpy 数组加载到 x.value
中。要访问该值,您可以打印 x.value
或 x.value[0]
以仅获取数组的第一个元素。
您正在为每个循环创建一个新的 Gekko 模型、变量和方程。您还可以使用 x=m.Array(m.Var,4)
声明一个 x
值数组,并在没有循环的情况下同时求解所有方程和变量。这可能有助于加快您的代码。如果这样做,则需要将 x
的每个值打印为:
print([x[i].value[0] for i in range(4)])
这是一个包含数组函数的独立示例:
from gekko import GEKKO
m = GEKKO()
# variable array dimension
n = 3 # rows
p = 2 # columns
# create array
x = m.Array(m.Var,(n,p))
for i in range(n):
for j in range(p):
x[i,j].value = 2.0
x[i,j].lower = -10.0
x[i,j].upper = 10.0
# create parameter
y = m.Param(value = 1.0)
# sum columns
z = [None]*p
for j in range(p):
z[j] = m.Intermediate(sum([x[i,j] for i in range(n)]))
# objective
m.Obj(sum([z[j]**2 + y for j in range(p)]))
# minimize objective
m.solve()
print(x)
这是我的代码的一部分:
import gekko as GEKKO
for i in range(0,4,1):
m = GEKKO()
x = m.Var()
e_i1 = R_n[0,0] * A_slice[i,0] + R_n[1, 0] * A_slice[i, 1]
e_i2 = R_n[0, 1] * A_slice[i, 1] + R_n[1, 1] * A_slice[i, 1]
r = get_determinante(R_n)
d = P[0,i]
m.Equation(e_i1*R_n[0,1]*x + e_i1*R_n[1,1]*A_slice[i,4] - e_i2*R_n[0,0]*x + e_i2*R_n[1,0]*A_slice[i,4] == r * d)
m.solve()
print(x)
但是它没有打印 x。
有什么原因吗?
尝试将 x
的值打印为:
print(x.value)
变量 x
是 Gekko 变量类型,结果作为 numpy 数组加载到 x.value
中。要访问该值,您可以打印 x.value
或 x.value[0]
以仅获取数组的第一个元素。
您正在为每个循环创建一个新的 Gekko 模型、变量和方程。您还可以使用 x=m.Array(m.Var,4)
声明一个 x
值数组,并在没有循环的情况下同时求解所有方程和变量。这可能有助于加快您的代码。如果这样做,则需要将 x
的每个值打印为:
print([x[i].value[0] for i in range(4)])
这是一个包含数组函数的独立示例:
from gekko import GEKKO
m = GEKKO()
# variable array dimension
n = 3 # rows
p = 2 # columns
# create array
x = m.Array(m.Var,(n,p))
for i in range(n):
for j in range(p):
x[i,j].value = 2.0
x[i,j].lower = -10.0
x[i,j].upper = 10.0
# create parameter
y = m.Param(value = 1.0)
# sum columns
z = [None]*p
for j in range(p):
z[j] = m.Intermediate(sum([x[i,j] for i in range(n)]))
# objective
m.Obj(sum([z[j]**2 + y for j in range(p)]))
# minimize objective
m.solve()
print(x)