Стандартный ответ на этот вопрос - тот, который Бретт представил,
то есть, используя Thread
.
Тем не менее, я считаю, что для использования в DSolve
, NDSolve
и т. Д. ... команда LogicalExpand
лучше.
eqn = {f'[t], g'[t]} == {{a, b}, {c, d}}.{f[t], g[t]};
LogicalExpand[eqn]
(* f'[t] == a f[t] + b g[t] && g'[t] == c f[t] + d g[t] *)
Он не преобразует векторное уравнение в список, но он более полезен, поскольку он автоматически выравнивает матричные / тензорные уравнения и комбинации векторных уравнений.
Например, если вы хотите добавить начальные условия в приведенное выше дифференциальное уравнение, вы должны использовать
init = {f[0], g[0]} == {f0, g0};
LogicalExpand[eqn && init]
(* f[0] == f0 && g[0] == g0 &&
f'[t] == a f[t] + b g[t] && g'[t] == c f[t] + d g[t] *)
Пример матричного уравнения:
mEqn = Array[a, {2, 2}] == Partition[Range[4], 2];
Использование Thread
здесь неудобно, вам нужно применить его несколько раз и Flatten
результат. Использовать LogicalExpand
просто
LogicalExpand[mEqn]
(* a[1, 1] == 1 && a[1, 2] == 2 && a[2, 1] == 3 && a[2, 2] == 4 *)