scipy.linalg.

cholesky#

scipy.linalg.cholesky(a, lower=False, overwrite_a=False, check_finite=True)[источник]#

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

Возвращает разложение Холецкого, \(A = L L^*\) или \(A = U^* U\) эрмитовой положительно-определенной матрицы A.

Документация написана в предположении, что аргументы-массивы имеют указанные «основные» формы. Однако аргументы-массивы этой функции могут иметь дополнительные «пакетные» измерения, добавленные перед основной формой. В этом случае массив обрабатывается как пакет низкоразмерных срезов; см. Пакетные линейные операции подробности.

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

Матрица для разложения

lowerbool, необязательно

Вычислять ли верхний или нижний треугольный фактор Холецкого. При разложении используется только выбранная половина матрицы. По умолчанию - верхний треугольный.

overwrite_abool, необязательно

Перезаписывать ли данные в a (может улучшить производительность).

check_finitebool, необязательно

Проверять ли, что вся входная матрица содержит только конечные числа. Отключение может дать прирост производительности, но может привести к проблемам (сбоям, незавершению), если входные данные содержат бесконечности или NaN.

Возвращает:
c(M, M) ndarray

Верхний или нижний треугольный множитель Холецкого для a.

Вызывает:
LinAlgErrorесли разложение не удалось.

Примечания

Во время проверки конечности (если выбрана), вся матрица a проверяется. Во время разложения, a предполагается симметричной или эрмитовой (в зависимости от случая), и только половина, выбранная опцией lower упоминается. Следовательно, если a асимметрична/неэрмитова, cholesky может всё ещё успешно выполниться, если симметричная/эрмитова матрица, представленная выбранной половиной, положительно определена, но может завершиться неудачей, если элемент в другой половине не является конечным.

Примеры

>>> import numpy as np
>>> from scipy.linalg import cholesky
>>> a = np.array([[1,-2j],[2j,5]])
>>> L = cholesky(a, lower=True)
>>> L
array([[ 1.+0.j,  0.+0.j],
       [ 0.+2.j,  1.+0.j]])
>>> L @ L.T.conj()
array([[ 1.+0.j,  0.-2.j],
       [ 0.+2.j,  5.+0.j]])