Интеграторы ожидают, что функция 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)