Численные методы решения СЛАУ: Гаусс, LU, Якоби и Зейдель
Гаусс с главным элементом, LU-разложение, число обусловленности и итерации Якоби и Зейделя: когда какой способ решать СЛАУ брать. Примеры с ручным счётом.
Расчёт температуры в котле на сетке 1000×1000 даёт миллион линейных уравнений с миллионом неизвестных. Прямой метод Гаусса из линейной алгебры справится? Формально да — около арифметических операций. На машине с триллионом операций в секунду это примерно неделя, плюс миллион на миллион хранимых коэффициентов — терабайты памяти. А элементы матрицы при этом почти нулевые: каждая точка сетки связана лишь с четырьмя соседями. Лобовая атака здесь расточительна — нужны другие стратегии.
Почему лобовой Гаусс — не всегда выход#
Метод Гаусса — золотой стандарт для плотных систем, где каждый коэффициент значим: он надёжен (с выбором главного элемента) и предсказуем. Уравнения упругой балки, электросети, разреженной сетки из задачи теплопроводности устроены иначе: в строке длиной миллион отличны от нуля пять элементов.
| Размер $n$ | Операций $\approx \frac{2}{3}n^3$ | Время при $10^{12}$ оп/с |
|---|---|---|
| 1 000 | 6,7·10⁸ | доли секунды |
| 10 000 | 6,7·10¹¹ | меньше секунды |
| 100 000 | 6,7·10¹⁴ | около 11 минут |
| 1 000 000 | 6,7·10¹⁷ | около 8 суток |
Время — только полбеды. Плотная матрица размера требует хранить чисел — терабайты, и это при том, что в задаче теплопроводности отличны от нуля примерно пять чисел в строке. Вся конструкция держится на одной мысли: и время, и память тратятся на нули. Отсюда два направления атаки — умные прямые методы, которые учитывают структуру заполнения, и итерационные, которые нулей вообще не касаются.
Выбор главного элемента: спасение от катастрофы#
Решим руками маленькую систему — и устроим ей маленькую ручную катастрофу:
Гаусс без затей исключает из второй строки: ведущий элемент , множитель . Вторая строка превращается в . Если машина хранит лишь три значащие цифры, оба числа округляются до , и выходит . Обратный ход: , откуда . Не «немного неточно» — совсем другой ответ: ноль вместо единицы, стопроцентная ошибка.
- Смотрим на первый столбец: — меняем строки местами, ведущим становится элемент
- Исключаем : множитель ; вторая строка: , то есть
- Округления до трёх цифр почти ничего не портят: , обратный ход даёт
- Ошибка порядка — три верные цифры вместо откровенного мусора
Механика катастрофы: крошечный ведущий элемент порождает огромный множитель, который раздувает ошибки округления до размеров самого ответа. Компьютер не ошибается — он честно делит на то, что ему подсунули. Лечение называется выбором главного элемента: на каждом шаге переставляйте строки так, чтобы ведущим становился наибольший по модулю элемент столбца. Стоит перестановка почти ничего, а от подобной катастрофы спасает.
LU-разложение: одна факторизация на много правых частей#
Гаусс делает две вещи одновременно: приводит матрицу к треугольному виду и правую часть — вместе с ней. Если их разделить, получится LU-разложение (что это даёт при многих правых частях и как считать L и U — отдельная словарная статья): , где — нижнетреугольная с единицами на диагонали, — верхнетреугольная. Решение распадается на два треугольных:
Зачем разделять? Затем, что факторизация — дорогой этап порядка , а оба треугольных хода — дешёвые, порядка . Если правых частей много (та же матрица жёсткости при разных нагрузках; нормальные уравнения МНК при переборе моделей), матрицу факторизуют один раз, а дальше каждая новая правая часть обходится в копейки. Мини-пример: . Для : из получается , из — . Подстановка в исходную систему подтверждает.
Число обусловленности: когда виновата не программа#
Вот система, которая сведёт с ума любой алгоритм:
С правой частью решение — . Сдвинем второй компонент на : при решение ускакивает в . Изменение данных на пять стотысячных — изменения решения в разы. Это свойство самой задачи, и называется оно плохой обусловленностью. Мерой служит число обусловленности : во сколько раз относительная ошибка решения может превысить относительную ошибку данных. Здесь — теряются около четырёх цифр точности, что бы вы ни программировали.
Полезная модель: — считайте, что младших цифр результата ненадёжны. Классический пациент — матрица Гильберта с элементами : уже при обусловленность порядка , и даже точный алгоритм в двойной точности сохранит три-четыре верные цифры. Откуда такие матрицы берутся? Из постановок задач: регрессия со степенями даёт матрицу Вандермонда, обработка сигналов — матрицы Тёплица. Прежде чем обвинять программу, посчитайте — или хотя бы чуть шевелите правую часть и смотрите, как пляшет ответ: если от пыли в пятом знаке решение меняется в разы, вы имеете дело с обусловленностью, а не с багом. Спасает тут не алгоритм, а пересмотр постановки: больше данных, регуляризация, другая параметризация. Формальное определение через нормы матриц даёт статья число обусловленности.
Итерации Якоби и Зейделя: как это работает#
Идея итерационных методов: угадать начальное приближение и уточнять его по простому правилу. Разрешим каждое уравнение относительно «своей» диагональной переменной. Для системы , (решение ) получаем:
Стартуем с нуля. Первая итерация: , . Вторая: , . Значения прыгают вокруг решения, но амплитуда падает — итерации сходятся. Метод Зейделя отличается одной деталью: свежие компоненты подставляются немедленно, не дожидаясь конца итерации:
| $k$ | Якоби: $x^{(k)};\ y^{(k)}$ | Зейдель: $x^{(k)};\ y^{(k)}$ |
|---|---|---|
| 1 | 1,2; 2,1 | 1,2; 1,98 |
| 2 | 0,99; 1,98 | 1,002; 1,9998 |
| 3 | 1,002; 2,001 | 1,00002; 1,999998 |
| решение | 1; 2 | 1; 2 |
Сходятся ли итерации? Точный критерий — спектральный радиус матрицы перехода меньше единицы; проверять его в лоб тяжело, поэтому пользуются достаточным условием: строгое диагональное преобладание для каждой строки. В нашем примере — выполняется с запасом, и оба метода сходятся.
Разгадка ускорения — в матрице перехода. У Якоби её спектральный радиус здесь равен : каждая итерация сокращает ошибку примерно в десять раз. У Зейделя радиус равен квадрату якобиевского — , и ошибка падает в сто раз за итерацию. Числа из таблицы подтверждают: после третьей итерации Якоби ошибся на , Зейдель — на . Общий закон: чем больше диагональный элемент на фоне остальных в строке, тем меньше радиус и быстрее сходимость.
Практическое замечание: диагональное преобладание не экзотика, а норма жизни для сеточных задач. Уравнение теплопроводности связывает температуру каждого узла с четырьмя соседями, и её диагональный коэффициент по модулю не меньше суммы влияний соседей. Проверка занимает одну строку кода: обойти строки, сравнить модули. Если преобладания нет, но матрица симметричная и положительно определённая, работает метод сопряжённых градиентов — прямой наследник идей этого урока.
Прямая или итерационная стратегия: что выбирать#
| Критерий | Прямые (Гаусс, LU) | Итерационные (Якоби, Зейдель) |
|---|---|---|
| Размер/заполненность | Плотные, до – | Разреженные и огромные: сетки, графы |
| Стоимость | один раз | на итерацию, их много |
| Ответ | Точный за конечное число шагов (с точностью округлений) | Приближённый: точность растёт с числом итераций |
| Гарантии | Есть при выборе главного элемента | Требуют сходимости: преобладание диагонали или симметрия + положительная определённость |
| Память |
- Маленькая плотная система — Гаусс с главным элементом, без вариантов
- Много правых частей при одной матрице — LU-разложение: факторизация один раз, дальше по на правую часть
- Огромная разреженная система — Зейдель и его старшие братья (сопряжённые градиенты, многосеточные)
- Плохая обусловленность — враг любой стратегии: проверяйте , а не только код
Куда двигаться дальше: посчитайте руками пару итераций на своей системе из задачника, потом прогоните её в тренажёре СЛАУ — расхождение ручного счёта и машины само покажет, где вы ошиблись. Как устроен метод Гаусса по шагам с операциями над строками, есть в разборе задач на СЛАУ; термин метод Гаусса и определитель — в словаре. А нелинейный собрат этой истории — метод Ньютона, где на каждом шаге решается своя линейная система, — разобран в уроке про решение нелинейных уравнений.
В системе , метод Гаусса без выбора главного элемента (три значащие цифры) выдал вместо . Причина?
Метод Якоби для системы , стартует с . Чему равна первая итерация?
Число обусловленности матрицы . Сколько цифр может потерять решение из-за неточности данных?
Частые вопросы
Чем метод Зейделя отличается от метода Якоби и что лучше?
Якоби на новой итерации использует только значения предыдущей: компоненты можно считать даже параллельно. Зейдель подставляет свежепосчитанные компоненты сразу, поэтому обычно сходится быстрее — на тестовой системе после двух итераций ошибка в десять раз меньше. Плата — потеря естественного параллелизма. Выбор между ними часто диктуется архитектурой компьютера.
Как понять, что метод итераций сойдётся, не считая итерации?
Проверьте достаточное условие — строгое диагональное преобладание: в каждой строке модуль диагонального элемента больше суммы модулей остальных. Выполняется — Якоби и Зейдель сходятся. Более общий критерий — спектральный радиус матрицы перехода меньше единицы. Если условие нарушено, иногда помогает простая перестановка уравнений местами.
Зачем нужно LU-разложение, если метод Гаусса и так решает систему?
Гаусс решает одну систему, а LU-разложение готовит матрицу к любой правой части. Факторизация стоит порядка , но делается один раз; дальше каждая новая правая часть решается двумя треугольными ходами за операций. В расчётах конструкций при разных нагрузках или в МНК при переборе моделей это экономит большую часть работы.
Что делать, если решение СЛАУ получается явной ерундой?
Проверьте по порядку: подстановку в уравнения (не ошибка ли кода), выбор главного элемента (не делите ли на крошку) и обусловленность матрицы. Если огромно — данные не позволяют получить точное решение в принципе: почти параллельные уравнения означают, что часть информации о решении в них просто не записана. Тогда меняют постановку задачи, а не алгоритм.
Готовитесь к контрольной?
Чеклист тем по «Численные методы»: что вы уже умеете, что повторить и в каком порядке.
Открыть чеклист предмета →
Проверьте себя в бою
Босс-экзамен по «Численные методы»: квизы всех уроков плюс бесконечный поток сгенерированных задач. Каждая попытка — новый расклад.
Начать босс-экзамен →