Численные методы для анализа | ![]() |
СГТНД    : :    алгоритмы и программы    : :    софт для бифуркаций    : :    CONTENT    : :    ненужные подробности |
«Жиан Жиакомо, заведующий отделом Универсальных превращений, «Понедельник начинается в субботу» Тактико-технические возможности программы CONTENT представлены в таблице. От себя добавлю еще раз, что если бы с помощью CONTENTа можно было бы продолжать по параметру все бифуркации коразмерности-1 предельных циклов и находить на этих кривых точки бифуркаций коразмерности-2 – я бы не стал, пожалуй искать лучшего. Разве только гомоклинические или гетероклинические траектории… но это уже клиника. Для того, чтобы работать с CONTENT не нужно уметь программировать на C. Хотя, на самом деле, если уж быть точным, тот язык на котором набираются выражения для правых частей при создании новой системы в соответствующем окне программы – это все-таки C. Но необходимый минимум знаний можно получить, рассматривая приведенные в справке примеры. Не забывайте заканчивать каждую строку точкой с запятой. CONTENT, как и его преемник MATCONT (а также, к примеру, AUTO), для нахождения предельного цикла использует метод коллокаций. Это означает, что, хотя (в отличие от AUTO) в его состав и входят подпрограммы типа Рунге-Кутта для численного решения систем ОДУ, они используются только на этапе нахождения начального приближения (или же если просто надо посмотреть вид траектории системы в фазовом пространстве при разных начальных условиях – CONTENT способен строить 2-х и 3-х мерные проекции орбит). Для отслеживания же предельного цикла его задают значениями на определенным (оптимальным в каком-либо смысле) образом выбранной сетке во времени на периоде цикла - эти значения, для начала, могут быть получены с помощью, скажем, вышеупомянутых процедур пошагового интегрирования. Причем сетка двухуровневая – то есть период цикла разбивается на отрезки, на каждом из которых в свою очередь выбирается ряд узлов. Построенная на такой сетке кусочно-полиномиальная аппроксимация подставляется непосредственно в уравнения системы ОДУ и получается система нелинейных уравнений, которая решается способом, наиболее подходящим к ее конкретной разреженной структуре. Метод коллокаций обладает массой достоинств. Снимается часть проблем, связанных с пошаговыми методами – устойчивость, необходимость выбора сечения Пуанкаре (или аналогичного условия) и т.д.. Часто, по ходу дела, есть возможность достаточно легко оценить показатели Флоке (или мультипликаторы) – по крайней мере, старшие. Вообще, считается, что для вычислительно сложных (патологических) задач метод коллокаций работает лучше, чем пошаговый метод «стрельбы» (см. напр. краткий обзор здесь). Для него разработаны методы вычисления и продолжения по параметру гомо- и гетероклинических траекторий к положениям равновесия систем ОДУ (реализовано в последней версии MATCONT и в виде примочки к AUTO97 HOMCONT). Возникают и свои проблемы (кроме чисто технических). Одна из них, лично для меня непрозрачная – как оценить точность получаемого приближения. Предоставлен, по сути, лишь один способ реального управления ею – выбор количества точек на обоих уровнях разбиения. Но как в каждом конкретном случае выбирать то или иное количество узлов? И как оно зависит от периода – при удвоениях, например. По-видимому, надо удваивать количество узлов в сетке при каждом удвоении периода. Сторонники метода коллокаций всегда подчеркивают, что этот метод позволяет работать с достаточно длинными циклами. Но при большом количестве узлов система становится неповоротливой. Впрочем, надо признать, что проблема длинных циклов представляется трудной и при выборе любого другого метода. По поводу точности отмечу еще одно обстоятельство. У любого предельного цикла есть тривиальный мультипликатор, равный 1 (он связан со сдвигами вдоль траектории). Когда отлаживаю какую-то свою программу, всегда смотрю на него: есть ли он вообще (если нет, то это означает что где-то пенка) и с какой точностью он получается – это дает мне грубое представление о точности моих вычислений (кстати, в руководстве к AUTO2000 я нашел точно такой же совет). В CONTENTе эта единичка получается всегда только с точностью до какого-то знака и повлиять на эту точность я не мог. Не знаю, с чем это связано. Может, оно так и должно быть. Возникает еще и проблема получения начального приближения, поскольку необходимо иметь всю траекторию целиком. Эта проблема, как я уже упоминал, в CONTENTе решается с помощью процедур пошагового интегрирования, например, в случае устойчивого цикла – простой намоткой на него. Есть еще возможность стартовать из точки бифуркации Хопфа. Оба способа подробно проиллюстрированы в учебнике (tutorial) на примерах. Кстати об учебнике. Он весьма полезен. Но отличительная особенность CONTENTа, на мой взгляд – это справка (help), доступная во время работы. Редко кто (по моему опыту) из разработчиков свободного софта тратит столько времени на написание контекстной справки. Достаточно подробная и информативная, с описанием ко всем окнам и по каждой бифуркации, в частности. Ей можно пользоваться даже как кратким пособием по прикладной теории бифуркаций. Есть и руководство для разработчиков (developer manual), очень лапидарно написанное. Насколько я понял, В.В. Левитин приделал к программе мощный кодогенератор, который позволяет расширять программу без перекомпиляции исходников, путем редактирования текстовых конфигурационных файлов, входящих в состав программы. |