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.
Примечания
Эта функция использует
?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.]])