Spec-Zone.ru › NumPy 2.0

numpy.linalg.inv

linalg.inv(a)[source]

Вычислить обратную матрицу.

Дана квадратная матрица a, вернуть матрицу ainv удовлетворяющую a @ ainv = ainv @ a = eye(a.shape[0]).

Parameters:
a(…, M, M) array_like

Матрица, которую нужно обратить.

Returns:
ainv(…, M, M) ndarray or matrix

Обратная матрица матрицы a.

Raises:
LinAlgError

Если a не является квадратной или обращение не удается.

См. также

scipy.linalg.inv

Аналогичная функция в SciPy.

numpy.linalg.cond

Вычислить число обусловленности матрицы.

numpy.linalg.svd

Вычислить сингулярное разложение матрицы.

Примечания

В версии 1.8.0.

Применяются правила широковещательной передачи, см. документацию numpy.linalg для подробностей.

Если a определяется как сингулярная, генерируется LinAlgError. Если a плохо обусловлена, может или не может быть сгенерирована LinAlgError, и результаты могут быть неточными из-за ошибок с плавающей точкой.

Ссылки

[1]

Википедия, “Число обусловленности”, https://en.wikipedia.org/wiki/Condition_number

Примеры

>>> from numpy.linalg import inv
>>> a = np.array([[1., 2.], [3., 4.]])
>>> ainv = inv(a)
>>> np.allclose(a @ ainv, np.eye(2))
True
>>> np.allclose(ainv @ a, np.eye(2))
True

Если a — объект матрицы, то возвращаемое значение также является матрицей:

>>> ainv = inv(np.matrix(a))
>>> ainv
matrix([[-2. ,  1. ],
        [ 1.5, -0.5]])

Обратные значения нескольких матриц могут быть вычислены одновременно:

>>> a = np.array([[[1., 2.], [3., 4.]], [[1, 3], [3, 5]]])
>>> inv(a)
array([[[-2.  ,  1.  ],
        [ 1.5 , -0.5 ]],
       [[-1.25,  0.75],
        [ 0.75, -0.25]]])

Если матрица близка к сингулярной, вычисленная обратная матрица может не удовлетворять a @ ainv = ainv @ a = eye(a.shape[0]) даже если LinAlgError не генерируется:

>>> a = np.array([[2,4,6],[2,0,2],[6,8,14]])
>>> inv(a)  # No errors raised
array([[-1.12589991e+15, -5.62949953e+14,  5.62949953e+14],
   [-1.12589991e+15, -5.62949953e+14,  5.62949953e+14],
   [ 1.12589991e+15,  5.62949953e+14, -5.62949953e+14]])
>>> a @ inv(a)
array([[ 0.   , -0.5  ,  0.   ],  # may vary
       [-0.5  ,  0.625,  0.25 ],
       [ 0.   ,  0.   ,  1.   ]])

Для обнаружения плохо обусловленных матриц можно использовать numpy.linalg.cond для вычисления ее числа обусловленности [1]. Чем больше число обусловленности, тем хуже обусловлена матрица. Как правило, если число обусловленности cond(a) = 10**k, то вы можете потерять до k знаков точности в дополнение к тому, что потеряно численным методом из-за потери точности от арифметических методов.

>>> from numpy.linalg import cond
>>> cond(a)
np.float64(8.659885634118668e+17)  # may vary

Также можно обнаружить плохое обусловленность, проверив сингулярные значения матрицы напрямую. Отношение между наибольшим и наименьшим сингулярным значением — число обусловленности:

>>> from numpy.linalg import svd
>>> sigma = svd(a, compute_uv=False)  # Do not compute singular vectors
>>> sigma.max()/sigma.min()
8.659885634118668e+17  # may vary

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.linalg.inv.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API