Вы можете ввести уравнение в виде строки (как seqn
). Вы можете преобразовать строку в выражение с помощью функции eval()
. Это вычисляет выражение, как если бы оно было в коде.
from gekko import GEKKO
seqn = '3*x+5==4*x' # input as string
m = GEKKO(remote=False)
x = m.Var()
m.Obj(x**2)
m.Equation(eval(seqn))
m.solve(disp=False)
print(x.value)
Если форма уравнения всегда одинакова, вы можете добавить входные параметры, такие как p=m.Param()
, а затем установить p.value=6
. Это вставит другое число в ваше уравнение, например 3*x+p==(p-1)*x
, когда вам нужно решить одно и то же уравнение несколько раз, но с разными входами.
from gekko import GEKKO
m = GEKKO(remote=False)
x = m.Var()
p = m.Param(5)
m.Obj(x**2)
m.Equation(3*x+p==(p-1)*x)
m.solve(disp=False)
print('Solution with p=5: ' + str(x.value))
p.value=6
m.solve(disp=False)
print('Solution with p=6: ' + str(x.value))
Вы также можете добавить вход в виде числа с плавающей запятой или int как p=6
, но это работает только для установки значения один раз, потому что gekko
записывает файл модели с этой константой. Вы можете увидеть файл модели gk_model0.apm
, открыв папку запуска с помощью m.open_folder()
.
Model
Variables
v1 = 0
End Variables
Equations
(((3)*(v1))+5)=((4)*(v1))
minimize ((v1)^(2))
End Equations
End Model
Этот файл модели APMonitor компилируется в байт-код каждый раз, когда появляется команда solve
. Опытные пользователи могут добавлять строки в этот файл с помощью m.Raw()
, но я не рекомендую его, если нет хорошего понимания внутренних методов APMonitor.