решение линейной системы уравнений - gekko

Вот простой пример решения системы линейных уравнений и пример использования цикла for для многих уравнений.

import numpy as np
from gekko import GEKKO

m = GEKKO(remote=False)

# Random 3x3
A = np.random.rand(3,3)
# Random 3x1
b = np.random.rand(3)
# Gekko array 3x1
x = m.Array(m.Var,(3))

# solve Ax = b
eqn = np.dot(A,x)
for i in range(3):
   m.Equation(eqn[i]==b[i])
m.solve(disp=False)
X = [x[i].value for i in range(3)]
print(X)
print(b)
print(np.dot(A,X))

с правильным выводом. С результатом X (np.dot (A, X) == b) - правильно!

[[-0.45756768428], [1.0562541773], [0.10058435163]]
[0.64342498 0.34894335 0.5375324 ]
[[0.64342498]
[0.34894335]
[0.5375324 ]]

В последней версии Gekko 0.2rc6 также введена функция axb () для линейного программирования. Это может быть та же проблема, что и эта функция, но я не уверен, как получить правильный результат.

m = GEKKO(remote=False)

# Random 3x3
A = np.random.rand(3,3)
# Random 3x1
b = np.random.rand(3)
# Gekko array 3x1
x = m.Array(m.Var,(3))

# solve Ax = b
m.axb(A,b,x=x)
m.solve(disp=False)
X = [x[i].value for i in range(3)]
print(X)
print(b)
print(np.dot(A,X))

но, кажется, я что-то упустил, потому что выход не является решением ??? С результатом X (np.dot (A, X) == b) - неверно!

[[0.2560342704], [0.7543346092], [-0.084190799732]]
[0.27262652 0.61028723 0.74616952]
[[0.4201021 ]
[0.5206979 ]
[0.39195592]]

person Radovan Omorjan    schedule 22.04.2021    source источник


Ответы (1)


m.axb() в настоящее время имеет ошибку в Gekko v0.2.8. Это исправлено в следующей версии Gekko, или вы можете получить предварительную версию с GitHub: https://github.com/BYU-PRISM/GEKKO/blob/master/gekko/gekko.py с исполняемым файлом APM в папке bin. Исправление доступно в Gekko v1.0.0.

person John Hedengren    schedule 25.04.2021