numpy.linalg.solve

numpy.linalg.solve(a, b)

Функция numpy.linalg.solve() решает линейное матричное уравнение (систему линейных уравнений).

Данная функция вычисляет значение неизвестных только для квадратных, невырожденных матриц с полным рангом, т.е. только если матрица A размером {m, m} имеет ранг равный m. Если хотя бы одно из этих условий не выполняется, то возвращается ошибка LinAlgError.

Система линейных уравнений может быть записана в матричной форме:

$$ \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\a_{21} & a_{22} & \cdots & a_{2n} \\\vdots & \vdots & \ddots & \vdots \\a_{m1} & a_{m2} & \cdots & a_{mn} \end{pmatrix}\begin{pmatrix}x_1 \\x_2 \\\vdots \\x_n\end{pmatrix} =\begin{pmatrix}b_1 \\b_2 \\\vdots \\b_m\end{pmatrix} $$

Или в более короткой форме \(Ax=b\), где A - это матрица коэфициентов (матрица системы), x - столбец неизвестных, b - столбец свободных членов.

Параметры:
a - массив NumPy или подобнй массиву объект.
Матрица коэфициентов - квадратный массив или многомерный массив у которого две последние оси равны.
b - массив NumPy или подобнй массиву объект.
Столбец свободных членов - одномерный массив длина которого совпадает с длиной a. Это может быть многомерный массив, но в этом случае его последняя или предпоследняя ось должна быть равна последней оси массива a.
Возвращает:
x - массив NumPy.
Решение матричного уравнения (системы уравнений) \(Ax=b\). Форма возвращаемого массива зависит от формы массивов a и b.
Смотрите так же:
linalg.lstsq, dot

Примеры

Решим систему уравнений

$$\left\{\begin{matrix}x_0 + 2x_1 - 3x_2 = 4\\ 2x_0 + x_1 + 2x_2 = 3\\ 3x_0 -2x_1-x_2 = 9\end{matrix}\right.$$

>>> import numpy as np
>>> from numpy import linalg as LA
>>> 
>>> a = [[1, 2, -3],
         [2, 1, 2],
         [3, -2, -1]]
>>> 
>>> b = [4, 3, 9]
>>> 
>>> x = LA.solve(a, b)
>>> x
array([ 2.475, -0.4  , -0.775])

Выполним проверку, умножим матрицу коэфициентов на полученный столбец решений. Данное произведение должно оказаться равно столбцу b:

>>> np.dot(a, x)
array([4., 3., 9.])

Мы можем решать несколько систем одновременно. Допустим у нас есть несколько систем уравнений:

$$\left\{\begin{matrix}x_0 & + & 3x_1 & = & 7\\ 2x_0 & - & 5x_1 & = & -2\end{matrix}\right.$$

$$\left\{\begin{matrix}2x_0 & + & x_1 & = & 5\\ 5x_0 & - & 2x_1 & = & -1\end{matrix}\right.$$

$$\left\{\begin{matrix}4x_0 & - & 3x_1 & = & 1\\ 2x_0 & + & x_1 & = & 2\end{matrix}\right.$$

>>> a = np.array([[[1, 3], [2, -5]],
...               [[2, 1], [5, -2]],
...               [[4, -3], [2, 1]]])
>>> 
>>> a.shape
(3, 2, 2)
>>> 
>>> b = np.array([[7, -2],
...               [5, -1],
...               [1, 2]])
>>> 
>>> b.shape
(3, 2)
>>> 
>>> 
>>> np.dot(a[0], x[0])
array([ 7., -2.])
>>> np.dot(a[1], x[1])
array([ 5., -1.])
>>> np.dot(a[2], x[2])
array([1., 2.])