В числовом анализе и линейной алгебре , разложение по нижнему и верхнему ( LU ) или факторизация множит матрицу как произведение нижней треугольной матрицы и верхней треугольной матрицы. Иногда продукт также включает матрицу перестановок . LU-разложение можно рассматривать как матричную форму исключения Гаусса . Компьютеры обычно решают квадратные системы линейных уравнений с использованием LU-разложения, и это также является ключевым шагом при обращении матрицы или вычислении определителя.матрицы. LU-разложение было введено польским математиком Тадеушем Банахевичем в 1938 г. [1]
Определения [ править ]
Пусть A - квадратная матрица. LU разложение относится к факторизации А , с правильной строки и / или столбца упорядочений или перестановок, на два фактора - нижняя треугольная матрица L и верхней треугольной матрицы U :
В нижней треугольной матрице все элементы над диагональю равны нулю, в верхней треугольной матрице все элементы ниже диагонали равны нулю. Например, для матрицы A 3 × 3 ее LU-разложение выглядит так:
Без надлежащего упорядочивания или перестановок в матрице факторизация может не осуществиться. Например, легко проверить (развернув матричное умножение), что . Если , то , по крайней мере , один из , и должен быть равен нулю, что означает , что либо L или U является сингулярным . Это невозможно, если A неособо (обратимо). Это процедурная проблема. Его можно удалить, просто переупорядочив строки матрицы A так, чтобы первый элемент переставленной матрицы отличался от нуля. Та же проблема на последующих этапах факторизации может быть устранена таким же образом; см. основную процедуру ниже.
Факторизация LU с частичным разворотом [ править ]
Оказывается, что правильной перестановки в строках (или столбцах) достаточно для факторизации LU. Факторизация LU с частичным поворотом (LUP) часто относится к факторизации LU только с перестановками строк:
где L и U снова нижняя и верхняя треугольные матрицы, а Р представляет собой матрицу перестановок , которые, когда левая умноженное на А , сортирует строки A . Оказывается, все квадратные матрицы могут быть факторизованы в этой форме [2], и факторизация численно стабильна на практике. [3] Это делает разложение LUP полезным методом на практике.
Факторизация LU с полным поворотом [ править ]
LU разложение с полным поворота включает в себя как строк и столбцов перестановки:
где L , U и Р имеют значения , определенные выше, а Q представляет собой матрицу перестановок , что сортирует столбцы A . [4]
Разложение по нижнему диагонали и верхнему (LDU) [ править ]
Нижний диагональное-верхний (LDU) разложение является разложением вида
где D - диагональная матрица , а L и U - унитреугольные матрицы, что означает, что все элементы на диагоналях L и U равны единице.
Выше мы требовали, чтобы A была квадратной матрицей, но все эти разложения можно обобщить и на прямоугольные матрицы. В этом случае, L и D квадратные матрицы оба из которых имеют одинаковое число строк , как A , и U имеет точно такие же размеры, что и A . Верхний треугольник следует интерпретировать как имеющий только ноль точек ниже главной диагонали, которая начинается в верхнем левом углу.
Пример [ править ]
Факторизуем следующую матрицу 2 на 2:
Один из способов найти LU-разложение этой простой матрицы - просто решить линейные уравнения путем проверки. Расширение матричного умножения дает
Эта система уравнений недоопределена . В этом случае любые два ненулевых элемента матриц L и U являются параметрами решения и могут быть установлены произвольно на любое ненулевое значение. Следовательно, чтобы найти единственное разложение LU, необходимо наложить некоторые ограничения на матрицы L и U. Например, мы можем удобно потребовать, чтобы нижняя треугольная матрица L была единичной треугольной матрицей (т. Е. Установила все элементы ее главной диагонали равными единицам). Тогда система уравнений имеет следующее решение:
Подставляя эти значения в разложение LU выше, получаем
Существование и уникальность [ править ]
Квадратные матрицы [ править ]
Любая квадратная матрица допускает факторизации LUP и PLU . [2] Если это обратит , то она допускает LU (или LDU ) разложение тогда и только тогда , когда все его ведущие главные миноры отличны от нуля. [5] Если это сингулярная матрица ранга , то она допускает LU- факторизацию, если первые ведущие главные миноры отличны от нуля, хотя обратное неверно. [6]
Если квадратная обратимая матрица имеет LDU (факторизация со всеми диагональными элементами L и U, равными 1), то факторизация уникальна. [5] В этом случае факторизация LU также уникальна, если мы потребуем, чтобы диагональ (или ) состояла из единиц.
Симметричные положительно определенные матрицы [ править ]
Если является симметричным (или эрмитово , если сложна) положительно определенная матрица, мы можем устроить так , что U является сопряженной транспозицией из L . То есть мы можем записать A как
Это разложение называется разложением Холецкого . Разложение Холецкого всегда существует и уникально - при условии, что матрица положительно определена. Кроме того, вычисление разложения Холецкого более эффективно и численно более стабильно, чем вычисление некоторых других LU-разложений.
Общие матрицы [ править ]
Для (не обязательно обратимой) матрицы над любым полем известны точные необходимые и достаточные условия, при которых она имеет LU-факторизацию. Условия выражаются в виде рангов определенных подматриц. Алгоритм исключения Гаусса для получения LU-разложения также был расширен на этот наиболее общий случай. [7]
Алгоритмы [ править ]
Закрытая формула [ править ]
Когда LDU разложение существует и единственно, существует замкнутая (явная) формула для элементов L , D и U в терминах соотношения детерминант определенных подматриц исходной матрицы A . [8] В частности, и для , этого отношения -й главной подматрицы к -му главной подматрице. Вычисление определителей требует больших вычислительных ресурсов , поэтому эта явная формула на практике не используется.
Использование исключения Гаусса [ править ]
Следующий алгоритм представляет собой модифицированную форму исключения Гаусса . Вычисление разложения LU с использованием этого алгоритма требует операций с плавающей запятой, игнорируя члены более низкого порядка. Частичное вращение добавляет только квадратичный член; это не относится к полному повороту. [9]
Для матрицы размера N × N определим .
Мы исключаем элементы матрицы под главной диагональю в n -м столбце матрицы A ( n −1) , добавляя к i-й строке этой матрицы n-ю строку, умноженную на
Это можно сделать, умножив A ( n - 1) слева на нижнюю треугольную матрицу
то есть единичная матрица N x N, в которой ее n -й столбец заменен вектором
Мы установили
После N - 1 шагов мы удалили все матричные элементы ниже главной диагонали, так что мы получили верхнюю треугольную матрицу A ( N - 1) . Находим разложение
Обозначим верхнюю треугольную матрицу A ( N - 1) через U , и . Поскольку матрица, обратная нижней треугольной матрице L n , снова является нижней треугольной матрицей, а умножение двух нижних треугольных матриц снова является нижней треугольной матрицей, следует, что L является нижней треугольной матрицей. Более того, видно, что
Мы получаем
Понятно, что для того, чтобы этот алгоритм работал, нужно иметь на каждом шаге (см. Определение ). Если в какой-то момент это предположение не срабатывает, необходимо перед продолжением заменить n -ю строку другой строкой под ней. Вот почему в целом LU-разложение выглядит так .
Обратите внимание, что разложение, полученное с помощью этой процедуры, является разложением Дулитла : главная диагональ L состоит только из 1 с. Если продолжить, удалив элементы выше главной диагонали путем добавления нескольких столбцов (вместо удаления элементов ниже диагонали путем добавления нескольких строк ), мы получим разложение Кроута , где главная диагональ U равна 1 с .
Другой (эквивалент) способ получения разложения Crout данной матрицы А , чтобы получить разложение Дулитло из транспонированной A . Действительно, если это LU-разложение, полученное с помощью алгоритма, представленного в этом разделе, то, взяв и , мы получим разложение Краута.
Через рекурсию [ править ]
Cormen et al. [10] описывают рекурсивный алгоритм декомпозиции LUP.
Для данной матрицы A пусть P 1 - матрица перестановок такая, что
- ,
где , если в первом столбце A есть ненулевая запись ; или в противном случае возьмем P 1 как единичную матрицу. Теперь пусть , если ; или иначе. У нас есть
- .
Теперь мы можем рекурсивно найти разложение LUP . Пусть . Следовательно
- ,
которая представляет собой разложение LUP из A .
Рандомизированный алгоритм [ править ]
Можно найти приближение низкого ранга к разложению LU, используя рандомизированный алгоритм. Учитывая входную матрицу и желаемый низкий ранг , рандомизированный LU возвращает матрицы перестановок и нижние / верхние трапециевидные матрицы размера и, соответственно, так что с высокой вероятностью , где - константа, которая зависит от параметров алгоритма и является сингулярной значение входной матрицы . [11]
Теоретическая сложность [ править ]
Если две матрицы порядка n могут быть умножены за время M ( n ), где M ( n ) ≥ n a для некоторого n > 2, то разложение LU может быть вычислено за время O ( M ( n )). [12] Это означает, например, что существует алгоритм O ( n 2.376 ), основанный на алгоритме Копперсмита – Винограда .
Разложение по разреженной матрице [ править ]
Были разработаны специальные алгоритмы факторизации больших разреженных матриц . Эти алгоритмы пытаются найти редкие факторы L и U . В идеале стоимость вычислений определяется количеством ненулевых элементов, а не размером матрицы.
Эти алгоритмы используют свободу обмена строками и столбцами для минимизации заполнения (записи, которые изменяются с начального нуля на ненулевое значение во время выполнения алгоритма).
Общая трактовка порядков, минимизирующих заполнение, может быть решена с помощью теории графов .
Приложения [ править ]
Решение линейных уравнений [ править ]
Для системы линейных уравнений в матричной форме
мы хотим решить уравнение относительно x , учитывая A и b . Предположим, мы уже получили LUP-разложение A такое, что , so .
В этом случае решение осуществляется в два логических шага:
- Сначала мы решаем уравнение относительно y .
- Во-вторых, мы решаем уравнение относительно x .
В обоих случаях мы имеем дело с треугольными матрицами ( L и U ), которые могут быть решены напрямую прямой и обратной заменой без использования процесса исключения Гаусса (однако нам действительно нужен этот процесс или его эквивалент для вычисления самого LU- разложения).
Вышеупомянутую процедуру можно многократно применять для решения уравнения несколько раз для различных b . В этом случае быстрее (и удобнее) выполнить LU-разложение матрицы A один раз, а затем решить треугольные матрицы для различных b , вместо того, чтобы каждый раз использовать исключение Гаусса. Можно думать, что матрицы L и U «закодировали» процесс исключения Гаусса.
Стоимость решения системы линейных уравнений приблизительно равна операциям с плавающей запятой, если матрица имеет размер . Это делает его вдвое быстрее, чем алгоритмы, основанные на QR-разложении , которое требует операций с плавающей запятой при использовании отражений Хаусхолдера . По этой причине обычно предпочтительнее разложение LU. [13]
Инвертирование матрицы [ править ]
При решении системы уравнений, б , как правило , рассматривается как вектор с длиной , равной высоте матрицы A . В матричной инверсии , однако, вместо вектора Ь , мы имеем матрицу B , где B является в н матрице с размерностью р матрицей, так что мы пытаемся найти матрицу X (также н матрицы с размерностью р матрица):
Мы можем использовать тот же алгоритм , представленный ранее решить для каждого столбца матрицы X . Теперь предположим, что B - единичная матрица размера n . Он будет следовать , что результат X должен быть обратным A . [14]
Вычисление определителя [ править ]
Учитывая LUP-разложение квадратной матрицы A , определитель A может быть вычислен напрямую как
Второе уравнение следует из того факта, что определитель треугольной матрицы является просто произведением ее диагональных элементов, и что определитель матрицы перестановок равен (−1) S, где S - количество замен строк в разложении .
В случае разложения LU с полным поворотом, также равняется правой части приведенного выше уравнения, если мы позволим S быть общим числом обменов строк и столбцов.
Тот же метод легко применяется к разложению LU, устанавливая P равным единичной матрице.
Примеры кода [ править ]
Пример кода C [ править ]
/ * INPUT: A - массив указателей на строки квадратной матрицы, имеющей размерность N * Tol - малое число допуска для обнаружения отказа, когда матрица близка к вырожденной * OUTPUT: матрица A изменена, она содержит копию обеих матриц LE и U как A = (LE) + U, такое что P * A = L * U. * Матрица перестановок сохраняется не как матрица, а в целочисленном векторе P размера N + 1 *, содержащем индексы столбцов, где матрица перестановок имеет «1». Последний элемент P [N] = S + N, * где S - количество обменов строк, необходимых для вычисления определителя, det (P) = (- 1) ^ S * / int LUPDecompose ( double ** A , int N , двойной Tol , int * P ) { int i , j , k , imax ; двойной maxA , * ptr , absA ; для ( i = 0 ; i <= N ; i ++ ) P [ i ] = i ; // Матрица единичной перестановки, P [N] инициализирована N для ( я = 0 ; я < N ; я ++ ) { maxA = 0,0 ; imax = i ; для ( K = я ; K < N ; K ++ ) , если (( Абс = FABS ( [ к ] [ я ])) > MAXA ) { MAXA = Абс ; imax = k ; } если ( maxA < Tol ) вернуть 0 ; // сбой, матрица вырожденная if ( imax ! = i ) { // поворот P j = P [ i ]; P [ i ] = P [ imax ]; P [ imax ] = j ; // поворот строк A ptr = A [ i ]; A [ i ] = A [ imax ]; A [ imax ] = ptr ; // подсчет опорных точек, начиная с N (для определителя) P [ N ] ++ ; } для ( j = i + 1 ; j < N ; j ++ ) { A [ j ] [ i ] / = A [ i ] [ i ]; для ( k = i + 1 ; k < N ; k ++ ) A [ j ] [ k ] - = A [ j ] [ i ] * A [ i ] [ k ]; } } возврат 1 ; // декомпозиция завершена }/ * INPUT: A, P заполнены LUPDecompose; b - вектор rhs; N - размерность * ВЫХОД: x - вектор решения A * x = b * / void LUPSolve ( double ** A , int * P , double * b , int N , double * x ) { для ( int я = 0 ; я < N ; я ++ ) { х [ я ] = б [ P [ я ]]; для ( int k = 0 ; k < i ; k ++ ) x [ i ] - = A [ i ] [ k ] * x [ k ]; } for ( int i = N - 1 ; i > = 0 ; i - ) { for ( int k = i + 1 ; k < N ; k ++ ) x [ i ] - = A [ i ] [ k ] * х [ к ]; х [ я ] / = А [ я ] [ я ]; } }/ * INPUT: A, P заполнены LUPDecompose; N - размерность * OUTPUT: IA - это обратная исходная матрица * / void LUPInvert ( double ** A , int * P , int N , double ** IA ) { for ( int j = 0 ; j < N ; j ++ ) { for ( int i = 0 ; i < N ; i ++ ) { IA [ i ] [ j ] = P [ i ] == j ? 1,0 : 0,0 для ( int k = 0 ; k < i ; k ++ ) IA [ i ] [ j ] - = A [ i ] [ k ] * IA [ k ] [ j ]; } for ( int i = N - 1 ; i > = 0 ; i - ) { for ( int k = i + 1 ; k < N ; k ++ ) IA [ i ] [ j ] - = A [ i ] [ k ] * IA [ k ] [ j ]; IA [ i ] [ j ] / = A [ i ] [ i ]; } } }/ * INPUT: A, P заполнены LUPDecompose; N - размерность. * OUTPUT: функция возвращает определитель исходной матрицы * / double LUPDeterminant ( double ** A , int * P , int N ) { двойной det = A [ 0 ] [ 0 ]; для ( int i = 1 ; i < N ; i ++ ) det * = A [ i ] [ i ]; return ( P [ N ] - N ) % 2 == 0 ? det : - det }
Пример кода C # [ править ]
открытый класс SystemOfLinearEquations { public double [] SolveUsingLU ( double [,] matrix , double [] rightPart , int n ) { // разложение матрицы double [,] lu = new double [ n , n ]; двойная сумма = 0 ; для ( int i = 0 ; i < n ; i ++) { для ( int j = i ; j < n ; j ++) { сумма = 0 ; для ( int k = 0 ; k < i ; k ++) sum + = lu [ i , k ] * lu [ k , j ]; lu [ i , j ] = матрица [ i , j] - сумма ; } для ( int j = i + 1 ; j < n ; j ++) { sum = 0 ; для ( int k = 0 ; k < i ; k ++) sum + = lu [ j , k ] * lu [ k , i ]; lu [ j , i ] = ( 1 / lu [ i , i ]) * ( матрица [ j , i ] - сумма ); } } // lu = L + UI // найти решение Ly = b double [] y = new double [ n ]; для ( int я = 0 ; я < п ; я ++) { сумма = 0 ; для ( int k = 0 ; k < i ; k ++) sum + = lu [ i , k ] * y [ k ]; у[ i ] = rightPart [ i ] - сумма ; } // находим решение Ux = y double [] x = new double [ n ]; для ( int я = п - 1 ; я > = 0 ; я -) { сумма = 0 ; для ( int k = i + 1 ; k < n ; k++) сумма + = lu [ i , k ] * x [ k ]; x [ i ] = ( 1 / lu [ i , i ]) * ( y [ i ] - сумма ); } return x ; } }
Пример кода MATLAB [ править ]
функция x = SolveLinearSystem ( A, b ) n = длина ( b ); х = нули ( n , 1 ); y = нули ( n , 1 ); % разложение матрицы, метод Дулиттла для i = 1 : 1 : n для j = 1 :( i - 1 ) alpha = A ( i , j ); для k = 1 :( j - 1) альфа = альфа - A ( i , k ) * A ( k , j ); конец A (i, j) = alpha / A ( j , j ); конец для j = i : n alpha = A ( i , j ); для k = 1 :( i - 1 ) alpha = alpha - A( i , k ) * A ( k , j ); конец A (i, j) = альфа ; end end % A = L + UI % найти решение Ly = b для i = 1 : n alpha = 0 ; для k = 1 : i alpha = alpha + A ( i , k ) * y ( k ); конец y (i) = b( i ) - альфа ; конец % находят решение о Ux = у для I = п :( - 1 ): 1 альфа = 0 ; для k = ( i + 1 ): n alpha = alpha + A ( i , k ) * x ( k ); конец x (i) = ( y ( i) - альфа ) / A ( i , i ); конец конец
См. Также [ править ]
- Блочная декомпозиция LU
- Разложение Брюа
- Разложение Холецкого
- Неполная факторизация LU
- LU сокращение
- Разложение матрицы
- QR-разложение
Примечания [ править ]
- ^ Шварценберг-Черни, А. (1995). «О матричной факторизации и эффективном решении методом наименьших квадратов». Серия дополнений к астрономии и астрофизике . 110 : 405. Bibcode : 1995A и AS..110..405S .
- ^ a b Окунев и Джонсон (1997) , следствие 3.
- ^ Trefethen & Бау (1997) , стр. 166.
- ^ Trefethen & Бау (1997) , стр. 161.
- ^ a b Хорн и Джонсон (1985) , следствие 3.5.5
- ^ Хорн и Джонсон (1985) , теорема 3.5.2
- ↑ Окунев и Джонсон (1997)
- ↑ Householder (1975)
- ↑ Голуб и Ван Лоан (1996) , стр. 112, 119.
- ^ Кормен, Томас Х .; Лейзерсон, Чарльз Э .; Ривест, Рональд Л .; Стейн, Клиффорд (2001). Введение в алгоритмы . MIT Press и McGraw-Hill. ISBN 978-0-262-03293-3.
- ^ Шабат, Гиль; Шмуэли, Янив; Айзенбуд, Ярив; Авербух, Амир (2016). «Рандомизированное разложение LU». Прикладной и вычислительный гармонический анализ . 44 (2): 246–272. arXiv : 1310,7202 . DOI : 10.1016 / j.acha.2016.04.006 . S2CID 1900701 .
- ↑ Банч и Хопкрофт (1974)
- ^ Trefethen & Бау (1997) , стр. 152.
- ↑ Голуб и Ван Лоан (1996) , стр. 121
Ссылки [ править ]
- Связка, Джеймс Р .; Hopcroft, Джон (1974), "Треугольная факторизационная и инверсия быстрого умножения матриц", Математика вычислений , 28 (125): 231-236, DOI : 10,2307 / 2005828 , ISSN 0025-5718 , JSTOR 2005828.
- Кормен, Томас Х .; Лейзерсон, Чарльз Э .; Ривест, Рональд Л .; Стейн, Клиффорд (2001), Введение в алгоритмы , MIT Press и McGraw-Hill, ISBN 978-0-262-03293-3.
- Голуб, Джин Х .; Ван Лоан, Чарльз Ф. (1996), Матричные вычисления (3-е изд.), Балтимор: Джонс Хопкинс, ISBN 978-0-8018-5414-9.
- Хорн, Роджер А .; Джонсон, Чарльз Р. (1985), Матричный анализ , Cambridge University Press, ISBN 978-0-521-38632-6. См. Раздел 3.5. N - 1
- Хаусхолдер, Алстон С. (1975), Теория матриц в численном анализе , Нью-Йорк: Dover Publications , MR 0378371.
- Окунев, Павел; Джонсон, Чарльз Р. (1997), Необходимые и достаточные условия для существования LU-факторизации произвольной матрицы , arXiv : math.NA/0506382.
- Пул, Дэвид (2006), Линейная алгебра: современное введение (2-е изд.), Канада: Томсон Брукс / Коул, ISBN 978-0-534-99845-5.
- Нажмите, WH; Теукольский С.А.; Феттерлинг, штат Вашингтон; Фланнери, Б. П. (2007), «Раздел 2.3» , Численные рецепты: Искусство научных вычислений (3-е изд.), Нью-Йорк: Cambridge University Press, ISBN 978-0-521-88068-8.
- Trefethen, Lloyd N .; Бау, Дэвид (1997), Численная линейная алгебра , Филадельфия: Общество промышленной и прикладной математики, ISBN 978-0-89871-361-9.
Внешние ссылки [ править ]
Рекомендации
- Разложение LU на MathWorld .
- Разложение LU на Math-Linux .
- Разложение LU в Институте целостных численных методов
- Факторизация матрицы LU . Ссылка на MATLAB.
Компьютерный код
- LAPACK - это набор подпрограмм FORTRAN для решения задач плотной линейной алгебры.
- ALGLIB включает частичный перенос LAPACK на C ++, C #, Delphi и т. Д.
- Код C ++ , профессор Дж. Лумис, Дейтонский университет
- Код C , исходная библиотека математики
- LU в X10
- [1] Лу в C ++ Анил Педгаонкар
- Рандомизированный код LU MATLAB
Интернет-ресурсы
- WebApp описательно решает системы линейных уравнений с LU Decomposition
- Матричный калькулятор , bluebit.gr
- LU Decomposition Tool , uni-bonn.de
- LU Decomposition , Эд Пегг-младший , The Wolfram Demonstrations Project , 2007.