Main menu

Метод прямых (Method of Lines) для дифференциальных уравнений в частных производных

Устранение пространственных переменных

При математическом моделировании теплопроводности, химической кинетики в реакторах или процессов диффузии инженеры сталкиваются с эволюционными (нестационарными) уравнениями в частных производных (УЧП) параболического и гиперболического типов. Традиционный подход к их численному решению подразумевает одновременную дискретизацию как по пространственным координатам, так и по времени, что приводит к созданию двумерных разностных схем (например, явной схемы Эйлера или неявной схемы Кранка-Николсон). Однако существует альтернативная, весьма мощная математическая стратегия, известная как метод прямых (Method of Lines, MOL).

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

Дискретизация пространства и появление системы ОДУ

Рассмотрим, например, одномерное уравнение теплопроводности. Мы заменяем вторую пространственную производную в правой части уравнения классическим конечно-разностным приближением (по трем соседним узлам). В результате для каждого внутреннего узла сетки мы получаем отдельное обыкновенное дифференциальное уравнение (ОДУ) первого порядка по времени. Если мы разбили стержень на 1000 узлов, наше одно УЧП чудесным образом превратилось в жестко связанную систему из 1000 ОДУ.

Огромное преимущество такого подхода заключается в том, что теория и программные комплексы для решения систем ОДУ проработаны в вычислительной математике до совершенства. Нам больше не нужно вручную программировать сложные шаги по времени. Мы просто отдаем эту гигантскую систему ОДУ в руки высококлассного, «умного» интегратора (такого как LSODE, VODE или функция ode15s в MATLAB). Этот интегратор возьмет на себя самую сложную работу: он будет автоматически оценивать локальную ошибку, адаптивно менять размер шага по времени (сокращая его при резких скачках температуры и увеличивая в спокойные периоды) и автоматически менять порядок аппроксимации для поддержания идеального баланса между скоростью и точностью.

Проблема жесткости и алгоритмы Гира

Несмотря на кажущуюся простоту и элегантность, применение метода прямых таит в себе одну серьезную вычислительную угрозу. Система ОДУ, полученная в результате пространственной дискретизации параболических УЧП, всегда оказывается экстремально жесткой (stiff system). Чем мельче мы делаем пространственную сетку для повышения геометрической точности, тем более жесткой становится система по времени (число обусловленности растет пропорционально квадрату числа узлов).

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

Подробнее

Квадратуры Гаусса-Кронрода: адаптивное интегрирование с контролем ошибки

Идеальная формула и проблема оценки погрешности

В области численного интегрирования (квадратур) методы Гаусса являются абсолютным математическим совершенством. В то время как метод Симпсона по 3 равномерным узлам точно интегрирует полиномы только 3-й степени, квадратура Гаусса-Лежандра по тем же 3 узлам способна абсолютно точно проинтегрировать полином 5-й степени! Сдвигая узлы с равномерной сетки в корни ортогональных многочленов Лежандра, метод Гаусса выжимает теоретический максимум алгебраической точности (степень 2n-1 для n узлов).

Однако на практике вычислительной математики у классических формул Гаусса выявился фатальный инженерный недостаток: отсутствие дешевого способа контроля погрешности. Программа-решатель не знает, аналитическую функцию какой сложности ей «скормили». Чтобы гарантировать заданную пользователем точность, алгоритму нужно вычислить интеграл по n узлам, затем удвоить количество узлов (взять 2n) и сравнить результаты. Но узлы Гаусса для разных n не пересекаются (за исключением нулевой точки для нечетных n). Это значит, что вычисленные ранее значения функции придется выбросить в мусорную корзину и вычислять тяжелую подынтегральную функцию во всех новых 2n точках заново. При многократном измельчении это приводит к колоссальным потерям машинного времени.

Гениальное расширение Александра Кронрода

Решение этой сложнейшей проблемы было найдено в 1964 году советским математиком Александром Семеновичем Кронродом. Его идея была настолько изящна, что навсегда вошла в золотой фонд мировой вычислительной математики. Кронрод поставил задачу: как добавить к уже существующим n узлам Гаусса оптимальное количество новых узлов, чтобы старые вычисления (узлы) были полностью переиспользованы, а точность новой, составной формулы была бы максимально возможной?

Кронрод математически доказал, что оптимальным является добавление строго n+1 новых узлов (они лежат между узлами Гаусса). Полученная составная квадратура по 2n+1 узлам обладает алгебраической степенью точности 3n+1. Теперь алгоритм работает так: сначала вычисляется грубый интеграл по n узлам Гаусса. Затем вычисляются значения функции только в n+1 новых точках Кронрода. Старые и новые значения складываются с новыми весами, давая высокоточный интеграл Кронрода. Разница между интегралом Гаусса и интегралом Кронрода дает великолепную, практически бесплатную оценку текущей ошибки интегрирования!

Библиотека QUADPACK и адаптивное разбиение

Самым популярным стандартом в индустрии стала пара узлов: 7-точечная формула Гаусса и 15-точечная формула Кронрода (G7/K15). На базе этой элегантной пары бельгийскими математиками (Писсенс и де Донкер) был написан пакет программ QUADPACK.

Этот пакет реализует глобальную адаптивную стратегию. Алгоритм вычисляет интеграл на всем заданном отрезке методом Гаусса-Кронрода и оценивает ошибку. Если ошибка превышает заданный допуск, алгоритм не увеличивает порядок полиномов, а разрезает отрезок ровно пополам (строит бинарное дерево). В каждой половине процедура повторяется. Алгоритм поддерживает список (очередь) всех подотрезков, сортируя их по величине вносимой ошибки, и агрессивно дробит только те участки оси, где функция ведет себя нерегулярно (резкие скачки, осцилляции). Этот мощный, надежный и экономный алгоритм (qag в QUADPACK) сегодня является скрытым мотором интегрирования в функциях `integral` системы MATLAB и `scipy.integrate.quad` в экосистеме Python.

Подробнее

Численное решение дифференциальных уравнений с запаздывающим аргументом

Когда настоящее зависит от далекого прошлого

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

Такие процессы моделируются дифференциальными уравнениями с запаздывающим аргументом (ДДУЗА, или Delay Differential Equations, DDEs). В простейшем виде уравнение выглядит как y'(t) = f(t, y(t), y(t-tau)), где tau — это время запаздывания. Эта небольшая добавка (t-tau) радикально меняет всю математическую природу задачи, превращая конечномерное пространство состояний ОДУ в бесконечномерное. Теперь для запуска процесса интегрирования нам недостаточно знать начальное положение системы в одной точке (t=0). Нам необходимо задать начальную функцию (предысторию) на всем интервале от -tau до 0!

Распространение разрывов и сглаживание

Первая вычислительная трудность при решении ДДУЗА — это феномен распространения разрывов производных. Если начальная функция на отрезке [-tau, 0] не склеена идеально гладко с самим уравнением в точке t=0 (что бывает почти всегда), то в точке t=0 возникает разрыв первой производной решения. Поскольку значение из точки t=0 попадет в правую часть уравнения через время tau, этот разрыв породит излом уже второй производной в точке t=tau. Затем появится разрыв третьей производной в точке t=2*tau, и так далее.

К счастью, дифференциальный оператор обладает эффектом интегрирования: с каждым шагом на величину запаздывания порядок разрыва повышается, и решение становится все более гладким. Тем не менее, для высокоточных численных методов (например, Рунге-Кутты 4-го порядка) эти начальные изломы являются катастрофой — метод теряет свой порядок точности. Современный решатель ДДУЗА должен уметь алгоритмически выявлять эти точки разрывов (breaking points) и принудительно ставить узлы сетки интегрирования точно в эти точки, чтобы не интегрировать через излом.

Плотный вывод (Dense Output) и интерполяция

Вторая и главная проблема: алгоритму нужно знать значение функции y(t-tau) в прошлом. Если алгоритм интегрирует с переменным адаптивным шагом (что обязательно для эффективных расчетов), точка (t-tau) практически никогда не совпадет с теми узлами сетки, которые алгоритм уже вычислил и сохранил в памяти. Точка запаздывания попадет куда-то между прошлыми узлами.

Чтобы найти значение между узлами, алгоритму необходим механизм непрерывного (плотного) вывода (Dense Output). Классические дискретные методы Рунге-Кутты здесь не подходят. Математикам пришлось разрабатывать непрерывные методы Рунге-Кутты, которые на каждом шаге выдают не только число в конце интервала, но и специальный интерполяционный полином (сплайн Эрмита), который локально описывает функцию внутри шага с сохранением заявленного порядка точности. Обращаясь к истории полиномов, решатель вычисляет точное значение запаздывающего аргумента. Современные программы (например, dde23 в MATLAB) изящно решают системы с постоянным, переменным и даже распределенным (интегральным) запаздыванием, позволяя моделировать хаотические аттракторы Маккея-Гласса в лазерной физике.

Подробнее

Соц. сети