Как решить матричные дифференциальные уравнения в Python? - PullRequest
0 голосов
/ 08 марта 2020

dx/dt = Ax, где A, x принадлежит массиву n x n. Я попытался использовать функции solve_ivp и odeint в scipy.integrate, но оба они работают только с n x 1 массивами.

1 Ответ

1 голос
/ 09 марта 2020

Интеграторы ожидают, что функция ODE использует плоский одномерный массив в качестве переменной состояния и возвращает одинаково плоский производный вектор. Этот входной массив содержит записи матрицы. Чтобы выполнить над ней матричные операции, необходимо построить матрицу из плоского входного массива и в конце обратить вспять матрицу для вывода производной функции

x0 = x0.reshape(-1);         # make data 1-dimensional
def odefun(t,x):
    x=x.reshape([n,n]);      # restore to matrix form
    dx=A.dot(x);             # perform matrix operations
    return dx.reshape(-1);   # return 1-dimensional vector

sol = solve_ivp(odefun, [t0, tf], x0)
...