Main menu

Итерационные методы подпространств Крылова для гигантских матриц

Как решать системы с миллиардами уравнений?

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

К счастью, такие матрицы являются крайне разреженными. Более 99% их элементов — это нули. Для их хранения используются специальные форматы (например, CSR — Compressed Sparse Row), в которых хранятся только ненулевые элементы и их координаты. Однако прямые методы в процессе исключения неизбежно превращают нули в ненулевые элементы (проблема заполнения). Поэтому для решения таких огромных разреженных СЛАУ применяются исключительно современные итерационные методы, вершиной эволюции которых являются алгоритмы на основе подпространств Крылова.

Подпространства Крылова: выжимание максимума из умножения матрицы на вектор

В 1931 году русский математик Алексей Крылов опубликовал работу, которая заложила основы нового класса методов. Идея состоит в следующем: поскольку мы можем быстро умножать нашу гигантскую разреженную матрицу (назовем ее A) на вектор, почему бы не использовать операцию умножения для построения базиса, в котором мы будем искать решение?

Если мы возьмем начальный вектор невязки (r) и начнем последовательно умножать его на матрицу A, мы получим последовательность векторов: r, Ar, A^2r, A^3r и так далее. Линейная оболочка (пространство, натянутое на эти векторы) называется подпространством Крылова. Гениальность подхода заключается в том, что вместо решения системы в исходном пространстве с миллионами измерений, мы ищем приближенное решение (проекцию) в подпространстве Крылова, размерность которого мала (например, 50 или 100). На каждом шаге (итерации Арнольди или Ланцоша) к подпространству добавляется новый ортогональный вектор, и приближение становится все точнее.

GMRES и Метод сопряженных градиентов (CG)

В зависимости от свойств матрицы A применяются различные алгоритмы подпространств Крылова. Если исходная матрица симметричная и положительно определенная (что типично для задач теплопроводности и теории упругости), используется легендарный Метод сопряженных градиентов (CG). Он использует короткие рекуррентные формулы: для вычисления нового вектора нужно хранить в памяти только данные с предыдущего шага. Это делает метод фантастически быстрым и экономным по памяти.

Однако если матрица несимметричная (что часто бывает в задачах конвекции-диффузии и гидродинамики), метод CG не работает. Для таких матриц в 1986 году Саадом и Шульцем был разработан метод GMRES (Generalized Minimal Residual method). Метод GMRES минимизирует норму невязки на всем подпространстве Крылова. В отличие от CG, он вынужден хранить в памяти все базисные векторы, поэтому на практике применяется с «рестартами» (GMRES(m)): после достижения m итераций накопленные векторы сбрасываются, и процесс начинается заново с текущего наилучшего приближения. Сегодня алгоритмы подпространств Крылова, оснащенные мощными предобуславливателями (preconditioners) типа ILU или Algebraic Multigrid (AMG), являются абсолютным индустриальным стандартом при суперкомпьютерном моделировании.

Подробнее

Численное решение интегральных уравнений: методы Фредгольма и Вольтерры

Когда неизвестная функция скрыта под знаком интеграла

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

Интегральные уравнения принято классифицировать по двум признакам. Если пределы интегрирования фиксированы (постоянны), то это уравнение Фредгольма. Если верхний предел является переменной интегрирования (то есть интеграл зависит от текущего положения), то это уравнение Вольтерры, описывающее процессы эволюции с памятью. Если неизвестная функция находится только под знаком интеграла, это уравнение первого рода; если она присутствует еще и вне интеграла — это уравнение второго рода. Как и в случае с ОДУ, аналитически решить интегральные уравнения удается лишь в редких частных случаях, что делает применение численных методов абсолютно необходимым.

Метод квадратур: сведение к СЛАУ

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

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

Метод последовательных приближений (итерации Пикара)

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

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

Подробнее

Адаптивные методы интегрирования ОДУ: алгоритмы Рунге-Кутты-Фельберга

Компромисс между скоростью и точностью: проблема постоянного шага

Решение обыкновенных дифференциальных уравнений (ОДУ) методами Рунге-Кутты, которые мы рассматривали ранее, часто проводится с постоянным шагом интегрирования. Однако в реальных физических системах характер процессов может резко меняться с течением времени. Представьте космический аппарат, который летит к Луне. Большую часть пути гравитационные поля меняются очень плавно, и траекторию можно рассчитывать с огромным шагом (например, раз в час). Но при подлете к орбите Луны и выполнении маневров гравитационные силы начинают меняться стремительно. Если оставить прежний большой шаг, расчетная траектория грубо отклонится от реальной. Если же с самого начала установить микроскопический шаг «с запасом» для прохождения сложных участков, то расчет простого участка пути займет неоправданно много времени процессора.

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

Вложенные методы и оценка локальной погрешности

Блестящее решение этой проблемы предложил немецкий математик Эрвин Фельберг в 1969 году. Он разработал концепцию вложенных методов Рунге-Кутты. Идея заключается в том, чтобы на каждом шаге вычислять новое приближение функции сразу двумя методами разного порядка точности (например, четвертого и пятого порядка).

Если бы мы делали это «в лоб», объем вычислений возрос бы в два раза. Гениальность идеи Фельберга (и последующих авторов, таких как Дорман и Принс) состоит в том, что коэффициенты для методов 4-го и 5-го порядков подбираются специальным образом. Они используют одни и те же промежуточные вычисления (те самые коэффициенты наклона касательных внутри шага). То есть, вычислив набор наклонов для метода 5-го порядка, мы можем путем простого перемножения с другими весами получить и результат для 4-го порядка практически бесплатно! Разность между результатами 5-го и 4-го порядка служит превосходной оценкой локальной ошибки (погрешности усечения) на данном шаге.

Алгоритм управления шагом (Step Size Control)

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

Если ошибка оказалась больше допуска, это означает, что шаг был слишком велик. Алгоритм отбрасывает вычисленное значение, уменьшает шаг по специальной формуле (обычно умножая на коэффициент около 0.8 от расчетного оптимального, чтобы иметь запас надежности) и пересчитывает этот участок заново. Если же ошибка оказалась значительно меньше допуска, алгоритм принимает шаг как успешный, но для следующего шага автоматически увеличивает размер интервала, ускоряя симуляцию. Метод Рунге-Кутты-Фельберга (RKF45) и его более современная модификация, метод Дормана-Принса (DOPRI5), стали мировым стандартом адаптивного интегрирования и используются по умолчанию во встроенных функциях MATLAB (ode45) и библиотеках SciPy в Python.

Подробнее

Соц. сети