International conference of developers
and users of free / open source software

Применение свободного ПО для исследования поведения нелинейных динамических систем

Александра Кононова, Алексей Городилов, Москва, г. Зеленоград, Russia

LVEE 2012

This paper deals with possibility of using free software tools for research of non-linear dynamic systems. Cases of arising problems and their resolutions are presented.

В настоящее время существует множество свободных систем, которые могут использоваться при исследовании нелинейных динамических систем. Для выполнения математических вычислений наиболее известны: пакет GNU Octave, созданный как свободная альтернатива известной системы MATLAB, так что язык Octave в основном совместим с MATLAB; пакет Scilab, имеющий схожий, но несовместимый с MATLAB язык программирования; существуют узкоспециализированные программы, такие, например, как Xppaut; а также множество интересных, но плохо документированных или малоизвестных пока пакетов, таких как Euler, model-builder, freemat.

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

1. GNU Octave

В Octave существует множество функций для решения систем обыкновенных дифференциальных уравнений 1. Две из них встроенные — это lsode для решения системы ОДУ и lsode_options для задания опций работы lsode. Здесь, как и в MATLAB, существует семейство функций ode* для решения систем ОДУ различными методами. В Debian они доступны после установки пакета octave-odepkg. Наиболее часто используемые среди них — функции ode23 и ode45 (методы Рунге-Кутты). Для решения жёстких ОДУ, в отличие от MATLAB, используются функции ode5r и ode2r, а не семейство ode*s.

Для визуализации фазовой траектории на плоскости используется функция plot, в трёхмерном случае — plot3. Для того, чтобы получившийся график можно было вращать мышкой, перед запуском Octave необходимо выполнить в используемой оболочке команду GNUTERM=wxt

Рассмотрим пример — исследование модели развития вуза. Результатом является траектория системы — график её развития.
Для расчёта поведения динамической модели развития вуза 2 были заданы уравнения:
function xdot=F(t,x);
Ue = 0.62;
tR = .1;
AR = 0.5;
tS = 1;
tU = .2;
AU = 1;
AS = 2 / (Ue*AR);

xdot=[ ( -x(1) + AR*x(2) ) / tR; ( -x(2) + AS*x(1)*x(3) ) / tS; ( Ue – x(3) – AU*x(1)*x(2) ) / tU ];

endfunction;
расчёт траектории при интересующих нас начальных условиях (точка (0.5, 0.1, 0.1)) на отрезке времени от 0 до 12:

[t,x] = ode45(@F,[0 12],[0.5 0.1 0.1]);

визуализация:
plot3(x(:,1), x(:,2), x(:,3) );

На экране появится трёхмерный график — траектория развития системы.

2. Scilab

В Scilab для решения системы ОДУ предусмотрена функция ode. Метод решения задаётся её первым необязательным параметром 3.

Для визуализации рассчитанной фазовой траектории используются функции plot/plot2d для двумерного случая и param3d/param3d1 для трёхмерного.

Для расчёта вышеупомянутой динамической модели вуза задаются уравнения (совпадение с GNU Octave вследствие отсутствия матричных операций):
function xdot=F(t,x);
Ue = 0.62;
tR = .1;
AR = 0.5;
tS = 1;
tU = .2;
AU = 1;
AS = 2 / (Ue*AR);

xdot=[ ( -x(1) + AR*x(2) ) / tR; ( -x(2) + AS*x(1)*x(3) ) / tS; ( Ue – x(3) – AU*x(1)*x(2) ) / tU ];

endfunction;
Для расчёта траектории необходимо:
задать вектор-столбец x0 начальных условий, начальный момент времени t0 и вектор моментов времени t, в которых требуется рассчитать траекторию (может быть и столбцом, и строкой):
x0 = [0.5; 0.1; 0.1];
t0 = 0;
t=t0:0.1:12;
рассчитать траекторию функцией ode:
x=ode(x0, t0, t, F);
количество строк вектора x совпадает с количеством строк x0, а количество столбцов — с длиной t, т. е., для построения траектории x делится на строки:
param3d(x(:,1), x(:,2), x(:,3) );

На экране появится рассчитанная траектория.

3. Особенности экспорта в текстовый документ

Возможности Scilab и GNU Octave в построении графиков весьма обширны, но не всегда достаточны. Поэтому часто возникает необходимость сохранить траекторию в текстовый файл, который затем может быть вставлен в рисунок TikZ/PGF командой:
\draw plot[smooth] file {plots/sample.trj};

В GNU Octave сохранить матрицу координат в файл можно командой save:
save sample.trj x;
в Scilab — функцией write:
write('sample.trj',x);

4. Xppaut

Xppaut является специализированной программой для исследования нелинейных динамических систем. Она распространяется по лицензии GNU GPL и доступна в репозиториях Debian, начиная с Debian Wheezy (testing). Предназначена для численного исследования различных видов разностных и дифференциальных уравнений.
При старте программы необходимо задать исследуемую систему 4. Это делается с помощью текстового файла, формат которого описан в документации программы по адресу http://www.math.pitt.edu/ bard/xpp/help/xppodes.html.

Рассмотрим для примера классическую модель Лотки—Вольтерра. Она представляется файлом LotkaVolterra.ode:

# LotkaVolterra.ode
x’= a*x – b*x*y
y’= d*x*y – g*y
par a=1,b=2,d=3.7,g=1
init x=1,y=0.1
@ total=200
@ xp=x,yp=y,xlo=-2,xhi=5,ylo=-4,yhi=5
done

Кроме вида уравнений, необходимо задать значения параметров, начальные условия и параметры отображения — в данном случае указано, что по оси абсцисс указывается переменная x, по оси ординат — y; заданы границы для каждой из осей. Команда xppaut LotkaVolterra.ode позволит исследовать поведение системы с заданными параметрами.
При запуске xppaut без указания системы будет открыт диалог выбора файла.

На основании личного опыта работы в области исследования нелинейных динамических систем как с проприетарным, так и свободным ПО, можно сделать вывод, что возможности СПО в данной области нисколько не уступают возможностям проприетарных программ.

1. Алексеев Е. Р., Чеснокова О. В. GNU Octave для студентов и преподавателей. Донецк.: ДонНТУ, Технопарк ДонНТУ УНИТЕХ, 2011. 332 с.

2. Акулёнок М. В., Кононова А. И., Трояновский В. М. Исследование динамики сложной организационной структуры на примере вуза // Изв. вузов. Электроника (ВАК). 2011. № 1(87). С. 70–77.

3. Алексеев Е. Р., Чеснокова О. В., Рудченко Е. А. Scilab. Решение инженерных и математических задач М.: ALT Linux; БИНОМ. Лаборатория знаний, 2008. 269 с.

4. Xppaut online documentation http://www.math.pitt.edu/ bard/xpp/help/xpphelp.html

Лицензия Creative Commons
Текст тезисов доступен под лицензией Creative Commons Attribution-ShareAlike 3.0.