— 260 с. ([Электронный ресурс] — Режим доступа : http://www.altlinux.org/Books: Altlibrary/scilab) Langtangen H. P. Python Scripting for Computational Science / H. P. Langtangen.

УДК 629-78
Д.А. Храмов
Особенности численного моделирования динамики экспериментальной тросовой системы с использованием программных средств на основе языка Python
Создание космических тросовых систем (КТС) систем, состоящих из спутников, соединенных протяженными гибкими нитями представляется одним из перспективных направлений современной космонавтики [13]. Математические модели динамики КТС, как правило, достаточно громоздки. Поэтому верификация компьютерных программ, реализующих эти модели, представляет собой серьезную проблему [4]. Надежность результатов расчетов может быть обеспечена благодаря использованию различных программных средств и различных подходов к моделированию динамики подобных систем.
Рассмотрим систему, состоящую из твердого тела, подвешенного на невесомой упругой нити (рис. 1). Она представляет собой частный случай экспериментальной тросовой системы [5] и может служить для проверки программ расчета динамики последней.

Рисунок 1 – Схема модели
В [6] рассмотрены особенности исследования динамики данной системы с помощью средств численного моделирования (MATLAB), с использованием символьного вывода уравнений движения (Maple), а также физическое моделирование на основе блок-схемы рассматриваемой системы (MapleSim). Поскольку указанные программы являются коммерческими, то их совместное использование может потребовать значительных финансовых затрат. В связи с этим возникает вопрос: существует ли свободное программное обеспечение (ПО), способное заменить коммерческое в данной области расчетов. Для определенности, ограничимся сравнением с MATLAB.
Целью нашей работы является выбор свободного ПО для численного моделирования рассматриваемой системы, и сравнительный анализ особенностей моделирования с помощью данного ПО и MATLAB.
Математическая модель
Запишем уравнения движения системы, изображенной на рис. 1. Предполагая, что массой нити в сравнении с массой тела можно пренебречь, получим
13EMBED Equation.31415 (1)
где 13EMBED Equation.31415  масса тела; 13EMBED Equation.31415  радиус-вектор центра масс тела (точка 13 EMBED Equation.3 1415) относительно точки подвеса нити 13 EMBED Equation.3 1415; 13EMBED Equation.31415  сила натяжения нити; 13 EMBED Equation.3 1415  единичный вектор по направлению действия ускорения земного тяготения 13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415 (рис. 1); 13EMBED Equation.31415  кинетический момент движения тела относительно центра масс.
Предположим далее, что упругие свойства нити описываются законом Гука, а рассеивание энергии движения системы происходит за счет вязкого трения в материале нити
13EMBED Equation.31415
где 13EMBED Equation.31415 (рис. 1), 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415  номинальная длина нити; 13 EMBED Equation.3 1415 коэффициент жесткости; 13 EMBED Equation.3 1415  коэффициент демпфирования.
Для описания движения системы введем следующие правые системы координат.
13EMBED Equation.31415  лабораторная система координат (ЛСК) с началом в точке подвеса нити 13EMBED Equation.31415. Ось 13EMBED Equation.31415 направлена вдоль местной вертикали, ось 13EMBED Equation.31415 перпендикулярно плоскости наблюдения в сторону наблюдателя, ось 13EMBED Equation.31415 лежит в плоскости наблюдения;
13EMBED Equation.31415  система координат, связанная с нитью (СКН) с началом в точке 13EMBED Equation.31415 (на рис. 1 начало координат СКН смещено из соображений наглядности). Ось 13EMBED Equation.31415 направлена вдоль линии нити, соединяющей точку 13EMBED Equation.31415 и точку 13EMBED Equation.31415, ось 13EMBED Equation.31415 вдоль мгновенной угловой скорости вращения вектора 13EMBED Equation.31415;
13EMBED Equation.31415  система координат, связанная с телом (СКТ) с началом в центре масс тела 13 EMBED Equation.3 1415. Оси СКТ направлены по главным центральным осям инерции тела.
Взаимная ориентация систем координат описывается следующим образом: 13EMBED Equation.31415 и 13EMBED Equation.31415  углами Крылова 13 EMBED Equation.3 1415, соответственно углами крена, тангажа и рысканья; 13EMBED Equation.31415 и 13EMBED Equation.31415  углами 13 EMBED Equation.3 1415 (рис. 2) и радиусом-вектором 13EMBED Equation.31415 (рис. 1).

Рисунок 2  Взаимная ориентация осей ЛСК и СКН
Матрицы перехода между системами координат:
13 EMBED Equation.3 1415,
13 EMBED Equation.3 1415.
Кинематические уравнения, связывающие производные углов 13 EMBED Equation.3 1415 по времени с проекциями вектора угловой скорости 13EMBED Equation.31415 движения СКН относительно ЛСК на оси СКН имеют вид
13 EMBED Equation.3 1415 (2)
Кинематические уравнения, связывающие производные углов Крылова 13 EMBED Equation.3 1415 по времени с проекциями вектора угловой скорости 13EMBED Equation.31415 движения СКТ относительно ЛСК на оси СКТ:
13 EMBED Equation.3 1415. (3)
Уравнения движения тела (1) и кинематические уравнения (2, 3) образуют замкнутую систему уравнений 1-го порядка с 12 неизвестными.
Выбор программных средств
Ориентируясь на MATLAB как по возможностям (векторизация кода, наличие необходимых библиотек), так и по удобству использования (простота овладения языком, наличие документации, среды разработки, отладчика, профилировщика), естественно рассмотреть его ближайшие аналоги пакеты GNU Octave [8] и Scilab [9].
Несмотря на то, что отдельные тесты [10] показывают некоторое преимущество Octave по скорости вычислений в сравнении с MATLAB, Octave в целом производит впечатление пакета, находящегося в стадии разработки. Документация пакета скудна, а по сообщениям об ошибках зачастую трудно определить вызвавшие их причины. Собственная среда разработки отсутствует, а визуализация графиков происходит с помощью gnuplot.
В пакете Scilab имеется собственная среда разработки, поддерживается большое число библиотек для численных расчетов (Lapack, LINPACK, ODEPACK, Atlas и др.). В состав пакета также входит Scicos инструмент для редактирования блочных диаграмм и симуляции (аналог Simulink). Существует литература на русском языке (например, [11]).
Однако оба пакета, что называется, «движутся в колее» MATLAB, не предлагая пользователю каких-либо оригинальных решений.
Возможен другой подход: использование языка программирования общего назначения, снабженного необходимыми библиотеками. Среди таких языков в научных вычислениях вплоть до недавнего времени широко использовались C/C++ и Fortran. Однако в последние годы в этом качестве все чаще используется Python [12, 13]. Достаточно сказать, что в рейтинге популярности языков программирования от 12.2011 Python занимает 8-е место (тогда как MATLAB 22-е, а Fortran 28-е) [14].
Для работы, кроме собственно Python (в комплект входят также средства отладки и профилирования), понадобится среда разработки (например, Spyder), а также библиотеки для научных расчетов Numpy (работа с массивами), Scipy (решение дифференциальных уравнений), графическая библиотека Matplotlib и консоль IPython. Все это ПО есть в открытом доступе, как по отдельности, так и в виде готовых сборок.
Среди последних обращает на себя внимание Python(x,y) [15, 16] комплект из более чем 60 библиотек, который обновляется примерно раз в месяц. Среди библиотек, помимо перечисленных выше: SymPy выполнение символьных расчетов, PP параллельные вычисления, Qt создание графических пользовательских интерфейсов, OpenCV обработка изображений и компьютерное зрение. Именно эту сборку мы использовали в дальнейшей работе.
Особенности программной реализации
Основой расчетных программ на обоих языках является процедура численного интегрирования уравнений движения (рис. 3).
Одним из достоинств MATLAB является возможность векторизации кода, т. е. выполнения операций над массивом в целом, без использования циклов. Такая возможность для Python реализована в библиотеке Numpy [17].
В Python, в отличие от MATLAB, необходимо в явном виде импортировать требуемые функции из библиотек. Так, использованию функций Numpy в коде предшествует строка
from numpy import *
позволяющая использовать все функции Numpy в основной программе.

Рисунок 3  блок-схема программы расчета динамики системы
В табл. 1 приведены соответствия функций MATLAB и Numpy. Заметим, что индексация массивов в Python начинается с 0, а не с 1, как это принято в MATLAB.
Таблица 1
MATLAB
Numpy
Комментарии

[ 1 2 3; 4 5 6 ]
array([[1.,2.,3.], [4.,5.,6.]])
матрица размерности 2x3

a(2,5)
a[1,4]
элемент второй строки и пятого столбца

a(1:5,:)
a[0:5,:]
первые пять строк a

a'
a.T
транспонирование a

a * b
dot(a,b)
умножение матриц

1:10
arange(1.,11.)
создание диапазона значений от 1 до 10 с шагом 1

[a; b]
concatenate((a,b))
конкатенация строк a и b

A\b
linalg.solve(a,b)
решение системы A x = b

Более подробно сравнение реализаций операций над массивами в Numpy и MATLAB приведено на странице «NumPy for Matlab Users» [18]. Краткое введение в Numpy на русском языке приведено в [19].
Численное интегрирование системы ОДУ осуществляется с помощью функции integrate.odeint библиотеки Scipy [20]. Импорт этой функции осуществляется строкой
from scipy import integrate
Некоторые из функций-решателей ОДУ в MATLAB и их аналоги из Scipy приведены в табл. 2.
Таблица 2
MATLAB
Scipy
Метод интегрирования

ode113
integrate.odeint
Адамса

ode45
scipy.integrate.ode(f).set_integrator('dopri5')
Рунге-Кутта порядка 4 и 5, основанный на модификации Дормана-Принса

Рисование графика выполнялось с помощью библиотеки Matplotlib [21]. Строка кода, в которой задается возможность обращения к функциям Matplotlib через префикс p, имеет вид:
import matplotlib.pyplot as p
API Matplotlib специально разработан так, чтобы походить на API MATLAB. Фрагменты кода, отвечающие за построение графика с нанесением координатной сетки, приведены в табл. 3.
Таблица 3
MATLAB
Matplotlib

plot(t,x)
grid on
p.plot(t,x)
p.grid()
p.show()

Полный текст программ находится по адресу [22].
Результаты расчетов
Расчеты проводились при следующих значениях параметров системы: 13 EMBED Equation.3 1415 кг; моменты инерции тела 13 EMBED Equation.3 1415 кг
·м2; 13 EMBED Equation.3 1415 м; 13 EMBED Equation.3 1415 Н; 13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415 (проекция 13 EMBED Equation.3 1415 на оси СКТ). Численное интегрирование проводилось методом Адамса на промежутке времени 13 EMBED Equation.3 1415 с.
Исследовались зависимости углов 13 EMBED Equation.3 1415 (рис. 1) и 13 EMBED Equation.3 1415, а также длины нити 13 EMBED Equation.3 1415 от времени. Результаты расчетов, выполненных в Python, приведены на рис. 46 (13 EMBED Equation.3 1415 м, 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415).



Рисунок 4  График изменения угла ( со временем
Рисунок 5  График изменения угла 13 EMBED Equation.3 1415 со временем


Рисунок 6  График изменения длины нити 13 EMBED Equation.3 1415 со временем
На рис. 7 приведен график изменения во времени модуля разности расчетных значений угла (, полученных в MATLAB и Python (соответствующие графики для 13 EMBED Equation.3 1415 и 13 EMBED Equation.3 1415 аналогичны приведенному на рис. 7).
Разница расчетных значений, по-видимому, связана с тем, что пакеты реализуют различные варианты метода Адамса [23]. Так, в MATLAB решатель ode113 основан на методе Адамса-Башфорта-Моултона (Adams-Bashforth-Moulton PECE), тогда как функция integrate.odeint в Skypy использует решатель Lsoda из FORTRAN-библиотеки Odepack.

Рисунок 7  График изменения во времени модуля разности расчетных значений угла (, полученных в MATLAB и Python
В таблице 4 приведены результаты тестирования скорости расчетов MATLAB и Python при различном числе точек внутри промежутка интегрирования.
Таблица 4
Время расчета, с
Число точек


50
500
5000
50 000
500 000

MATLAB
1,09
1,11
1,28
2,58
16,9

Python
4,90
4,68
4,73
6,3-
6,09

Для тестирования использовался компьютер с процессором Intel Core 2 Duo 2.33 ГГц, 2 Гб DDR 2 ОЗУ, Windows XP SP 3 32-bit. Использовались MATLAB v7.11.0.584 (R2010b) и Python(x,y) 2.7.2.1. Тест был выполнен в консольном режиме, результаты усреднены 10 раз.
Результаты тестирования показывают некоторое преимущество MATLAB в скорости расчетов. Следует, однако, отметить, что при этом не предпринималось каких-либо специальных мер по оптимизации Python-программы. В то же время результаты других тестов, в частности, [24], показывают, что такие меры могут привести к существенному росту производительности. В частности, использование Cython [25] (такая возможность есть в Python(x,y)), что влечет за собой незначительную переделку программы, позволяет добиться быстродействия, сравнимого с программами, написанными на C++.
Выводы и перспективы использования
Сравнение Python(x,y) с MATLAB показало, что в рамках рассмотренной задачи оба пакета обладают сопоставимыми возможностями для программирования и удобством работы. Наличие обширной документации и литературы на русском языке позволяют быстро освоить Python. Существенно и то, что данное ПО никак не связано с MATLAB, и в своем развитии опирается на активное и быстро растущее сообщество Python-программистов.
Использование свободного ПО, основанного на Python, представляется перспективным и для реализации других подходов к моделированию динамических систем, рассмотренных в [5]. Так, SymPy [26] Python-библиотека для символьных вычислений уже сейчас обладает возможностями, сравнимыми с Symbolic Math Toolbox MATLAB. Заявленной же целью разработчиков является создание полнофункциональной системы компьютерной алгебры. Система компьютерной алгебры Sage [27], использующая в качестве встроенного языка Python, помимо символьных вычислений позволяет подготавливать научно-техническую документацию с использованием редактора формул и в перспективе может заменить такие пакеты как Maple и Mathematica. JModelica.org [28] программное средство для моделирования сложных динамических систем, основанное как и MapleSim на языке Modelica, использует Python в качестве языка сценариев.
Литература
 Белецкий В. В. Динамика космических тросовых систем / В. В. Белецкий, Е. М. Левин. М. : Наука, 1990. 329 с.
 Lorenzini E. C. Tethers in Space Handbook / E. C. Lorenzini, M. L. Cosmo. 3rd edition. Smithsonian Astrophysical Observatory, 1997. 241 p. ([Электронный ресурс] Режим доступа : http://www.tethers.com/papers/TethersInSpace.pdf)
 Levin E. M. Dynamic analysis of space tether missions / E. M. Levin. San Diego: American Astronautical Society, 2007. 453 p.
Храмов Д. А. Использование пакета символьных вычислений Maple для моделирования динамики космической тросовой системы со сферическим шарниром // Системные технологии. 2004. № 3 (32) с. 110–116. ([Электронный ресурс] Режим доступа : http://dkhramov.dp.ua/uploads/Sci/TSGS/ST_khramov_maple.tif)
Волошенюк О. Л., Пироженко А. В. Модель процессов стабилизации движения концевых тел вращающейся космической тросовой системы в наземных экспериментах // Техническая механика. 2010. № 3, с. 106–116.
Храмов Д. А. Особенности моделирования динамики экспериментальной тросовой системы современными компьютерными программами // Техническая механика. 2011. № 3, с. 91–102. ([Электронный ресурс] Режим доступа : http://dkhramov.dp.ua/uploads/Sci/HomePage/dkhramov.doc)
High-Performance Physical Modeling and Simulation [Электронный ресурс] : веб-страница. Режим доступа : http://www.maplesoft.com/products/maplesim/
Octave [Электронный ресурс] : веб-сайт. Режим доступа : http://www.gnu.org/software/octave/
Scilab [Электронный ресурс] : веб-сайт. Режим доступа : http://www.scilab.org/
Тестирование быстродействия MATLAB и GNU/Octave [Электронный ресурс] : веб-страница. Режим доступа : http://mydebianblog.blogspot.com/2010/10/matlab-gnuoctave.html
Алексеев Е. Р. Scilab: Решение инженерных и математических задач / Е. Р. Алексеев, Е. А. Чеснокова, Е. А. Рудченко. М. : ALT Linux ; Бином. Лаборатория знаний, 2008. 260 с. ([Электронный ресурс] Режим доступа : http://www.altlinux.org/Books: Altlibrary/scilab)
Langtangen H. P. Python Scripting for Computational Science / H. P. Langtangen. 3rd Edition Berlin, Heidelberg : Springer, 2009. 750 p.
Бизли Д. Python. Подробный справочник / Д. Бизли  СПб. : Символ-Плюс, 2010. 864 с.
TIOBE Programming Community Index for December 2011 [Электронный ресурс] : веб-страница. Режим доступа : http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Pythonxy [Электронный ресурс] : веб-сайт. Режим доступа : http://code.google.com/p/pythonxy/
Python(x, y) [Электронный ресурс] : веб-страница. Режим доступа : http://habrahabr.ru/blogs/python/113065/
NumPy [Электронный ресурс] : веб-сайт. Режим доступа : http://numpy.scipy.org/
NumPy for Matlab Users [Электронный ресурс] : веб-страница. Режим доступа : http://www.scipy.org/NumPy_for_Matlab_Users
NumPy, пособие для новичков. Часть 1 [Электронный ресурс] : веб-страница. Режим доступа : http://habrahabr.ru/blogs/python/121031/
SciPy [Электронный ресурс] : веб-сайт. Режим доступа : http://www.scipy.org/
Matplotlib [Электронный ресурс] : веб-сайт. Режим доступа : http://matplotlib.sourceforge.net/
Dkhramov.dp.ua [Электронный ресурс]. Режим доступа : http://dkhramov.dp.ua/uploads/Sci/HomePage/tb.rar
Шампайн Л. Ф. Решение обыкновенных дифференциальных уравнений с использованием MATLAB / Л. Ф. Шампайн, И. Гладвел, C. Томпсон. СПб.: Издательство «Лань», 2009. 304 с.
PerformancePython [Электронный ресурс] : веб-страница. Режим доступа : http://www.scipy.org/PerformancePython
Cython: C-Extensions for Python [Электронный ресурс] : веб-сайт. Режим доступа : http://cython.org/
SymPy [Электронный ресурс] : веб-сайт. Режим доступа : http://sympy.org/
Sage [Электронный ресурс] : веб-сайт. Режим доступа : http://www.sagemath.org/
JModelica.org [Электронный ресурс] : веб-сайт. Режим доступа : http://www.jmodelica.org/

Проведен сравнительный анализ использования пакетов Python(x,y) и MATLAB для исследования динамики экспериментальной тросовой системы. Показано, что в рамках рассмотренной задачи оба пакета сопоставимы по удобству работы и возможностям для программирования. Указаны перспективы использования свободного программного обеспечения, основанного на Python, для реализации различных подходов к моделированию динамических систем.

Проведено порівняльний аналіз використання пакетів Python(x,y) і MATLAB для дослідження динаміки експериментальної тросової системи. Показано, що в рамках розглянутої задачі обидва пакети є порівнянні за зручності роботи й можливостям для програмування. Зазначено перспективи використання вільного програмного забезпечення, заснованого на Python, для реалізації різних підходів до моделювання динамічних систем.

The comparative analysis of Python(x,y) and MATLAB usage to study the dynamics of the experimental tethered system was carried out. It is shown that within the problem framework both packages are comparable in terms of usability and programming features. Indicated the prospects of free Python-based software for the various approaches to modeling of dynamic systems.

 термин, принадлежащий разработчикам [7].
 В программе не используется.









1 (20) 2012 «Системные технологии»

13 PAGE 141315



Root EntryEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation Native

Приложенные файлы

  • doc 7067413
    Размер файла: 581 kB Загрузок: 0

Добавить комментарий