Main menu

Итерационные методы решения СЛАУ: методы Якоби и Гаусса-Зейделя

Почему прямых методов бывает недостаточно?

Ранее мы рассматривали метод Гаусса как основной инструмент для точного решения систем линейных алгебраических уравнений (СЛАУ). Однако на практике, особенно при численном решении дифференциальных уравнений в частных производных (например, в задачах теплопроводности или гидродинамики), возникают системы колоссальных размеров — миллионы и даже миллиарды уравнений. Матрицы таких систем являются разреженными: подавляющее большинство их элементов равно нулю. Использование прямого метода Гаусса для таких матриц нецелесообразно. Во-первых, он требует гигантского объема памяти (заполнение нулей ненулевыми элементами в процессе исключения), а во-вторых, вычислительная сложность прямого метода растет пропорционально кубу размерности матрицы (O(N^3)). В этих случаях спасают итерационные методы.

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

Метод простой итерации (Метод Якоби)

Метод Якоби является концептуально самым простым итерационным методом. Идея заключается в том, чтобы выразить из первого уравнения системы первую неизвестную x_1, из второго — x_2, и так далее до x_n. Таким образом, мы получаем систему уравнений, где слева стоят неизвестные, а справа — выражения, зависящие от всех остальных неизвестных.

Алгоритм работает следующим образом: мы выбираем начальное приближение (часто это просто нулевой вектор) и подставляем его в правые части уравнений. Вычислив значения правых частей, мы получаем новое, более точное приближение вектора решений (первую итерацию). Затем это новое приближение снова подставляется в правые части для получения второй итерации, и так далее. Огромным преимуществом метода Якоби является его идеальная приспособленность к параллельным вычислениям на современных видеокартах (GPU) или суперкомпьютерах, так как вычисление каждой компоненты нового вектора не зависит от вычисления других компонент на текущем шаге.

Метод Гаусса-Зейделя и условия сходимости

Метод Гаусса-Зейделя представляет собой логическое улучшение метода Якоби. Немецкий математик Филипп Людвиг фон Зейдель заметил, что в процессе вычисления нового вектора мы можем использовать уже обновленные значения компонент. То есть, вычислив новую компоненту x_1, при вычислении x_2 мы подставляем не старое значение x_1 с предыдущей итерации, а только что найденное, более точное. Благодаря этому метод Гаусса-Зейделя сходится в среднем в два раза быстрее метода Якоби и требует меньше оперативной памяти для хранения промежуточных векторов.

Важнейшим вопросом для любых итерационных методов является сходимость. В отличие от прямых методов, они сходятся не всегда. Достаточным условием сходимости для методов Якоби и Зейделя является строгое диагональное преобладание матрицы коэффициентов. Это означает, что модуль элемента на главной диагонали в каждой строке должен быть больше суммы модулей всех остальных элементов этой строки. К счастью, матрицы, возникающие при дискретизации многих физических процессов, изначально обладают этим спасительным свойством.

Подробнее

Численное дифференцирование: аппроксимация производных и конечные разности

Когда необходимо численное дифференцирование?

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

Численное дифференцирование становится необходимым в двух основных случаях. Во-первых, когда функция задана алгоритмически (например, в виде сложной компьютерной подпрограммы или черного ящика), и получить ее производную аналитически невозможно. Во-вторых, когда функция задана в виде дискретного набора точек (таблично) по результатам физического эксперимента, наблюдений или показаний датчиков. В этом случае мы просто не имеем формулы, которую можно было бы продифференцировать. Вычисление скорости объекта по таблице его координат или вычисление ускорения по таблице скоростей — типичные задачи численного дифференцирования.

Формулы конечных разностей

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

  • Правая (левая) разность. Вычисляется по формуле: f_prime(x) приближенно равно (f(x+h) - f(x)) / h. Это простейшая формула, имеющая порядок точности O(h). Она несимметрична и вносит определенное смещение в результат вычислений, но часто используется на границах интервалов, где данные с одной из сторон отсутствуют. Аналогично записывается левая разность: (f(x) - f(x-h)) / h.
  • Центральная разность. Эта формула использует точки по обе стороны от точки интереса: f_prime(x) приближенно равно (f(x+h) - f(x-h)) / (2*h). За счет симметрии центральная разность обладает гораздо более высокой точностью — второй порядок аппроксимации O(h^2). Это означает, что при уменьшении шага h в 10 раз, ошибка метода уменьшится в 100 раз. Центральные разности являются золотым стандартом в численном моделировании при решении дифференциальных уравнений в частных производных.

Парадокс численного дифференцирования

На первый взгляд кажется, что для получения идеальной точности нужно просто взять шаг h как можно ближе к машинному нулю. Однако здесь возникает знаменитый парадокс численного дифференцирования: операция дифференцирования является некорректно поставленной задачей по Адамару.

При уменьшении шага h погрешность метода (усечения ряда Тейлора) действительно уменьшается. Но в формулах разностей в числителе мы вычитаем два очень близких числа: f(x+h) и f(x). При ограниченной разрядности ЭВМ это приводит к так называемой потере значащих цифр из-за катастрофического взаимного уничтожения. Разность близких чисел обрастает «цифровым шумом», а затем эта ошибка делится на очень малое число h, что приводит к гигантскому взрыву погрешности округления.

Таким образом, график полной погрешности имеет форму буквы «V». Слева погрешность велика из-за ошибок округления, справа — из-за математического усечения. Задача инженера или математика — найти оптимальный шаг h, находящийся на дне этой впадины, где сумма обеих ошибок минимальна. Для 64-битных систем (double precision) оптимальный шаг обычно лежит в районе квадратного корня из машинного эпсилон (примерно 10^-8).

Подробнее

Прямые методы решения систем линейных уравнений (СЛАУ): метод Гаусса

Значение СЛАУ в вычислительной практике

Системы линейных алгебраических уравнений (СЛАУ) составляют основу вычислительной математики. К решению СЛАУ сводятся задачи из самых разных областей: от аппроксимации функций и численного интегрирования дифференциальных уравнений до расчета электрических цепей, анализа строительных конструкций методом конечных элементов и алгоритмов машинного обучения. Огромное количество нелинейных задач в процессе линеаризации (например, в многомерном методе Ньютона) в конечном итоге требует многократного решения СЛАУ на каждой итерации.

Методы решения СЛАУ делятся на две большие группы: прямые (точные) и итерационные. Прямые методы позволяют найти точное решение (в предположении отсутствия ошибок округления) за заранее известное, конечное число арифметических операций. Итерационные методы строят последовательность приближений, которая стремится к точному решению бесконечно. Сегодня мы рассмотрим самый известный прямой метод.

Классический алгоритм Гаусса

Метод Гаусса (метод последовательного исключения неизвестных) изучается еще в школьном курсе алгебры. Его алгоритмическая суть заключается в преобразовании исходной матрицы системы к верхнетреугольному виду с помощью элементарных преобразований строк. Алгоритм Гаусса состоит из двух этапов: прямого хода и обратного хода.

Прямой ход начинается с первого уравнения. С помощью первого уравнения переменная x_1 исключается из всех последующих уравнений системы путем умножения первой строки на соответствующий коэффициент и вычитания ее из остальных строк. Затем мы переходим ко второму уравнению и исключаем переменную x_2 из всех уравнений ниже второго. Этот процесс продолжается до тех пор, пока в последнем уравнении не останется только одна неизвестная переменная x_n. После прямого хода матрица коэффициентов приобретает верхнетреугольный вид: ниже главной диагонали находятся только нули.

Обратный ход начинается с конца. Из последнего уравнения тривиально находится значение переменной x_n. Найденное значение подставляется в предпоследнее уравнение, откуда вычисляется x_{n-1}. Процесс «поднятия» по треугольной матрице продолжается вплоть до первого уравнения, в результате чего находятся все неизвестные вектора решения.

Проблема малых ведущих элементов и выбор главного элемента

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

Для решения этой проблемы применяется модификация метода Гаусса с выбором главного элемента (частичный пивотинг). На каждом шаге прямого хода программа просматривает текущий столбец (среди не преобразованных строк) и находит максимальный по модулю элемент. Затем строка с этим максимальным элементом меняется местами с текущей рабочей строкой. Это гарантирует деление на наибольшее возможное число, что минимизирует накопление ошибок округления и делает метод Гаусса исключительно надежным инструментом для решения плотных СЛАУ умеренной размерности.

Подробнее

Соц. сети