Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В числовом анализе и линейной алгебре , разложение по нижнему и верхнему ( LU ) или факторизация множит матрицу как произведение нижней треугольной матрицы и верхней треугольной матрицы. Иногда продукт также включает матрицу перестановок . LU-разложение можно рассматривать как матричную форму исключения Гаусса . Компьютеры обычно решают квадратные системы линейных уравнений с использованием LU-разложения, и это также является ключевым шагом при обращении матрицы или вычислении определителя.матрицы. LU-разложение было введено польским математиком Тадеушем Банахевичем в 1938 г. [1]

Определения [ править ]

Разложение по LDU матрицы Уолша

Пусть 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 .

В этом случае решение осуществляется в два логических шага:

  1. Сначала мы решаем уравнение относительно y .
  2. Во-вторых, мы решаем уравнение относительно 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-разложение

Примечания [ править ]

  1. ^ Шварценберг-Черни, А. (1995). «О матричной факторизации и эффективном решении методом наименьших квадратов». Серия дополнений к астрономии и астрофизике . 110 : 405. Bibcode : 1995A и AS..110..405S .
  2. ^ a b Окунев и Джонсон (1997) , следствие 3.
  3. ^ Trefethen & Бау (1997) , стр. 166.
  4. ^ Trefethen & Бау (1997) , стр. 161.
  5. ^ a b Хорн и Джонсон (1985) , следствие 3.5.5
  6. ^ Хорн и Джонсон (1985) , теорема 3.5.2
  7. Окунев и Джонсон (1997)
  8. Householder (1975)
  9. Голуб и Ван Лоан (1996) , стр. 112, 119.
  10. ^ Кормен, Томас Х .; Лейзерсон, Чарльз Э .; Ривест, Рональд Л .; Стейн, Клиффорд (2001). Введение в алгоритмы . MIT Press и McGraw-Hill. ISBN 978-0-262-03293-3.
  11. ^ Шабат, Гиль; Шмуэли, Янив; Айзенбуд, Ярив; Авербух, Амир (2016). «Рандомизированное разложение LU». Прикладной и вычислительный гармонический анализ . 44 (2): 246–272. arXiv : 1310,7202 . DOI : 10.1016 / j.acha.2016.04.006 . S2CID 1900701 . 
  12. Банч и Хопкрофт (1974)
  13. ^ Trefethen & Бау (1997) , стр. 152.
  14. Голуб и Ван Лоан (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.