Python: Решение системы уравнений (коэффициенты - это массивы)
Я могу решить системное уравнение (используя NumPY) следующим образом:
>>> a = np.array([[3,1], [1,2]])
>>> b = np.array([9,8])
>>> y = np.linalg.solve(a, b)
>>> y
array([ 2., 3.])
Но, если я получил что-то вроде этого:
>>> x = np.linspace(1,10)
>>> a = np.array([[3*x,1-x], [1/x,2]])
>>> b = np.array([x**2,8*x])
>>> y = np.linalg.solve(a, b)
Это не работает, где коэффициенты матрицы являются массивами, и я хочу вычислить решение массива "y" для каждого элемента массива "x". Кроме того, я не могу рассчитать
>>> det(a)
Вопрос в том, как это сделать?
1 ответ
Проверьте страницу документов. Если вы хотите решить несколько систем линейных уравнений, вы можете отправить в нескольких массивах, но они должны иметь форму (N,M,M)
, Это будет считаться стопкой N
MxM
массивы. Цитата со страницы документации ниже,
Некоторые из перечисленных выше подпрограмм линейной алгебры способны вычислять результаты для нескольких матриц одновременно, если они объединены в один массив. Это указано в документации через спецификации входных параметров, такие как: (..., M, M) array_like. Это означает, что, например, если задан входной массив a.shape == (N, M, M), он интерпретируется как "стек" из N матриц, каждая из которых имеет размер M-by-M. Аналогичная спецификация применяется к возвращаемым значениям, например, определитель имеет det: (...) и в этом случае будет возвращать массив формы det(a).shape == (N,). Это обобщает операции линейной алгебры над многомерными массивами: последние 1 или 2 измерения многомерного массива интерпретируются как векторы или матрицы, в зависимости от ситуации для каждой операции.
Когда я запускаю твой код, я получаю,
>>> a.shape
(2, 2)
>>> b.shape
(2, 50)
Не знаю точно, какую проблему вы пытаетесь решить, но вам нужно переосмыслить свои данные. Ты хочешь a
иметь форму (N,M,M)
а также b
иметь форму (N,M)
, Затем вы получите массив формы (N,M)
(т.е. N
векторы решения).