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]])