scipy.linalg.

ldl#

scipy.linalg.ldl(A, lower=True, эрмитов=True, overwrite_a=False, check_finite=True)[источник]#

Вычисляет факторизацию LDLt или Банча-Кауфмана симметричной/эрмитовой матрицы.

Эта функция возвращает блочно-диагональную матрицу D, состоящую из блоков размером не более 2x2, а также возможно переставленную единичную нижнюю треугольную матрицу L такое, что факторизация A = L D L^H или A = L D L^T выполняется. Если lower если False, то (снова возможно переставленные) верхние треугольные матрицы возвращаются как внешние множители.

Массив перестановок может использоваться для триангуляризации внешних факторов простой перестановкой строк, т.е., lu[perm, :] является верхней/нижней треугольной матрицей. Это также эквивалентно умножению на матрицу перестановки P.dot(lu), где P является перестановочной по столбцам единичной матрицей I[:, perm].

В зависимости от значения булевой lower, только верхняя или нижняя треугольная часть входного массива используется. Следовательно, треугольная матрица на входе даст тот же результат, как если бы была передана полная матрица.

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

Параметры:
Aarray_like

Квадратный входной массив

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

Это переключает между нижними и верхними треугольными внешними факторами разложения. Нижний треугольный (lower=True) является значением по умолчанию.

эрмитовbool, необязательно

Для комплекснозначных массивов это определяет, является ли A = A.conj().T или A = A.T предполагается. Для вещественных массивов этот переключатель не имеет эффекта.

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

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

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

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

Возвращает:
lundarray

(Возможно) переставленный верхний/нижний треугольный внешний множитель факторизации.

dndarray

Блочный диагональный множитель факторизации.

permndarray

Массив индексов перестановки строк, приводящий lu к треугольному виду.

Вызывает:
ValueError

Если входной массив не квадратный.

ComplexWarning

Если задан комплексный массив с ненулевыми мнимыми частями на диагонали и установлен hermitian=True.

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

cholesky, lu

Примечания

Эта функция использует ?SYTRF подпрограммы для симметричных матриц и ?HETRF подпрограммы для эрмитовых матриц из LAPACK. См. [1] для подробностей алгоритма.

В зависимости от lower значение ключевого слова, только нижняя или верхняя треугольная часть входного массива используется. Более того, это ключевое слово также определяет структуру внешних факторов разложения.

Добавлено в версии 1.1.0.

Ссылки

[1]

J.R. Bunch, L. Kaufman, Некоторые устойчивые методы вычисления инерции и решения симметричных линейных систем, Math. Comput. Vol.31, 1977. DOI:10.2307/2005787

Примеры

Для верхней треугольной матрицы a который представляет полный симметричный массив с его элементами, получить l, 'd' и вектор перестановки perm:

>>> import numpy as np
>>> from scipy.linalg import ldl
>>> a = np.array([[2, -1, 3], [0, 2, 0], [0, 0, 1]])
>>> lu, d, perm = ldl(a, lower=0) # Use the upper part
>>> lu
array([[ 0. ,  0. ,  1. ],
       [ 0. ,  1. , -0.5],
       [ 1. ,  1. ,  1.5]])
>>> d
array([[-5. ,  0. ,  0. ],
       [ 0. ,  1.5,  0. ],
       [ 0. ,  0. ,  2. ]])
>>> perm
array([2, 1, 0])
>>> lu[perm, :]
array([[ 1. ,  1. ,  1.5],
       [ 0. ,  1. , -0.5],
       [ 0. ,  0. ,  1. ]])
>>> lu.dot(d).dot(lu.T)
array([[ 2., -1.,  3.],
       [-1.,  2.,  0.],
       [ 3.,  0.,  1.]])