Main menu

Метод сплайн-коллокации: гладкие решения краевых задач без интегрирования

Альтернатива Галеркину: сила точечного совпадения

Когда речь заходит о решении краевых дифференциальных задач (будь то расчет прогиба балки или теплопроводность в стержне), большинство современных инженеров сразу вспоминают метод Галеркина и его производную — Метод конечных элементов (МКЭ). Как мы обсуждали, метод Галеркина требует интегрирования уравнения вместе с тестовой функцией по всей расчетной области («слабая» формулировка). Однако вычисление сотен тысяч интегралов для заполнения глобальной матрицы жесткости — это крайне трудоемкий вычислительный процесс. Существует ли способ искать приближенное решение без тяжелого интегрирования?

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

Базис B-сплайнов: локальность и высокая гладкость

Теоретически в качестве пробной функции можно взять один длинный глобальный полином (многочлен). Но, как мы помним из феномена Рунге, глобальные многочлены высоких степеней сильно осциллируют и ведут себя нестабильно. Идеальным базисом для метода коллокации оказались B-сплайны (базисные сплайны), разработанные Исааком Шёнбергом и Карлом де Бором.

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

Оптимальные узлы: корни полиномов Чебышева и Гаусса

Самым критическим моментом в методе сплайн-коллокации является выбор расположения самих точек коллокации. Если расставить эти точки равномерно, метод может потерять устойчивость или сходиться очень медленно. Математический анализ, проведенный Карлом де Бором и Ричардом Сварцем в 1973 году, доказал потрясающую вещь: точность метода кардинально возрастает (явление суперсходимости), если в качестве точек коллокации внутри каждого сеточного интервала использовать корни ортогональных полиномов (узлы Гаусса-Лежандра или Чебышева).

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

Подробнее

Численное интегрирование функций с сингулярностями: метод Tanh-Sinh

Когда подынтегральная функция уходит в бесконечность

Классические методы численного интегрирования (квадратуры Ньютона-Котеса, формулы Симпсона или Гаусса) блестяще справляются с гладкими функциями, которые заданы на конечном отрезке. Однако в физических задачах математикам постоянно приходится сталкиваться с интегралами, которые имеют математические особенности — сингулярности. Например, при расчетах потенциала заряженной нити или в задачах механики разрушения (напряжения на кончике трещины) подынтегральная функция может уходить в бесконечность на краях отрезка или иметь вертикальные асимптоты. Классический алгоритм, столкнувшись с бесконечностью (делением на ноль), выдаст ошибку Not-a-Number (NaN) или будет сходиться катастрофически медленно.

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

Магия нелинейных замен переменных

Второй, гораздо более мощный алгоритмический подход основан на нелинейных заменах координат. Идея заключается в том, чтобы так исказить ось интегрирования, чтобы «растянуть» проблемные участки (около сингулярности) и свести бесконечности к нулю. Одной из первых успешных замен такого рода стала подстановка Игараси-Мори-Такахаси (IMT).

Но настоящим прорывом и шедевром японской вычислительной школы стало создание в 1974 году квадратурной формулы гиперболического тангенса-синуса (Tanh-Sinh quadrature, или метод двойной экспоненциальной интеграции). Этот метод был разработан Хидетаси Такахаси и Масатаке Мори. Идея заключается во введении сложнейшей подстановки: x = tanh(pi/2 * sinh(t)). Эта функция обладает потрясающим топологическим свойством: она отображает бесконечный интервал (от минус до плюс бесконечности) строго в конечный отрезок [-1, 1].

Двойное экспоненциальное затухание

При выполнении этой замены дифференциал интегрирования (якобиан) порождает функцию, которая убывает к нулю с феноменальной скоростью — по закону двойной экспоненты: exp(-C * exp(|t|)). Эта скорость убывания настолько сокрушительна, что она способна мгновенно подавить (помножить на ноль) абсолютно любую математическую сингулярность исходной функции на краях отрезка!

После такой замены переменной мы получаем новый, гладкий и колоколообразный интеграл на бесконечной прямой, для вычисления которого применяется самое простое правило трапеций (да, базовая формула трапеций на бесконечном интервале для гладких убывающих функций работает точнее сложных методов Гаусса). Алгоритм Tanh-Sinh позволяет с феноменальной легкостью брать интегралы с любыми концевыми сингулярностями, логарифмическими разрывами или бесконечными производными, достигая невероятной точности в тысячи знаков после запятой в системах произвольной разрядности. Сегодня этот алгоритм встроен в ядра таких мощных математических систем, как MPMath в Python и Boost.Math в C++.

Подробнее

Алгоритмы на графах для разреженных матриц: Катхилл-Макки и минимальная степень

Скрытая угроза прямых решателей: проблема заполнения

Мы неоднократно обращали внимание на то, что огромные системы уравнений (СЛАУ), возникающие в инженерных расчетах, являются сверхразреженными: в них присутствуют миллионы нулей и лишь малая доля значащих чисел. Для их хранения созданы эффективные форматы вроде CSR. Однако если мы попытаемся решить такую систему точным, прямым методом (LU-разложение или разложение Холецкого для симметричных матриц), мы столкнемся с катастрофическим явлением, которое в вычислительной алгебре называется «заполнением» (fill-in).

В процессе прямого исключения переменных (вспомните метод Гаусса), вычитая одну строку из другой, алгоритм неизбежно складывает ненулевые элементы. Если в исходной строке стоял спасительный ноль, то в процессе прямого хода на его месте может появиться значащее число. К концу алгоритма матрица, которая изначально была почти пустой, рискует превратиться в гигантскую, абсолютно плотную структуру. Миллионы нулей исчезнут, алгоритм сожрет всю оперативную память кластера (Out of Memory) и процесс остановится. Как же предотвратить это катастрофическое разрастание данных?

Матрица как топологический граф

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

Порядок, в котором мы перечисляем уравнения (нумеруем переменные x1, x2, x3), не меняет физического решения системы, но он критически, на порядки, влияет на уровень заполнения матрицы нулями в памяти! Следовательно, перед тем как запустить вычислительно тяжелое LU-разложение, нам нужно запустить быстрый алгоритм переупорядочивания (эвристику на графе), который найдет оптимальную нумерацию строк и столбцов матрицы для минимизации будущего заполнения.

Ширина ленты и алгоритмы Reverse Cuthill-McKee (RCM)

Первым классом таких алгоритмов стали методы уменьшения ширины ленты (Bandwidth reduction). Исторически самым известным из них является алгоритм Катхилла-Макки (Cuthill-McKee), а точнее его улучшенная версия — обратный алгоритм Катхилла-Макки (RCM). Алгоритм начинает поиск с периферийного узла графа (узла с минимальным количеством связей) и послойно, методом поиска в ширину (BFS), перенумеровывает все связанные с ним узлы. В результате все ненулевые элементы матрицы «сбегаются» и плотно прижимаются к главной диагонали, образуя узкую ленту. Вне этой ленты остаются чистые нули, которые гарантированно никогда не заполнятся при разложении.

Для более сложных и неструктурированных 3D-сеток ленточные алгоритмы уступают место семейству методов минимальной степени (Minimum Degree Algorithm — AMD). Алгоритм AMD работает на опережение: на каждом шаге он симулирует процесс исключения Гаусса и всегда выбирает для исключения ту переменную, узел которой в графе в данный момент имеет наименьшее число соседей (минимальную степень). Это локально жадная эвристика, но она минимизирует создание новых ребер на каждом микрошаге. Сегодня мощнейшие программные комплексы на графах (такие как METIS или Scotch) выполняют глубокое иерархическое разбиение графа матрицы на кластеры, что является обязательным «нулевым» шагом перед любым суперкомпьютерным матричным расчетом.

Подробнее

Соц. сети