~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 325F0BF29F9C24BEAD18D24A9C333727__1710119040 ✰
Заголовок документа оригинал.:
✰ LU decomposition - Wikipedia ✰
Заголовок документа перевод.:
✰ Разложение LU — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/LU_decomposition ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/32/27/325f0bf29f9c24bead18d24a9c333727.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/32/27/325f0bf29f9c24bead18d24a9c333727__translat.html ✰
Дата и время сохранения документа:
✰ 18.06.2024 15:36:46 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 11 March 2024, at 04:04 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Разложение LU — Википедия Jump to content

LU-разложение

Из Википедии, бесплатной энциклопедии

В численном анализе и линейной алгебре и нижне-верхнее факторизуют как произведение нижней треугольной матрицы верхней (LU) разложение или факторизация матрицу треугольной матрицы (см. матричное разложение ). Иногда продукт включает в себя матрицу перестановок также . LU-разложение можно рассматривать как матричную форму исключения Гаусса . Компьютеры обычно решают квадратные системы линейных уравнений с использованием LU-разложения, и это также ключевой шаг при инвертировании матрицы или вычислении определителя матрицы. Разложение LU было предложено польским астрономом Тадеушем Банакевичем в 1938 году. [1] Цитируем: «Похоже, что Гаусс и Дулитл применили метод [исключения] только к симметричным уравнениям. Более поздние авторы, например, Эйткен, Банакевич, Дуайер и Краут… подчеркивали использование этого метода или его вариаций в связи с несимметричными проблемами… Банакевич… видел суть… в том, что основная проблема на самом деле одна. матричной факторизации, или «разложения», как он это называл». [2] Его также иногда называют LR- разложением (факторы на левую и правую треугольные матрицы).

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

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

Пусть A — квадратная матрица. Факторизация LU относится к факторизации A с правильным порядком строк и/или столбцов или перестановками на два фактора – нижнюю треугольную матрицу L и верхнюю треугольную матрицу U :

В нижней треугольной матрице все элементы выше диагонали равны нулю, в верхней треугольной матрице все элементы ниже диагонали равны нулю. Например, для матрицы A 3×3 ее LU-разложение выглядит так:

Без надлежащего упорядочения или перестановок в матрице факторизация может не осуществиться. Например, легко проверить (развернув матричное умножение ), что . Если , то хотя бы один из и должно быть равно нулю, что означает, что либо , либо U сингулярны L . Это невозможно, если A неособа (обратима). Это процедурная проблема. Его можно удалить, просто изменив порядок строк A так, чтобы первый элемент перестановочной матрицы был ненулевым. Ту же проблему на последующих этапах факторизации можно решить таким же образом; см. основную процедуру ниже.

с частичным поворотом LU - факторизация

Оказывается, для LU-факторизации достаточно правильной перестановки в строках (или столбцах). Факторизация LU с частичным поворотом (LUP) часто относится к факторизации LU только с перестановками строк:

где L и U — снова нижняя и верхняя треугольные матрицы, а P матрица перестановок при умножении слева на A переупорядочивает строки A. , которая Оказывается, все квадратные матрицы можно факторизовать в таком виде: [3] и факторизация на практике численно устойчива. [4] Это делает LUP-разложение полезным на практике методом.

с полным поворотом LU - факторизация

Факторизация LU с полным поворотом включает в себя перестановки как строк, так и столбцов:

где L , U и P определены, как и раньше, а матрица перестановок, которая переупорядочивает столбцы A. Q [5]

по нижней диагонали-верхней ( Разложение LDU )

Разложение «нижняя диагональ-верхняя» (LDU) — это разложение вида

где D диагональная матрица , а L и U унитреугольные матрицы , что означает, что все элементы на диагоналях L и U равны единице.

Прямоугольные матрицы [ править ]

Выше мы требовали, чтобы A была квадратной матрицей, но все эти разложения можно обобщить и на прямоугольные матрицы. [6] В этом случае L и D — квадратные матрицы, каждая из которых имеет то же количество строк, что и A , а U имеет точно такие же размеры, что A. и Верхний треугольник следует интерпретировать как имеющий только нулевые записи ниже главной диагонали, которая начинается в верхнем левом углу. Точно так же более точный термин для U заключается в том, что это форма эшелона строк матрицы A .

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

Мы факторизуем следующую матрицу 2х2:

Один из способов найти LU-разложение этой простой матрицы — просто решить линейные уравнения путем проверки. Расширение матричного умножения дает

Эта система уравнений является недоопределенной . В этом случае любые два ненулевых элемента матриц L и U являются параметрами решения и могут быть произвольно присвоены любому ненулевому значению. Следовательно, чтобы найти уникальное LU-разложение, необходимо наложить некоторые ограничения на L и U. матрицы Например, мы можем удобно потребовать, чтобы нижняя треугольная матрица L была единичной треугольной матрицей (т. е. присвоила единицам все элементы ее главной диагонали). Тогда система уравнений имеет следующее решение:

Подстановка этих значений в приведенное выше LU-разложение дает

Существование и уникальность [ править ]

Квадратные матрицы [ править ]

Любая квадратная матрица допускает LUP и PLU . факторизацию [3] Если является обратимым , то он допускает факторизацию LU (или LDU ) тогда и только тогда, когда все его ведущие главные миноры [7] ненулевые [8] (например не допускает факторизации LU или LDU ). Если представляет собой сингулярную матрицу ранга , то он допускает LU- факторизацию, если первый ведущие главные миноры не равны нулю, хотя обратное неверно. [9]

Если квадратная обратимая матрица имеет LDU (факторизация, в которой все диагональные элементы L и U равны 1), то факторизация уникальна. [8] В этом случае LU- факторизация также будет уникальной, если мы потребуем, чтобы диагональ (или ) состоит из единиц.

Вообще любая квадратная матрица может иметь одно из следующих значений:

  1. уникальная LU-факторизация (как упоминалось выше);
  2. бесконечно много LU-факторизаций, если два или более любых первых ( n -1) столбцов линейно зависимы или любой из первых ( n -1) столбцов равен 0;
  3. нет LU-факторизации, если первые ( n −1) столбцы ненулевые и линейно независимые и хотя бы один ведущий главный минор равен нулю.

В случае 3 можно аппроксимировать LU-факторизацию, изменив диагональную запись. к чтобы избежать нулевого ведущего главного минора. [10]

положительно определенные матрицы Симметричные

Если A — симметричная (или эрмитова , если A комплексная) положительно определенная матрица , мы можем устроить дело так, что сопряженная транспонированная матрица L. U То есть мы можем написать А как

Это разложение называется разложением Холецкого . Если положительно определена, то разложение Холецкого существует и единственно. Более того, вычисление разложения Холецкого более эффективно и численно более стабильно , чем вычисление некоторых других LU-разложений.

Общие матрицы [ править ]

Для (не обязательно обратимой) матрицы над любым полем известны точные необходимые и достаточные условия, при которых она имеет LU-факторизацию. Условия выражаются через ранги определенных подматриц. Алгоритм исключения Гаусса для получения LU-разложения также был распространен на этот наиболее общий случай. [11]

Алгоритмы [ править ]

Закрытая формула [ править ]

Когда факторизация LDU существует и уникальна, существует замкнутая (явная) формула для элементов L , D и U в терминах отношений определителей некоторых подматриц исходной A. матрицы [12] В частности, , и для , это соотношение -я главная подматрица -я главная подматрица. Вычисление определителей требует больших вычислительных затрат , поэтому эта явная формула на практике не используется.

Гаусса исключения Использование

Следующий алгоритм по существу представляет собой модифицированную форму исключения Гаусса . Для вычисления LU-разложения с использованием этого алгоритма требуется операции с плавающей запятой, игнорируя члены низшего порядка. Частичный поворот добавляет только квадратичный член; это не относится к полному повороту. [13]

Общее объяснение [ править ]

Обозначения [ править ]

Учитывая N × N матрицу размера , определять как оригинальная, немодифицированная версия матрицы . Надстрочный индекс в скобках (например, ) матрицы это версия матрицы. Матрица это матрица, в которой элементы ниже главной диагонали уже исключены до 0 методом исключения Гаусса для первого столбцы.

Ниже приведена матрица, которая поможет нам запомнить обозначения (где каждый представляет любое действительное число в матрице):

Процедура [ править ]

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

Мы определяем окончательную матрицу перестановок как единичную матрицу, в которой все одни и те же строки поменяны местами в том же порядке, что и матрица, пока она преобразуется в матрицу . Для нашей матрицы , мы можем начать с замены строк, чтобы обеспечить желаемые условия для n-го столбца. Например, мы можем поменять местами строки, чтобы выполнить частичный поворот, или сделать это, чтобы установить элемент поворота. на главной диагонали к ненулевому числу, чтобы мы могли завершить исключение Гаусса.

Для нашей матрицы , мы хотим установить каждый элемент ниже до нуля (где – элемент n-го столбца главной диагонали). Ниже мы обозначим каждый элемент как (где ). Устанавливать равным нулю, мы устанавливаем для каждой строки . Для этой операции . Как только мы выполнили операции со строками для первого столбцов, мы получили верхнетреугольную матрицу который обозначается .

Мы также можем создать нижнюю треугольную матрицу, обозначенную как , путем непосредственного ввода ранее рассчитанных значений по формуле ниже.

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

Если нам дана матрица

мы выберем реализацию частичного поворота и, таким образом, поменяем местами первую и вторую строки, чтобы наша матрица и первая итерация нашего матрица соответственно становится
После того, как мы поменяли строки местами, мы можем исключить элементы ниже главной диагонали в первом столбце, выполнив
такой, что,
После вычитания этих строк мы получили матрица
Поскольку мы реализуем частичный поворот, мы меняем местами вторую и третью строки нашей производной матрицы и текущую версию нашей матрица соответственно, чтобы получить
Теперь мы исключим элементы ниже главной диагонали во втором столбце, выполнив такой, что . Поскольку в нашей текущей итерации ниже главной диагонали не существует ненулевых элементов. после вычитания этой строки это вычитание строки дает наш окончательный результат матрица (обозначается как ) и финал матрица:
Также переключив соответствующие строки, мы получим наш окончательный результат. матрица:
Теперь эти матрицы имеют такое отношение, что .

Отношения, когда строки не меняются местами [ править ]

Если мы вообще не меняли местами строки во время этого процесса, мы можем выполнять операции со строками одновременно для каждого столбца. установив где представляет собой единичную матрицу размера N × N , в которой ее n -й столбец заменен транспонированным вектором Другими словами, нижняя треугольная матрица

Выполнение всех операций над строками для первого столбцы с использованием формула эквивалентна нахождению разложения

Обозначим так что .

Теперь вычислим последовательность . Мы знаем это имеет следующую формулу.

Если есть две нижние треугольные матрицы с единицами на главной диагонали, и ни одна из них не имеет ненулевого элемента ниже главной диагонали в том же столбце, что и другая, то мы можем включить все ненулевые элементы в одно и то же место в произведении. из двух матриц. Например:

Наконец, умножьте вместе и сгенерировать объединенную матрицу, обозначенную как (как упоминалось ранее). Использование матрицы , мы получаем

Понятно, что для того, чтобы этот алгоритм работал, нужно иметь на каждом этапе (см. определение ). Если в какой-то момент это предположение не сработает, необходимо поменять местами n -ю строку с другой строкой, расположенной ниже, прежде чем продолжить. Вот почему LU-разложение в целом выглядит так: .

LU Разложение Краута [ править ]

Обратите внимание, что разложение, полученное с помощью этой процедуры, представляет собой разложение Дулитла : главная диагональ L состоит исключительно из 1 с. Если продолжить удаление элементов над главной диагональю путем добавления кратных столбцов ( вместо удаления элементов ниже диагонали путем добавления кратных строк ), мы получим разложение Крута , где главная диагональ U равна 1 с. .

Другой (эквивалентный) способ создания разложения Краута данной матрицы A состоит в том, чтобы получить разложение Дулитла транспонированного A . Действительно, если — LU-разложение, полученное с помощью алгоритма, представленного в этом разделе, а затем путем принятия и , у нас это есть представляет собой разложение Краута.

Через рекурсию [ править ]

Кормен и др. [14] описать рекурсивный алгоритм LUP-разложения.

Учитывая матрицу A , пусть P 1 будет матрицей перестановки такой, что

,

где есть ненулевая запись , если в первом столбце A ; или в противном случае возьмите P 1 в качестве единичной матрицы. Теперь позвольте , если ; или в противном случае. У нас есть

Теперь мы можем рекурсивно найти LUP-разложение. . Позволять . Поэтому

что является LUP-разложением A .

Рандомизированный алгоритм [ править ]

Можно найти аппроксимацию низкого ранга для LU-разложения, используя рандомизированный алгоритм. Учитывая входную матрицу и желаемый низкий ранг , рандомизированный LU возвращает матрицы перестановок и нижняя/верхняя трапециевидные матрицы размера и соответственно, такой, что с большой вероятностью , где – константа, зависящая от параметров алгоритма и это -е сингулярное значение входной матрицы . [15]

Теоретическая сложность [ править ]

Если две матрицы порядка n можно перемножить за время M ( n ), где M ( n ) ≥ n а для некоторого a > 2 LU-разложение можно вычислить за время O( M ( n )). [16] Это означает, например, что O( n 2.376 ) существует алгоритм, основанный на алгоритме Копперсмита-Винограда .

Разложение разреженной матрицы [ править ]

Разработаны специальные алгоритмы факторизации больших разреженных матриц . Эти алгоритмы пытаются найти разреженные L и U. факторы В идеале стоимость вычислений определяется количеством ненулевых записей, а не размером матрицы.

Эти алгоритмы используют свободу обмена строк и столбцов для минимизации заполнения (записей, которые изменяются от начального нуля до ненулевого значения во время выполнения алгоритма).

Общую обработку порядков, минимизирующих заполнение, можно решить с помощью теории графов .

Приложения [ править ]

Решение линейных уравнений [ править ]

Дана система линейных уравнений в матричной форме

мы хотим решить уравнение для x , учитывая A и b . Предположим, мы уже получили LUP-разложение A такое, что , так .

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

  1. Сначала решаем уравнение для тебя .
  2. Во-вторых, решаем уравнение для х .

В обоих случаях мы имеем дело с треугольными матрицами ( L и U ), которые можно решить напрямую путем прямой и обратной замены без использования процесса исключения Гаусса (однако нам нужен этот процесс или его эквивалент для вычисления самого LU- разложения).

Вышеописанную процедуру можно многократно применять для решения уравнения несколько раз для разных b . В этом случае быстрее (и удобнее) выполнить LU-разложение матрицы A один раз, а затем решить треугольные матрицы для разных b , вместо того, чтобы каждый раз использовать метод исключения Гаусса. Можно было бы подумать, что матрицы L и U «закодировали» процесс исключения Гаусса.

Стоимость решения системы линейных уравнений составляет примерно операции с плавающей запятой, если матрица имеет размер . Это делает его в два раза быстрее алгоритмов, основанных на QR-разложении , стоимость которого составляет около операции с плавающей запятой при отражений Хаусхолдера использовании . По этой причине обычно предпочтительнее LU-разложение. [17]

Инвертирование матрицы [ править ]

При решении систем уравнений b обычно рассматривают как вектор длиной, равной высоте A. матрицы Однако при инверсии матрицы вместо вектора b у нас есть матрица B , где B матрица размера n на p , так что мы пытаемся найти матрицу X (также n матрицу размера на p ):

представленный ранее, для решения каждого столбца матрицы X. Мы можем использовать тот же алгоритм , Теперь предположим, что B — единичная матрица размера n . что результат X должен быть обратным результату A. Из этого следовало бы , [18]

Вычисление определителя [ править ]

Учитывая LUP-разложение квадратной матрицы A определитель A можно вычислить непосредственно как

Второе уравнение следует из того факта, что определитель треугольной матрицы представляет собой просто произведение ее диагональных элементов и что определитель матрицы перестановок равен (−1). С где S — количество перестановок строк в разложении.

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

Тот же метод легко применим к LU-разложению, устанавливая P равным единичной матрице.

Примеры кода [ править ]

Пример кода C [ править ]

/* ВХОД: A - массив указателей на строки квадратной матрицы размером N 
 * Tol - небольшое число допуска для обнаружения сбоя, когда матрица близка к вырождению 
 * ВЫХОД: Матрица 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  ,   двойной   Тол  ,   int   *  P  )   { 

     int   я  ,   j  ,   k  ,   imax  ;  
      двойной   maxA  ,   *  ptr  ,   absA  ; 

      для   (  я   знак равно   0  ;   я   <=   N  ;   я  ++  ) 
         п  [  я  ]   знак равно   я  ;    //Матрица перестановок единиц, P[N] инициализируется N 

     for   (  i   =   0  ;   i   <   N  ;   i  ++  )   { 
         maxA   =   0.0  ; 
          имакс   =   я  ; 

          for   (  k   =   i  ;   k   <   N  ;   k  ++  ) 
             if   ((  absA   =   fabs  (  A  [  k  ][  i  ]))   >   maxA  )   {  
                 maxA   =   absA  ; 
                  имакс   =   к  ; 
              } 

         if   (  maxA   <   Tol  )   возвращает   0  ;    // ошибка, матрица вырождена 

         if   (  imax   !=   i  )   { 
             // поворот P 
             j   =   P  [  i  ]; 
              п  [  я  ]   =   п  [  имакс  ]; 
              п  [  имакс  ]   знак равно   j  ; 

              // поворот строк A 
             ptr   =   A  [  i  ]; 
              А  [  я  ]   =   А  [  imax  ]; 
              А  [  имакс  ]   =   ПТР  ; 

              //считаем пивоты, начиная с N (для определителя) 
            П  [  Н  ]  ++  ; 
          } 

         for   (  j   знак равно   я   +   1  ;   j   <   N  ;   j  ++  )   { 
             A  [  j  ] [  я  ]   / =   A  [  я  ] [  я  ]; 

              for   (  k   =   i   +   1  ;   k   <   N  ;   k  ++  ) 
                 A  [  j  ][  k  ]   -=   A  [  j  ][  i  ]   *   A  [  i  ] [  k  ]; 
          } 
     } 

     вернуть   1  ;     //декомпозиция завершена 
 } 

 /* INPUT: A,P заполнены LUPDecompose;   б - правый вектор;   N - размерность 
 * ВЫХОД: x - вектор решения A*x=b 
 */ 
 void   LUPSolve  (  double   **  A  ,   int   *  P  ,   double   *  b  ,   int   N  ,   double   *  x  )   { 

     for   (  int   i   =   0  ;   i   <   N  ;   я  ++  )   { 
         Икс  [  я  ]   знак равно   б  [  п  [  я  ]]; 

          for   (  int   k   =   0  ;   k   <   i  ;   k  ++  ) 
             x  [  i  ]   -=   A  [  i  ] [  k  ]   *   x  [  k  ]; 
      } 

     for   (  int   i   =   N   -   1  ;   я   >=   0  ;   я  --  )   { 
         for   (  int   k   =   i   +   1  ;   k   <   N  ;   k  ++  ) 
             x  [  i  ]   -=   A  [  i  ] [  k  ]   *   х  [  к  ]; 

          Икс  [  я  ]   / =   А  [  я  ] [  я  ]; 
      } 
 } 

 /* ВВОД: A,P заполнены LUPDecompose;   N — размерность 
 * ВЫХОД: IA — обратная исходной матрице 
 */ 
 void   LUPInvert  (  double   **  A  ,   int   *  P  ,   int   N  ,   double   **  IA  )   { 
  
     for   (  int   j   =   0  ;   j   <   N  ;   j  + +  )   { 
         for   (  int   я   знак равно   0  ;   я   <   N  ;   я  ++  )   { 
             IA  [  я  ][  j  ]   знак равно   п  [  я  ]   ==   j   ?    1,0   :   0,0  ; 

              for   (  int   k   =   0  ;   k   <   i  ;   k  ++  ) 
                 IA  [  i  ] [  j  ]   -=   A  [  i  ] [  k  ]   *   IA  [  k  ] [  j  ]; 
          } 

         for   (  int   i   =   N   -   1  ;   я   >=   0  ;   я  --  )   { 
             for   (  int   k   =   i   +   1  ;   k   <   N  ;   k  ++  ) 
                 IA  [  i  ][  j  ]   -=   A  [  i  ] [  к  ]   *   ИА  [  к  ][  j  ]; 

              IA  [  i  ][  j  ]   /=   A  [  i  ][  i  ]; 
          } 
     } 
 } 

 /* INPUT: A,P заполнены LUPDecompose;   Н - размерность. 
  * ВЫХОД: Функция возвращает определитель исходной матрицы 
 */ 
 double   LUPDeterminant  (  double   **  A  ,   int   *  P  ,   int   N  )   { 

     double   det   =   A  [  0  ][  0  ]; 

      for   (  int   я   знак равно   1  ;   я   <   N  ;   я  ++  ) 
         det   *=   A  [  я  ][  я  ]; 

    возврат   (  P  [  N  ]   -   N  )   %   2   ==   0   ?    что   :   -  это  ; 
  } 

Пример кода C# [ править ]

public   class   SystemOfLinearEquations 
 { 
     public   double  []   SolveUsingLU  (  double  [,]   матрица  ,   double  []   rightPart  ,   int   n  ) 
     { 
         // разложение матрицы 
         double  [,]   lu   =   new   double  [  n  ,   n  ]; 
          двойная   сумма   =   0  ; 
          for   (  int   я знак   равно   0  ;   я   <   n  ;   я  ++  ) 
         { 
             for   (  int   j   знак равно   я  ;   j   <   n  ;   j  ++  ) 
             { 
                 sum   =   0  ; 
                  for   (  int   k   =   0  ;   k   <   i  ;   k  ++  ) 
                     sum   +=   lu  [  i  ,   k  ]   *   lu  [  k  ,   j  ]; 
                  лу  [  я  ,   j  ]   =   матрица  [  я  ,   j  ]   -   сумма  ; 
              } 
             for   (  int   j   знак равно   я   +   1  ;   j   <   n  ;   j  ++  ) 
             { 
                 sum   =   0  ; 
                  for   (  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  ; 
              for   (  int   k   =   0  ;   k   <   i  ;   k  ++  ) 
                 sum   +=   lu  [  i  ,   k  ]   *   y  [  k  ]; 
              y  [  я  ]   =   правая часть  [  я  ]   -   сумма  ; 
          } 
         // находим решение Ux = y 
         double  []   x   =   new   double  [  n  ]; 
          для   (  int   я   знак равно   п   -   1  ;   я   >=   0  ;   я  --  ) 
         { 
             сумма   =   0  ; 
              for   (  int   k   =   i   +   1  ;   k   <   n  ;   k  ++  ) 
                 sum   +=   lu  [  i  ,   k  ]   *   x  [  k  ]; 
              Икс  [  я  ]   =   (  1   /   lu  [  я  ,   я  ])   *   (  y  [  я  ]   -   сумма  ); 
          } 
         Вернуть   х  ; 
      } 
 } 

Пример кода MATLAB [ править ]

функция   LU   =   LUDecompDoolittle  (  A  ) 
     n   =   длина  (  A  ); 
      ЛУ   =   А  ; 
      % разложения матрицы, метод Дулитла 
     для   i   =   1  :  1  :  n 
         для   j   =   1  :(  i   -   1  ) 
             LU  (  i  ,  j  )   =   (  LU  (  i  ,  j  )   -   LU  (  i  ,  1  :(  j   -   1)  ))  *  ЛУ  (  1  :(  j   -   1  ),  j  ))   /   LU  (  j  ,  j  ); 
          конец 
         j   знак равно   я  :  п  ; 
          ЛУ  (  я  ,  j  )   =   ЛУ  (  я  ,  j  )   -   ЛУ  (  я  ,  1  :  ( я   -   1  ))  *  ЛУ  (  1  :  ( я   -   1  ),  j  ); 
      end 
     %LU = L+UI 
 конечная 

 функция   x   =   SolveLinearSystem  (  LU, B  ) 
     n   =   длина  (  LU  ); 
      y   =   нули  (  размер  (  B  )); 
      % найти решение Ly = B 
     для   i   =   1  :  n 
         y  (  i  ,:)   =   B  (  i  ,:)   -   LU  (  i  ,  1  :  i  )  *  y  (  1  :  i  ,:); 
      end 
     % найти решение Ux = y 
     x   =   нули  (  размер  (  B  )); 
      для   i   =   n  :(  -  1  ):  1 
         x  (  i  ,:)   =   (  y  (  i  ,:)   -   LU  (  i  ,(  i   +   1  ):  n  )  *  x  ((  i   +   1  ):  n  ,: ))  /  ЛУ  (  я  ,   я  ); 
      конец     
 конец 

 А   знак равно   [   4   3   3  ;    6   3   3  ;    3   4   3   ] 
 LU   =   LUDecompDoolittle  (  A  ) 
 B   знак равно   [   1   2   3  ;    4   5   6  ;    7   8   9  ;    10   11   12   ]  ' 
 x   =   SolveLinearSystem  (  LU  ,   B  ) 
 A   *   x 

См. также [ править ]

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

  1. ^ Шварценберг-Черни, А. (1995). «О матричной факторизации и эффективном решении методом наименьших квадратов». Серия дополнений по астрономии и астрофизике . 110 : 405. Бибкод : 1995A&AS..110..405S .
  2. ^ Дуайер, Пол С. (1951). Линейные вычисления . Нью-Йорк: Уайли.
  3. ^ Перейти обратно: а б Окунев и Джонсон (1997) , Следствие 3.
  4. ^ Трефетен и Бау (1997) , с. 166.
  5. ^ Трефетен и Бау (1997) , с. 161.
  6. ^ Лэй, Дэвид С. (2016). Линейная алгебра и ее приложения . Стивен Р. Лэй, Джудит Макдональд (Пятое изд.). Харлоу. п. 142. ИСБН  978-1-292-09223-2 . OCLC   920463015 . {{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  7. ^ Риготти (2001) , ведущий второстепенный исполнитель
  8. ^ Перейти обратно: а б Хорн и Джонсон (1985) , следствие 3.5.5
  9. ^ Хорн и Джонсон (1985) , Теорема 3.5.2.
  10. ^ Нхиайи, Ли; Фан-Ямада, Туетдонг (2021). «Изучение возможного разложения LU». Североамериканский журнал GeoGebra . 9 (1).
  11. ^ Окунев и Джонсон (1997)
  12. ^ Домохозяин (1975)
  13. ^ Голуб и Ван Лоан (1996) , с. 112, 119.
  14. ^ Кормен, Томас Х .; Лейзерсон, Чарльз Э .; Ривест, Рональд Л .; Стоун, Клиффорд (2001). Введение в алгоритмы . MIT Press и McGraw-Hill. ISBN  978-0-262-03293-3 .
  15. ^ Шабат, Гил; Шмуэли, Янив; Айзенбуд, Ярив; Авербух, Амир (2016). «Рандомизированное LU-разложение». Прикладной и вычислительный гармонический анализ . 44 (2): 246–272. arXiv : 1310.7202 . дои : 10.1016/j.acha.2016.04.006 . S2CID   1900701 .
  16. ^ Банч и Хопкрофт (1974)
  17. ^ Трефетен и Бау (1997) , с. 152.
  18. ^ Голуб и Ван Лоан (1996) , с. 121

Ссылки [ править ]

Внешние ссылки [ править ]

Рекомендации

Компьютерный код

Интернет-ресурсы

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 325F0BF29F9C24BEAD18D24A9C333727__1710119040
URL1:https://en.wikipedia.org/wiki/LU_decomposition
Заголовок, (Title) документа по адресу, URL1:
LU decomposition - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)