numpy.linalg.cholesky#

linalg.cholesky(a, /, *, upper=False)[источник]#

Разложение Холецкого.

Возвращает нижнее или верхнее разложение Холецкого, L * L.H или U.H * U, квадратной матрицы a, где L является нижнетреугольной, U является верхнетреугольной, и .H является оператором эрмитового сопряжения (который является обычным транспонированием, если a является вещественным). a должна быть эрмитовой (симметричной, если вещественная) и положительно определённой. Проверка не выполняется для подтверждения того, является ли a является эрмитовой или нет. Кроме того, только нижние или верхние треугольные и диагональные элементы a используются. Только L или U фактически возвращается.

Параметры:
a(…, M, M) array_like

Эрмитова (симметричная, если все элементы вещественные), положительно определённая входная матрица.

upperbool

Если True, результат должен быть верхнетреугольным множителем Холецкого. Если False, результат должен быть нижним треугольным множителем Холецкого. По умолчанию: False.

Возвращает:
L(…, M, M) array_like

Нижний или верхний треугольный множитель Холецкого a. Возвращает объект матрицы, если a является объектом матрицы.

Вызывает:
LinAlgError

Если разложение не удается, например, если a не является положительно-определённой.

Смотрите также

scipy.linalg.cholesky

Похожая функция в SciPy.

scipy.linalg.cholesky_banded

Разложить Холецкого ленточную эрмитову положительно-определенную матрицу.

scipy.linalg.cho_factor

Разложение Холецкого матрицы для использования в scipy.linalg.cho_solve.

Примечания

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

Разложение Холецкого часто используется как быстрый способ решения

\[A \mathbf{x} = \mathbf{b}\]

(когда A является одновременно эрмитовой/симметричной и положительно определенной).

Сначала решаем для \(\mathbf{y}\) в

\[L \mathbf{y} = \mathbf{b},\]

а затем для \(\mathbf{x}\) в

\[L^{H} \mathbf{x} = \mathbf{y}.\]

Примеры

>>> import numpy as np
>>> A = np.array([[1,-2j],[2j,5]])
>>> A
array([[ 1.+0.j, -0.-2.j],
       [ 0.+2.j,  5.+0.j]])
>>> L = np.linalg.cholesky(A)
>>> L
array([[1.+0.j, 0.+0.j],
       [0.+2.j, 1.+0.j]])
>>> np.dot(L, L.T.conj()) # verify that L * L.H = A
array([[1.+0.j, 0.-2.j],
       [0.+2.j, 5.+0.j]])
>>> A = [[1,-2j],[2j,5]] # what happens if A is only array_like?
>>> np.linalg.cholesky(A) # an ndarray object is returned
array([[1.+0.j, 0.+0.j],
       [0.+2.j, 1.+0.j]])
>>> # But a matrix object is returned if A is a matrix object
>>> np.linalg.cholesky(np.matrix(A))
matrix([[ 1.+0.j,  0.+0.j],
        [ 0.+2.j,  1.+0.j]])
>>> # The upper-triangular Cholesky factor can also be obtained.
>>> np.linalg.cholesky(A, upper=True)
array([[1.-0.j, 0.-2.j],
       [0.-0.j, 1.-0.j]])