EssayAI
Блог
Блог
Математика и алгоритмы

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

4 апреля 2026Время чтения: 8 минут
#LU-разложение#метод Гаусса#СЛАУ#треугольные матрицы#частичный выбор
LU-разложение матрицы алгоритм: схема и пример

LU-разложение матрицы - это представление квадратной матрицы AA в виде произведения двух треугольных множителей: нижней треугольной LL и верхней треугольной UU, то есть A=LUA = LU. Эта факторизация лежит в основе большинства прямых методов решения систем линейных уравнений и фактически является матричной записью обычного исключения Гаусса. Зная алгоритм LU-разложения матрицы, можно один раз разложить AA, а затем дёшево решать систему Ax=bAx = b для множества разных правых частей, считать определитель и обращать матрицу. Ниже разберём схему построения LL и UU, роль перестановок и пошаговый пример.

Что такое LU-разложение

Пусть дана невырожденная матрица ARn×nA \in \mathbb{R}^{n \times n}. Её LU-разложение - это пара матриц

L=(100l2110ln1ln21),U=(u11u12u1n0u22u2n00unn),L = \begin{pmatrix} 1 & 0 & \cdots & 0 \\ l_{21} & 1 & \cdots & 0 \\ \vdots & & \ddots & \vdots \\ l_{n1} & l_{n2} & \cdots & 1 \end{pmatrix}, \qquad U = \begin{pmatrix} u_{11} & u_{12} & \cdots & u_{1n} \\ 0 & u_{22} & \cdots & u_{2n} \\ \vdots & & \ddots & \vdots \\ 0 & 0 & \cdots & u_{nn} \end{pmatrix},

таких, что A=LUA = LU. Матрица LL имеет единицы на главной диагонали (это так называемое разложение Дулиттла), а UU совпадает с матрицей, которую мы получаем в конце прямого хода метода Гаусса. Множители lijl_{ij} - это в точности коэффициенты, на которые умножали строки при исключении. Существование разложения без перестановок гарантируется, если все ведущие (угловые) миноры матрицы отличны от нуля.

Дальше - интерактивный построитель: введите свою матрицу, и модель выполнит LU-разложение по шагам, покажет LL, UU и (при необходимости) матрицу перестановок PP.

Алгоритм LU-разложения матрицы

В основе лежит исключение по Гауссу. Идём по столбцам k=1,2,,n1k = 1, 2, \ldots, n-1 и для каждой строки i>ki > k вычисляем множитель

lik=aik(k)akk(k),l_{ik} = \frac{a_{ik}^{(k)}}{a_{kk}^{(k)}},

после чего обнуляем поддиагональные элементы, обновляя оставшуюся часть матрицы:

aij(k+1)=aij(k)likakj(k),j=k,k+1,,n.a_{ij}^{(k+1)} = a_{ij}^{(k)} - l_{ik}\, a_{kj}^{(k)}, \qquad j = k, k+1, \ldots, n.

Получаемые множители likl_{ik} складываются в нижнюю треугольную LL, а итоговая верхняя треугольная матрица и есть UU. Главное наблюдение алгоритма: обнулённые места под диагональю можно «переиспользовать» для хранения likl_{ik}, поэтому на практике LL и UU хранят прямо на месте исходной матрицы AA, не тратя дополнительной памяти. Диагональный элемент akk(k)a_{kk}^{(k)}, на который делим, называется ведущим (pivot).

Пример LU-разложения

Разложим матрицу

A=(211433879).A = \begin{pmatrix} 2 & 1 & 1 \\ 4 & 3 & 3 \\ 8 & 7 & 9 \end{pmatrix}.

Первый столбец: ведущий элемент a11=2a_{11} = 2. Множители l21=4/2=2l_{21} = 4/2 = 2 и l31=8/2=4l_{31} = 8/2 = 4. Вычитаем из второй строки удвоенную первую, из третьей - учетверённую:

(211011035).\begin{pmatrix} 2 & 1 & 1 \\ 0 & 1 & 1 \\ 0 & 3 & 5 \end{pmatrix}.

Второй столбец: ведущий a22=1a_{22} = 1, множитель l32=3/1=3l_{32} = 3/1 = 3. Вычитаем из третьей строки утроенную вторую - получаем UU. Собираем результат:

L=(100210431),U=(211011002).L = \begin{pmatrix} 1 & 0 & 0 \\ 2 & 1 & 0 \\ 4 & 3 & 1 \end{pmatrix}, \qquad U = \begin{pmatrix} 2 & 1 & 1 \\ 0 & 1 & 1 \\ 0 & 0 & 2 \end{pmatrix}.

Легко проверить, что LU=ALU = A. Определитель сразу читается с диагонали UU: detA=212=4\det A = 2 \cdot 1 \cdot 2 = 4.

Решение СЛАУ через LU

Главная ценность алгоритма LU-разложения матрицы - быстрое решение системы Ax=bAx = b. Подставив A=LUA = LU, получаем LUx=bLUx = b. Вводим вспомогательный вектор y=Uxy = Ux и решаем задачу в два прохода:

Ly=b(прямая подстановка),Ux=y(обратная подстановка).Ly = b \quad \text{(прямая подстановка)}, \qquad Ux = y \quad \text{(обратная подстановка)}.

Так как LL нижняя треугольная, yy находится сверху вниз:

yi=bij=1i1lijyj.y_i = b_i - \sum_{j=1}^{i-1} l_{ij}\, y_j.

Затем из верхней треугольной UU находим xx снизу вверх:

xi=1uii(yij=i+1nuijxj).x_i = \frac{1}{u_{ii}}\left(y_i - \sum_{j=i+1}^{n} u_{ij}\, x_j\right).

Каждая подстановка стоит O(n2)O(n^2) операций, тогда как само разложение - O(n3/3)O(n^3/3). Поэтому для mm разных правых частей bb выгоднее один раз разложить AA и mm раз прогнать дешёвые подстановки, вместо того чтобы mm раз решать систему методом Гаусса с нуля.

Выбор ведущего элемента и матрица перестановок

Если на очередном шаге ведущий элемент akk(k)a_{kk}^{(k)} оказывается нулём, делить нельзя - разложение A=LUA = LU без перестановок не существует. Даже когда pivot просто мал по модулю, деление на него раздувает погрешности округления. Лекарство - частичный выбор ведущего элемента (partial pivoting): на шаге kk среди элементов столбца ниже диагонали ищут максимальный по модулю и переставляют соответствующую строку наверх.

Перестановки строк фиксируются в матрице перестановок PP, и разложение принимает вид

PA=LU.PA = LU.

Тогда система решается как Ly=PbL y = Pb, Ux=yU x = y. Частичный выбор делает алгоритм численно устойчивым практически для всех задач, встречающихся на практике, поэтому именно PA=LUPA = LU реализовано в библиотеках вроде LAPACK и в функциях lu пакетов NumPy/SciPy. Близкая по духу идея устойчивости разбирается в заметке про число обусловленности матрицы: чем хуже обусловлена AA, тем важнее аккуратный выбор pivot.

Определитель и обращение через LU

Поскольку определитель произведения равен произведению определителей, а detL=1\det L = 1 (единичная диагональ), определитель исходной матрицы получается почти бесплатно:

detA=detLdetU=i=1nuii.\det A = \det L \cdot \det U = \prod_{i=1}^{n} u_{ii}.

При наличии перестановок добавляется знак: detA=(1)siuii\det A = (-1)^{s}\prod_{i} u_{ii}, где ss - число выполненных перестановок строк. Обратную матрицу A1A^{-1} тоже находят через LU: решают nn систем Ax=ekA x = e_k с единичными ортами eke_k в правых частях, используя одно и то же разложение. Это заметно дешевле, чем считать detA\det A по определению или обращать матрицу методом присоединённой матрицы.

Когда LU не подходит

LU-разложение универсально, но не всегда оптимально. Для симметричной положительно определённой матрицы выгоднее разложение Холецкого A=LLA = LL^{\top} - оно вдвое экономнее и не требует выбора ведущего элемента. Для больших разреженных систем прямое LU-разложение «забивает» нули (fill-in) и съедает память, поэтому переходят к итерационным методам - например, к методу Якоби или методу сопряжённых градиентов. Для прямоугольных и плохо обусловленных задач вместо LU берут QR-разложение или SVD. То есть LU - это рабочая лошадка для плотных квадратных систем среднего размера.

Частые ошибки

  • Деление на нулевой или малый pivot без перестановок. Если на диагонали оказался ноль, нужен частичный выбор и переход к PA=LUPA = LU; иначе алгоритм просто упадёт или выдаст мусор.
  • Путаница, где LL, а где UU. LL - нижняя с единицами на диагонали, UU - верхняя; множители likl_{ik} записывают именно в LL, а не в UU.
  • Забытый знак определителя. При нечётном числе перестановок строк определитель меняет знак - множитель (1)s(-1)^{s} терять нельзя.
  • Повторное разложение для каждой правой части. Смысл LU в том, чтобы разложить AA один раз; на каждый новый bb нужны только две дешёвые подстановки.
  • Применение к разреженным матрицам без учёта fill-in. Для больших разреженных систем плотное LU неэффективно - там уместнее итерационные методы.

FAQ

Чем LU-разложение отличается от метода Гаусса? По сути это одно и то же исключение, но записанное как факторизация A=LUA = LU. Метод Гаусса решает систему за один проход, а LU отделяет «дорогую» часть (разложение) от «дешёвой» (подстановки), позволяя переиспользовать LL и UU для разных bb.

Всегда ли существует LU-разложение? Без перестановок - только если все угловые миноры ненулевые. С частичным выбором ведущего элемента разложение PA=LUPA = LU существует для любой невырожденной матрицы.

Какова сложность алгоритма? Само разложение требует около 23n3\tfrac{2}{3}n^3 арифметических операций, а каждая последующая прямая/обратная подстановка - порядка n2n^2.

Коротко

LU-разложение матрицы представляет AA как произведение нижней и верхней треугольных множителей LL и UU и является матричной формой метода Гаусса. Алгоритм строит LL из множителей исключения, а UU - из верхней треугольной части; при нулевых или малых ведущих элементах добавляют частичный выбор и матрицу перестановок PP, получая PA=LUPA = LU. Готовое разложение позволяет дёшево решать Ax=bAx = b для многих правых частей через прямую и обратную подстановку, мгновенно считать определитель как произведение диагонали UU и обращать матрицу.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также