Я пытаюсь научиться использовать пакет python GEKKO. В качестве первого шага я хотел бы смоделировать простое векторное ОДУ: dx / dt = A * x, где A - матрица, а x - вектор. Все примеры ODE, которые я видел для GEKKO, были для скалярных ODE и пример массива из онлайн документация не показывает, как включить метод .dt () при объявлении уравнения. Я знаю, что при объявлении уравнений можно использовать списки, поэтому я подумал, что это будет подходящим вариантом:
import numpy as np
from gekko import GEKKO
m=GEKKO()
m.time=np.linspace(0.,1.,10)
N=5
A=np.ones([N,N])
x=np.ones(N)
x=m.Var(value=x)
A=m.Param(value=A)
for i in range(N):
for j in range(N):
m.Equation(x[i].dt() += A[i][j] * x[j])
m.options.IMODE=4
m.solve()
но этот код завершится ошибкой по двум причинам: 1) + = не является допустимым сравнением для метода Equation и 2) python жалуется, что x [i] .dt () не является допустимым атрибутом x [i] (который это np.float64). Итак, как мне смоделировать это ODE в GEKKO, если это вообще возможно?