Построить фазовый портрет системы дифференциальных уравнений онлайн

Digiratory

Лаборатория автоматизации и цифровой обработки сигналов

Построение фазовых портретов на языке Python

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

С помощью фазовых портретов можно синтезировать регуляторы (Метод фазовой плоскости) или проводить анализ положений устойчивости и характера движений системы.

Рассмотрим построение фазовых портретов нелинейных динамических систем, представленных в форме обыкновенных дифференциальных уравнений

В качестве примера воспользуемся моделью маятника с вязким трением:

Где \(\omega \) — скорость, \(\theta \) — угол отклонения, \(b \) — коэффициент вязкого трения, \(с \) — коэффициент, учитывающий массу, длину и силу тяжести.

Для работы будем использовать библиотеки numpy, scipy и matplotlib для языка Python.

Блок импорта выглядит следующим образом:

Шаг 1. Реализация ОДУ в Python

Определим функцию, отвечающую за расчет ОДУ. Например, следующего вида:

Аргументами функции являются:

  • y — вектор переменных состояния
  • t — время
  • b, c — параметры ДУ (может быть любое количество)

Функция возвращает вектор производных.

Шаг 2. Численное решение ОДУ

Далее необходимо реализовать функцию для получения решения ОДУ с заданными начальными условиями:

Аргументами функции являются:

  • args — Параметры ОДУ (см. шаг 1)
  • y0— Начальные условия для первой переменной состояния
  • dy0 — Начальные условия для второй переменной состояния (или в нашем случае ее производной)
  • ts — длительность решения
  • nt — Количество шагов в решении (= время интегрирования * шаг времени)

В 3-й строке формируется вектор временных отсчетов. В 4-й строке вызывается функция решения ОДУ.

Шаг 3. Генерация и вывод фазового портрета

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

Аргументами функции являются:

  • args — Параметры ОДУ (см. шаг 1)
  • deltaX — Шаг начальных условий по горизонтальной оси (переменной состояния)
  • deltaDX — Шаг начальных условий по вертикальной оси (производной переменной состояния)
  • startX — Начальное значение интервала начальных условий
  • stopX — Конечное значение интервала начальных условий
  • startDX — Начальное значение интервала начальных условий
  • stopDX — Конечное значение интервала начальных условий
  • ts — длительность решения
  • nt — Количество шагов в решении (= время интегрирования * шаг времени)

Во вложенных циклах (строки 3-4) происходит перебор начальных условий дифференциального уравнения. В теле этих циклов (строки 5-6) происходит вызов функции решения ОДУ с заданными НУ и вывод фазовая траектории полученного решения.

Далее производятся нехитрые действия:

  • Строка 7 — задается название оси X
  • Строка 9 — задается название оси Y
  • Строка 10 — выводится сетка на графике
  • Строка 11 — вывод графика (рендер)

Шаг 4. Запуск построения

Запустить построение можно следующим образом:

Строка 1-2 — задание значений параметрам ОДУ

Строка 3 — формирование вектора параметров

Строка 4 — вызов функции генерации фазового портрета с параметрами «по умолчанию»

Строка 5 — вызов функции генерации фазового портрета с настроенными параметрами

При запуске программы получаем следующий результат:

Полный текст программы под лицензией MIT (Использование при условии ссылки на источник):

Фазовые портреты «на пальцах» или что можно узнать о решениях диффура, не решая его

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

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

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

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

Где x — угол отклонения стержня от вертикали, точка над x означает производную по времени, а коэффициент перед синусом зависит от размера и массы стержня.

Если амплитуда (размах) колебаний достаточно мала, синус можно приближенно заменить его аргументом (вы ведь помните первый замечательный предел, нет?). В таком случае, уравнение принимает следующий вид:

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

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

Полученный нами закон сохранения превратился в уравнение кривой на плоскости (x,u):

Для разных значений Е мы получим разные кривые. Нарисуем несколько таких линий для разных значений энергии:


По горизонтальной оси отложена величина x, по вертикальной — u

Каждая из полученных линий называется фазовой траекторией. Когда меняется состояние системы, изображающая её точка движется по одной из этих траекторий, стрелки указывают направление движения изображающей точки.

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

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

Теперь, поскольку нам понятна суть, можно перейти к чему-то посложнее. Выше мы очень сильно упростили уравнение и при этом ограничили себя только малыми колебаниями. Математик бы сказал, что мы линеаризовали уравнение и пренебрегли нелинейными эффектами. Так давайте включим в рассмотрение нелинейность. Вернёмся к самому первому уравнению — с синусом. Если мы повторим с ним то, что проделали с линейным уравнением, мы получим следующий закон сохранения:

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


По горизонтальной оси отложена величина x, по вертикальной — u

Как видите, процессы происходящее в системе стали более разнообразными:

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

При больших энергиях (зеленая траектория) колебаний уже нет, вместо этого мы получаем вращательное движение с переменной скоростью. И действительно, если достаточно сильно «толкнуть» стержень, он будет вращаться, замедляясь при подъёме и ускоряясь при спуске.

При определенном промежуточном значении энергии получается особый набор траекторий, которые отделяют друг от друга области соответствующие разным типам движения и поэтому называются сепаратрисами. И да, значение энергии для красной кривой было выбрано мной именно так, чтобы в нелинейном случае получилась сепаратриса. Каждая ветвь сепаратрисы это траектория, соответствующая особому типу движения. Посмотрим на диаграмму: движение начинается с очень маленькой скоростью от одного крайнего положения стержня, при приближении к положению равновесия скорость растёт, а после изображающая точка все более замедляясь уходит к крайнему положению, где и останавливается. Это соответствует тому, что мы поднимаем стержень вертикально вверх и отпускаем его, проносясь через положение равновесия он поднимается к верхней точке с другой стороны и останавливается.

А теперь давайте посмотрим насколько близки к истине наши выводы, сделанные на основе фазовых портретов. Перед вами график решения линейного уравнения:


По горизонтальной оси отложено время, по вертикальной — x


По горизонтальной оси отложено время, по вертикальной — x

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

Ну и напоследок: это всего лишь поверхностный экскурс в метод фазовых портретов, и словосочетание «на пальцах» попало в заголовок неспроста. Те же, кто решит углубиться в перипетии данного предмета, увидят, что за фазовыми портретами скрывается намного большее.

Построение фазового портрета в 2D и 3D в Xcos

Два подхода к построению фазового портрета на примере аттрактора Рёсслера

В представленных ранее примерах, мы рассмотрели вывод графической составляющей моделируемых систем двумя способами: с помощью осциллографов CMSCOPE и CSCOPE и путём задания контекста. Однако в обоих случаях графики строились в системах координат, где на горизонтальной оси откладывались временные отсчеты, а по вертикальной – значения функции в указанные моменты времени. И, хотя вопрос разложения дифференциальных уравнений на фазовые переменные был затронут в статье, не освещенным остался вопрос построения фазового портрета. Этой, столь полезной для анализа поведения решений моделируемых систем дифференциальных уравнений, процедуре и будет посвящён данный материал.

Мы рассмотрим два подхода к построению фазовых траекторий динамической системы на примере аттрактора Рёсслера. Данная система дифференциальных уравнений выбрана не случайно. Дело в том, что при моделировании системы Рёсслера, именно фазовый портрет представляет интерес, построение же интегральных кривых, как функций времени, не даёт полной картины происходящих в системе процессов.

Аттрактор Рёсслера — это хаотический аттрактор, которым обладает система дифференциальных уравнений Рёсслера вида:

При значениях параметров \( a=b=0.2 \) и \( 2.6 \leq c \leq 4.2 \) уравнения Рёсслера обладают устойчивым предельным циклом. При этих значениях параметров период и форма предельного цикла совершают последовательность удвоения периода.

Сразу же за точкой \( c=4.2 \) возникает явление хаотического аттрактора. Чётко определённые линии предельных циклов расплываются и заполняют фазовое пространство бесконечным счетным множеством траекторий, обладающим свойствами фрактала. Именно случай бесконечных самоповторяющихся траекторий мы и замоделируем.

Построим блок-схему системы (1), задав параметры в контексте со значениями \( a=b=0.1, с=14 \).

Для построения трёх уравнений системы (1) нам понадобятся блоки INTEGRAL_m, BIGSOM_f, PRODUCT, CONST и GAINBLK.

Двумерный фазовый портрет в Xcos

В рамках первого подхода к построению фазового портрета, воспользуемся
блоком , который располагается на палитре «Регистрирующие устройства» и осуществляет построение графика зависимости \( y(x) \), где \( x \) отвечает за значения по оси абсцисс, а значения \( y(x) \)откладываются на оси ординат.

Приступим к построению блочной диаграммы Xcos.

1. Для начала, добавьте на рабочую область 3 блока интегратора INTEGRAL_m с нулевыми начальными значениями, 4 блока BIGSOM_f, блок умножения переменных PRODUCT и блоки для задания коэффициентов CONST и GAINBLK.

Расположите указанные блоки в порядке использования в уравнениях. В результате должна получиться заготовка, приближенная к изображённой на рис. 57.

Рисунок 57. Заготовка для создания блок-схемы системы (1)

2. На построении соединительных линий между блоками Xcos для первых двух уравнений системы Рёсслера не будем подобно останавливаться, так как оно представляется легко осуществимым на основе приобретённого читателем опыта. Результат установления связей для переменных \( y, x \) отображен на рис. 58.

Рисунок 58. Первые два уравнения системы (1)

3. Сбор блок-схемы третьего уравнения системы Рёсслера нужно начать со второго слагаемого, то есть осуществить произведение переменной \( z \) и скобки \( (x-c)\), см. рис. 59.

Рисунок 59. Блок схема части третьего уравнения системы (1)

4. Осталось только подвести нужные соединительные линии на регулярные входы последнего сумматора и направить его выход на соответствующий интегратор, \( z \).

Результатом данных манипуляций будет схема, блок-изображённая на рис. 60.

Рисунок 60. Блок-схема системы Рёсслера трёх диф. уравнений

5. Далее, необходимо добавить блоки для осуществления моделирования CLOCK_c, END, проведя соединительные линии и настроив внутренние параметры блоков для моделирования на протяжении 300сек.

Для вывода фазовых траекторий, добавьте блок CSCOPXY, на регулярные входы которого направьте интересующие нас переменные \( y, x \) для вывода графика \( y(x) \), а на управляющий вход – соединительную линию от индикатора отсчетов CLOCK_c.

Обратите внимание, что названия входов блока CSCOPXY иллюстрируют построение функции \( y(x) \).

В результате блок-схема, реализующая построение траекторий аттрактора Рёсслера на фазовой плоскости примет вид, такой, как показано на рис. 61.

Рисунок 61. Блок-схема моделирования системы Рёсслера

Запустите моделирование на протяжении 300сек., настройте внутренние параметры блока CSCOPXY так, чтобы странный аттрактор хорошо вписывался бы в координатную сетку, как показано на рис. 62.

Рисунок 62. Аттрактор Рёсслера на фазовой плоскости

Итак, результатом моделирования бифуркаций аттрактора Рёсслера будет фазовая траектория \( y(x) \), иллюстрирующая сценарий перехода к хаосу через каскады бифуркаций удвоения периода Фейгенбаума, субгармонические каскады и гомоклинический каскад бифуркаций.

Построение трёхмерного графика в Xcos

Для большей наглядности результата моделирования, заменим блок CSCOPXY блоком CSCOPXY3D.

Функциональный блок располагается на палитре «Регистрирующие устройства» и служит он для отображения трёхмерной системы координат, что становится понятно из его названия.

Изменённая часть блок-схемы и результат моделирования аттрактора Рёсслера представлены на рис. 63а,б.

Рисунок 63a.Моделирование 3D системы Рёсслера — добавление блока CSCOPXY3D в блок-схему

Рисунок 63б.Результат использования Xcos блока генерации трёхмерной сетки координат

Построение 3D графика с помощью контекста в Xcos

Рассмотрим ещё один способ построения фазового портрета систем дифференциальных уравнений, теперь уже с использованием контекста и блоков буферизации данных TOWS_c.

Добавьте 3 блока буферизации TOWS_c – по одному для каждой переменной моделируемой системы.

Во внутренних параметров каждого из блоков TOWS_c укажите число запоминаемых точек = 10000 и задайте ассоциируем имена переменных x_var, y_var, z_var в соответствии с сигналами, подающимися на регулярные входы TOWS_c (см. рис. 64).

Рисунок 64. Блоки буферизации, включенные блок-схему системы (1)

Теперь значения переменных \( x,y,z \) для всех временных отсчетов записываются в одноимённые переменные x_var, y_var, z_var. Эти переменные можно использовать в контексте для построения графиков посредством стандартных Scilab – функций, например plot() и param3d().

Для того, чтобы отобразить две системы координат в одном графическом окне, добавьте в контекст следующие строки:

После запуска моделирования, появится одно графическое окно: на первой координатной сетке будут зависимости \( x(t), y(t), z(t) \), а на второй – трёхмерный график аттрактора Рёсслера. как на рис. 65.

Рисунок 65. Результат использования блоков буферизации и контекста для вывода графиков системы Рёсслера (1)


источники:

http://habr.com/ru/post/268507/

http://inclab.ru/xcos/postroeniyu-fazovogo-portreta-v-xcos