LU-разложение матрицы алгоритм: схема и пример

LU-разложение матрицы - это представление квадратной матрицы в виде произведения двух треугольных множителей: нижней треугольной и верхней треугольной , то есть . Эта факторизация лежит в основе большинства прямых методов решения систем линейных уравнений и фактически является матричной записью обычного исключения Гаусса. Зная алгоритм LU-разложения матрицы, можно один раз разложить , а затем дёшево решать систему для множества разных правых частей, считать определитель и обращать матрицу. Ниже разберём схему построения и , роль перестановок и пошаговый пример.
Что такое LU-разложение
Пусть дана невырожденная матрица . Её LU-разложение - это пара матриц
таких, что . Матрица имеет единицы на главной диагонали (это так называемое разложение Дулиттла), а совпадает с матрицей, которую мы получаем в конце прямого хода метода Гаусса. Множители - это в точности коэффициенты, на которые умножали строки при исключении. Существование разложения без перестановок гарантируется, если все ведущие (угловые) миноры матрицы отличны от нуля.
Дальше - интерактивный построитель: введите свою матрицу, и модель выполнит LU-разложение по шагам, покажет , и (при необходимости) матрицу перестановок .
Алгоритм LU-разложения матрицы
В основе лежит исключение по Гауссу. Идём по столбцам и для каждой строки вычисляем множитель
после чего обнуляем поддиагональные элементы, обновляя оставшуюся часть матрицы:
Получаемые множители складываются в нижнюю треугольную , а итоговая верхняя треугольная матрица и есть . Главное наблюдение алгоритма: обнулённые места под диагональю можно «переиспользовать» для хранения , поэтому на практике и хранят прямо на месте исходной матрицы , не тратя дополнительной памяти. Диагональный элемент , на который делим, называется ведущим (pivot).
Пример LU-разложения
Разложим матрицу
Первый столбец: ведущий элемент . Множители и . Вычитаем из второй строки удвоенную первую, из третьей - учетверённую:
Второй столбец: ведущий , множитель . Вычитаем из третьей строки утроенную вторую - получаем . Собираем результат:
Легко проверить, что . Определитель сразу читается с диагонали : .
Решение СЛАУ через LU
Главная ценность алгоритма LU-разложения матрицы - быстрое решение системы . Подставив , получаем . Вводим вспомогательный вектор и решаем задачу в два прохода:
Так как нижняя треугольная, находится сверху вниз:
Затем из верхней треугольной находим снизу вверх:
Каждая подстановка стоит операций, тогда как само разложение - . Поэтому для разных правых частей выгоднее один раз разложить и раз прогнать дешёвые подстановки, вместо того чтобы раз решать систему методом Гаусса с нуля.
Выбор ведущего элемента и матрица перестановок
Если на очередном шаге ведущий элемент оказывается нулём, делить нельзя - разложение без перестановок не существует. Даже когда pivot просто мал по модулю, деление на него раздувает погрешности округления. Лекарство - частичный выбор ведущего элемента (partial pivoting): на шаге среди элементов столбца ниже диагонали ищут максимальный по модулю и переставляют соответствующую строку наверх.
Перестановки строк фиксируются в матрице перестановок , и разложение принимает вид
Тогда система решается как , . Частичный выбор делает алгоритм численно устойчивым практически для всех задач, встречающихся на практике, поэтому именно реализовано в библиотеках вроде LAPACK и в функциях lu пакетов NumPy/SciPy. Близкая по духу идея устойчивости разбирается в заметке про число обусловленности матрицы: чем хуже обусловлена , тем важнее аккуратный выбор pivot.
Определитель и обращение через LU
Поскольку определитель произведения равен произведению определителей, а (единичная диагональ), определитель исходной матрицы получается почти бесплатно:
При наличии перестановок добавляется знак: , где - число выполненных перестановок строк. Обратную матрицу тоже находят через LU: решают систем с единичными ортами в правых частях, используя одно и то же разложение. Это заметно дешевле, чем считать по определению или обращать матрицу методом присоединённой матрицы.
Когда LU не подходит
LU-разложение универсально, но не всегда оптимально. Для симметричной положительно определённой матрицы выгоднее разложение Холецкого - оно вдвое экономнее и не требует выбора ведущего элемента. Для больших разреженных систем прямое LU-разложение «забивает» нули (fill-in) и съедает память, поэтому переходят к итерационным методам - например, к методу Якоби или методу сопряжённых градиентов. Для прямоугольных и плохо обусловленных задач вместо LU берут QR-разложение или SVD. То есть LU - это рабочая лошадка для плотных квадратных систем среднего размера.
Частые ошибки
- Деление на нулевой или малый pivot без перестановок. Если на диагонали оказался ноль, нужен частичный выбор и переход к ; иначе алгоритм просто упадёт или выдаст мусор.
- Путаница, где , а где . - нижняя с единицами на диагонали, - верхняя; множители записывают именно в , а не в .
- Забытый знак определителя. При нечётном числе перестановок строк определитель меняет знак - множитель терять нельзя.
- Повторное разложение для каждой правой части. Смысл LU в том, чтобы разложить один раз; на каждый новый нужны только две дешёвые подстановки.
- Применение к разреженным матрицам без учёта fill-in. Для больших разреженных систем плотное LU неэффективно - там уместнее итерационные методы.
FAQ
Чем LU-разложение отличается от метода Гаусса? По сути это одно и то же исключение, но записанное как факторизация . Метод Гаусса решает систему за один проход, а LU отделяет «дорогую» часть (разложение) от «дешёвой» (подстановки), позволяя переиспользовать и для разных .
Всегда ли существует LU-разложение? Без перестановок - только если все угловые миноры ненулевые. С частичным выбором ведущего элемента разложение существует для любой невырожденной матрицы.
Какова сложность алгоритма? Само разложение требует около арифметических операций, а каждая последующая прямая/обратная подстановка - порядка .
Коротко
LU-разложение матрицы представляет как произведение нижней и верхней треугольных множителей и и является матричной формой метода Гаусса. Алгоритм строит из множителей исключения, а - из верхней треугольной части; при нулевых или малых ведущих элементах добавляют частичный выбор и матрицу перестановок , получая . Готовое разложение позволяет дёшево решать для многих правых частей через прямую и обратную подстановку, мгновенно считать определитель как произведение диагонали и обращать матрицу.
Читайте также

Метод Якоби решение СЛАУ: формулы, сходимость, пример
Метод Якоби для решения СЛАУ Ax = b: итерационные формулы, условие диагонального преобладания, спектральный радиус, сравнение с Гауссом–Зейделем и пошаговый пример.

Метод Гаусса-Зейделя СЛАУ: формулы, сходимость, сравнение с Якоби
Итерационный метод Гаусса-Зейделя для СЛАУ: формулы, условие диагонального преобладания, сравнение с методом Якоби, SOR-релаксация и оптимальный параметр.

Алгоритм Рабина-Карпа: поиск подстроки за O(n+m)
Разбираем алгоритм Рабина-Карпа: как полиномиальный хеш и скользящее окно ускоряют поиск подстроки до O(n+m) в среднем, почему бывают ложные совпадения и при чём тут плагиат.