Численные методы для анализа
нелинейных динамических систем
и существующие программные реализации.

Программы для исследования бифуркаций
CONTENT: [не]нужные подробности

СГТНД    : :    алгоритмы и программы    : :    софт для бифуркаций    : :    CONTENT    : :    ненужные подробности

english      noframes
frames  

«Жиан Жиакомо, заведующий отделом Универсальных превращений,
вначале тоже обрадовался, но, убедившись,
что «Алдан» не способен рассчитать даже элементарную трансформацию
кубика свинца в кубик золота, охладел к моей электронике
и удостаивал нас только редкими случайными заданиями.»

«Понедельник начинается в субботу»
А.Н. Стругацкий и Б.Н. Стругацкий

Тактико-технические возможности программы 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), очень лапидарно написанное. Насколько я понял, В.В. Левитин приделал к программе мощный кодогенератор, который позволяет расширять программу без перекомпиляции исходников, путем редактирования текстовых конфигурационных файлов, входящих в состав программы.