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)

Вопрос: как это сделать?


person nandhos    schedule 24.07.2014    source источник


Ответы (1)


Посетите страницу документов. Если вы хотите решить несколько систем линейных уравнений, вы можете отправить несколько массивов, но они должны иметь форму (N,M,M). Это будет считаться стеком из N MxM массивов. Цитата со страницы документов ниже,

Некоторые из перечисленных выше подпрограмм линейной алгебры могут вычислять результаты сразу для нескольких матриц, если они объединены в один и тот же массив. Это указано в документации через спецификации входных параметров, такие как: (..., M, M) array_like. Это означает, что если, например, задан входной массив a.shape == (N, M, M), он интерпретируется как «стек» из N матриц, каждая из которых имеет размер M на 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 векторов решений).

person Gabriel    schedule 24.07.2014