LXF109:SciLab

Материал из Linuxformat.

Перейти к: навигация, поиск
SciLab

Содержание

Пакеты расширений и новые версии

ЧАСТЬ 4 Завершая свой цикл статей об открытой вычислительной лаборатории, Александр Бикмеев научит, как нарастить возможности Scilab, и покажет, что еще есть в мире свободного математического ПО.

За три прошедших месяца мы с вами познакомились с некоторыми возможностями системы компьютерной алгебры Scilab 4.1.2. Мы занимались простыми вычислениями, создавали свои функции и модели для изучения физических процессов. В заключение мне хотелось бы кратко рассказать о пакетах расширений (Toolbox), новых функциях, появившихся в Scilab 5.0, и сообщить еще об одном проекте, не попавшем в Сравнение данного номера.

Расширения

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

Такие дополнения для систем численных расчетов обычно называют Toolbox [набор инструментов] или «пакет расширений». Для Scilab существует два вида подобных пакетов: расширения базовой системы и расширения системы визуального моделирования Scicos. Ссылки на те и другие можно найти в репозитории пакетов расширений (http://www.scilab.org/contrib), а также на официальном сайте Scicos http://www.scicos.org.

Пакеты Scilab разнородны по своей структуре. Это связано с тем, что они создавались на протяжении почти десяти лет существования системы: какие-то уже не поддерживаются, а какие-то только родились; однако в корневой директории любого пакета должны быть подкаталог macros, содержащий файлы исходных текстов его функций (расширение .sci) и/или их бинарные, то есть уже скомпилированные, версии (расширение .bin), и два главных файла: builder.sce и loader.sce, для сборки и загрузки пакета соответственно. Обычно в корневом каталоге пакета также присутствуют файлы readme.txt или instal.txt, в которых описывается процесс установки. Поскольку некоторые пакеты создаются на языке С/C++ или Fortran, то в корневом каталоге могут также присутствовать другие файлы, позволяющие собрать пакет стандартным способом: ./configure && make. Мы же рассмотрим установку пакетов средствами самого Scilab.

Итак, предположим, вы скачали пакет OpenFEM (http://www-rocq.inria.fr/OpenFEM), который является инструментарием для твердотельного моделирования при помощи метода конечных элементов. Распакуйте его в какой-нибудь каталог, но помните, что данное место будет постоянным, то есть если вы впоследствии удалите эту директорию, то уничтожите вместе с ней и пакет OpenFEM, что может привести к нестабильной работе всей системы. Поэтому создайте в своем домашнем каталоге специальный подкаталог, в который будете помещать все устанавливаемые пакеты расширений, и назовите его, например, ToolBoxes. Затем распакуйте в него загруженный вами архив. Таким образом, пакет окажется в каталоге /home/username/Toolboxes/openfem-scilab.

Теперь нам необходимо скомпилировать пакет, то есть создать бинарные версии функций. Для этого запустите Scilab и выполните в главном окне команду (только не забудьте заменить username на ваше имя пользователя):

--> exec('/home/username/Toolboxes/openfem-scilab/builder.sce');

Если вы не поставите в конце точку с запятой, то весь процесс сборки будет отображаться на экране. Иногда это полезно, но чаще всего лишь засоряет консоль второстепенной информацией. По завершении сборки вновь появится приглашение консоли Scilab, и вы сможете загрузить пакет командой

--> exec('/home/username/Toolboxes/openfem-scilab/loader.sce');

Многие пакеты содержат документацию по каждой своей функции, и, что самое приятное, после их загрузки данная информация появляется в браузере справки. Чтобы проверить это, откройте окно справки Scilab (Help > Help browser) и перейдите в конец списка. Если сборка прошла успешно, вы увидите там три новых пункта, начинающихся с OpenFEM. Однако если вы скомпилировали пакет, но не подгрузили его, то к справке ничего не добавится. То есть, после закрытия и повторного запуска Scilab новые пункты исчезнут и не появятся до тех пор, пока вы опять не подгрузите данный модуль.

Важно запомнить, что, во-первых, нельзя изменять путь к скомпилированному пакету расширений, а во-вторых, необходимо выполнять команду загрузки пакета перед каждым использованием его функций. Если вы постоянно работаете с каким-либо пакетом расширений и не хотите постоянно вводить команду для его загрузки, то можете создать файл с перечнем команд, которые необходимо выполнить при запуске Scilab, и поместить в него команды загрузки всех необходимых вам пакетов расширений. Для этого откройте домашний каталог в Konqueror или Nautilus, включите отображение скрытых файлов (Вид > Показывать скрытые файлы) и перейдите в каталог .Scilab/scilab-4.1.2. Затем щелкните в пустой области окна правой кнопкой мыши и выберите пункт Создать > Текстовый файл. В появившемся диалоге введите имя файла .scilab и нажмите клавишу ENTER. Теперь введите команду загрузки необходимого вам пакета или пакетов, сохраните и закройте файл. В дальнейшем вы можете добавлять сюда любые команды, которые будут вам необходимы, и они будут выполняться сразу после запуска Scilab до того, как появится приглашение консоли.

Если пакет по каким-то причинам не собирается, то не завершайте команду его сборки символом «точка с запятой» – это поможет вам выявить проблемы. Предположим, вы скачали пакет ANN Toolbox 0.4.2 для работы с нейронными сетями. Скомпилировать его в текущем состоянии не получится – видимо, это связано с тем, что он был разработан еще для Scilab версии 2.6. При отсутствии точки с запятой в конце, команда сборки выдает множество сообщений с текстом: «...endfunction Missing...» – отсутствует служебное слово endfunction, которое закрывает описание функции. Чтобы привести пакет в рабочее состояние, достаточно войти в подкаталог macros и добавить в конец всех файлов с расширением .sci необходимое служебное слово. После этого пакет соберется без проблем.

Установка пакетов расширений системы визуального модулирования Scicos ничем не отличается от установки обычных пакетов самого Scilab, но их также можно собрать обычным способом, поскольку большинство из них представляют собой подпрограммы, написанные на C/C++, реже на Fortran. Однако по моему опыту использования MODNUM (http://www.scicos.org/ScicosModNum/modnum_web/web/eng/eng.htm), пакета для моделирования систем связи, лучше все-таки использовать уже готовые скомпилированные версии, которые достаточно лишь распаковать в какой-либо каталог и подгрузить обычным образом.

Многие пакеты поставляются с файлами примеров или демонстраций, которые обычно расположены в каталогах examples и demos соответственно. Чтобы открыть их, следует выполнить ту же самую команду exec с указанием полного пути к файлу примера или демонстрации. Постоянное использование полной записи пути к файлу утомительно, поэтому вы можете просто сменить текущий каталог на каталог с примерами/демонстрациями. Делается это при помощи следующих команд.

--> SavedDir = pwd()
--> chdir('/home/username/Tolboxes/openfem-scilab/demos');
--> exec('gartfe.sce')
.....
--> chdir(SavedDir);

В первой строке мы запоминаем текущий рабочий каталог, во второй – меняем его на каталог с демонстрационными файлами пакета OpenFEM и выполняем демонстрационный файл. Затем мы можем выполнить еще несколько действий (это обозначено многоточием). Последняя команда позволяет вернуться к стандартному рабочему каталогу, который мы запомнили ранее.

Пользуясь приведенной выше информацией, вы сможете найти, загрузить и установить необходимые вам пакеты расширений. Перечислять все имеющиеся варианты не имеет смысла, поскольку, во-первых, их достаточно много, а во-вторых, каждый пакет может содержать от 10 до 100 функций, что просто невозможно описать в рамках одной статьи. Поэтому подключайтесь к сети Интернет, заходите по указанным ссылкам или открывайте ваш любимый поисковик и ищите то, что вам нужно. А может быть вы чувствуете в себе силы создать новый Toolbox, или портировать какой-либо пакет из GNU Octave или Matlab? Действуйте, и пусть это принесет пользу не только вам, но и сообществу.

Scilab 5.0

В самой первой статье (LXF106) я говорил, что в мае 2008 разработчики обещают выпустить финальный релиз версии 5.0. Однако, как часто бывает со свободными (и не только свободными) проектами, этого не случилось. 23 июля на сайте появилась лишь версия 5.0-beta4. Она содержит хорошо известную ошибку графики, не позволяющую использовать ее на компьютерах с различными видеокартами. И хотя о ней было заявлено еще в апреле, разработчики до сих пор ее не исправили, поэтому поработать с графикой удастся не всем. Впрочем, вы можете установить на виртуальную машину Ubuntu Linux (при сборке из исходных текстов выявились определенные зависимости, позволившие предположить, что разработчики Scilab 5 используют Ubuntu, а может, и другой дистрибутив на базе Debian) и запустить двоичную версию. Именно так мне и удалось посмотреть все, что есть в 5.0-beta4. Можете пользоваться любым менеджером виртуальных машин; главное – это поиграть с настройками видеокарты и постараться выбрать более-менее старую модель с поддержкой OpenGL.

Рис. 1. Новый пользовательский интерфейс Scilab 5.0 с окном автодополнения при вводе.
Рис. 1. Новый пользовательский интерфейс Scilab 5.0 с окном автодополнения при вводе.
Рис. 2. Окно инструмента для конвертирования файлов Matlab в синтаксис Scilab.
Рис. 2. Окно инструмента для конвертирования файлов Matlab в синтаксис Scilab.

Прежде всего, изменилась лицензия Scilab – теперь он распространяется на условиях CeCILL, полностью совместимых с GPL v.2. Таким образом, Scilab стал полностью свободным приложением.

С точки зрения пользователя самым очевидным является изменение графического интерфейса. Он был переписан на Java Swing и стал более современным: появилась панель инструментов, изменились пункты меню, добавилась возможность настройки цвета фона и шрифта консоли Scilab (главное окно), улучшена работа с буфером обмена, в консоли теперь можно вводить комментарии и на русском языке. Кроме того, в консоли появилась возможность автоматического дополнения команд. То есть, вы можете ввести несколько букв, затем нажать клавишу Tab (Ctrl+Пробел), и на экране появится окно с вариантами продолжения, как показано на рис. 1.

В появившемся меню Applications находятся пункты, при помощи которых можно вызвать дополнительные приложения:

  • Редактор сценариев для создания файлов функций. С предыдущей версии Scilab он практически не изменился. В данном релизе не поддерживается режим отладки.
  • Среду визуального моделирования систем Scicos, ту же версию, что и в Scilab 4.1.2.
  • Графический редактор графов и сетей. Это новинка данной версии. Здесь вы можете нарисовать граф мышью и задать свойства его ребер и вершин, а затем просто выбрать меню Compute [Вычислить] чтобы найти кратчайший путь или выполнить другую операцию.
  • Конвертор Matlab-Scilab. Этот новый инструмент представляет собой окно, в котором вы можете выбрать исходный и конечный файлы, а также настроить некоторые параметры преобразования. Более того, в качестве источника можно указать целую папку, что намного облегчает преобразование имеющихся пакетов расширений;
  • Редактор переменных. Здесь вы можете просматривать описанные переменные данного сеанса, изменять их и удалять. Список переменных можно фильтровать по типу данных и/или шаблону имени. Редактор очень удобен и практически незаменим в процессе разработки приложений.

Улучшен также встроенный инструмент просмотра справочной информации, изменился внешний вид, добавлена возможность отправки текста справки на печать. Переработан и сам справочный материал – улучшена структура, появился раздел User's Guide [Руководство пользователя]. Впрочем, не все разделы справки еще заполнены, в некоторых местах вместо текста находится либо краткий перечень функций раздела, либо фраза TODO [сделать]. Так что справка еще будет дорабатываться, а со стороны российского пользователя хотелось бы увидеть русифицированную версию. Желающие поработать есть? Кстати, пункт запуска демонстраций переехал в меню справки и обзавелся новым интерфейсом в виде нескольких раскрывающихся списков, что сделало навигацию по демонстрационным примерам намного легче и нагляднее, да и набор примеров расширился.

Реализована новая архитектура Scilab, которая должна позволить обновлять систему и пакеты расширений при помощи патчей, тогда как все предыдущие версии просто переустанавливались. Обновился движок отрисовки 3D – теперь он основан на JOGL, и поверхности действительно выглядят не такими угловатыми, как раньше.

Набор пакетов расширений (Toolbox), входящих в стандартную поставку, был расширен. Появились: FFTW (быстрое преобразование Фурье), Genetic Algorithms (работа с генетическими алгоритмами), Metanet: Graph and Network (пакет для работы с графами и сетями), Simulated Annealing (пакет оптимизации моделей), пакеты для работы с разреженными и многомерными матрицами, для экпорта результатов в TeX – и многие другие. Добавлены новые и переписаны некоторые старые функции для управления оболочкой, историей, вводом и выводом информации в/из файлов. Таким образом, функциональность стандартной версии пакета значительно расширилась.

Многим пользователям, которые не очень-то дружат с английским языком, может быть, полегчает, поскольку в текущей SVN-ветке я обнаружил файлы русской локализации оболочки. Более того, интерфейс версии 5.0-beta4 под Windows уже русифицирован. Почему этого не случилось с версией для Linux, я сказать не могу.

Учитывая такое количество нововведений и улучшений, наряду с хорошей оптимизацией расчетных алгоритмов (см. врезку), становится понятно, почему версия 5.0 ожидается с таким нетерпением.

FreeMat

Производительность

Мы провели те же самые тесты, что и в рубрике Сравнение данного номера: SVD-разложение и быстрое преобразование Фурье (FFT) для матрицы случайных действительных чисел размера 500х500. Тестирование проводилось на ноутбуке ASUS F3Ka с процессором Turion x2 TL-58 и 2 ГБ ОЗУ, под управлением Mandriva 2008.1 PP. Каждый тест был проведен 100 раз, и в качестве результата было взято среднее значение.

  • Scilab 5.0-beta4 показывает, что разработчикам действительно удалось повысить быстродействие, как они и обещали. Тест SVD показал увеличение скорости расчета на 14%, а FFT почти на 78%, то есть быстрое преобразование Фурье теперь выполняется почти в 4 раза быстрее.
  • FreeMat не на высоте. В SVD-тесте с теми же параметрами, что и в Сравнении этого номера, он показал скорость в 1,7 раза меньше, чем Scilab 4.1.2. Так что с точки зрения производительности FreeMat нуждается в доработке. FFT-тест, к сожалению, провести не удалось вследствие неполной сборки пакета.
Рис. 3. IDE Freemat и окно с примером построения поверхности.
Рис. 3. IDE Freemat и окно с примером построения поверхности.

В Сравнении данного номера не был указан еще один из лидеров среди Matlab-подобных пакетов – FreeMat, не говоря уже о множестве мелких программ, которые в большинстве своем предназначены для выполнения определенных узких задач; например, Gpredict (http://groundstation.sf.net/gpredict/) – модульное приложение для отслеживания и прогнозирования орбит спутников в реальном времени. А также пусть и коммерческий, но достаточно хорошо известный и популярный за рубежом пакет MuPAD (http://www.mupad.com). Но будем последовательны и рассмотрим лишь свободный вариант.

FreeMat не является полным клоном Matlab. Как указывается в FAQ на официальном сайте приложения (http://freemat.sf.net), этот пакет поддерживает приблизительно 95% функционала Matlab, что, согласитесь, немало. В пакете есть полноценная IDE с возможностью создания и отладки кода, сохранения и выполнения истории команд, управления файлами. Последний стабильная версия 3.6 была выпущена в марте этого года и доступна практически для всех известных платформ. Среди ее основных функций хочется отметить следующие:

  • Поддержка объектно-ориентированного программирования и перегрузки операторов. То есть FreeMat – это единственный пакет численных вычислений, способный работать с файлами в новом синтаксисе Matlab.
  • Поддержка автодополнения в консоли FreeMat.
  • Поддержка параллельных вычислений на базе технологии MPI.
  • Использование OpenGL для построения графиков и поверхностей.
  • Предоставление большинства известных методов численных вычислений, включая прямое и обратное преобразования Фурье (FFT), преобразование Гильберта; SVD-, LU- и QR-разложения матриц, работу с многомерными матрицами, интерполяцию и аппроксимацию функций и многое другое.

Прекрасное справочное руководство (на английском языке). Самое удивительное в том, что этот проект, как указано на сайте, создан и развивается силами всего лишь одного человека – Самита Басу [Samit Basu], но, как он сам признается, ему помогали и помогают многие сторонние добровольцы (в частности, многие Toolbox’ы являются просто преобразованными версиями GNU Octave). Целью данного проекта является предоставление простого интерфейса для внешних программ на C/C++/Fortran, а также реализация свободной альтернативы Matlab «с человеческим лицом». Последнее замечание требует пояснения. Как признается сам автор, он использовал Matlab еще с версии 4.0 и всегда не мог понять, почему некоторые простые вещи сделаны вычурно и неоптимально, а при смене версий старые функции не переписываются с учетом новых алгоритмов и технологий. Впрочем, этот вопрос часто задают пользователи-профессионалы любого приложения. С другой стороны, именно он часто и приводит к появлению альтернатив с открытым кодом, что не может не радовать остальных людей.

На официальном сайте имеется очень слабый Wiki, FAQ, ссылки на пакеты для различных дистрибутивов и файлы документации в PDF-формате, а также блог разработчика. Часть последних сообщений в блоге посвящена готовящейся четвертой версии пакета. Основными изменениями будут:

  • внедрение JIT-компилятора;
  • система типов, совместимая с Matlab;
  • новая система сборки проектов;
  • динамическая компоновка библиотек BLAS.

Несмотря на провал в производительности (см. врезку), FreeMat также может рассматриваться как некая замена проприетарной и очень дорогой системе Matlab. Хорошая совместимость и схожесть интерфейса позволяет так построить процесс обучения студентов, что переход к лицензионным версиям Matlab на производстве будет практически незаметен.

Пришла пора прощаться

Ваше мнение

Что-то осталось для вас непонятным? Возникли какие-то трудности в работе, вопросы по использованию – а может, пожелания о дальнейшем развитии данного цикла? Напишите нам (letters@linuxformat.ru), и мы постараемся вам помочь.

Итак, мы завершаем данный цикл статей. Надеюсь, что он был вам полезен. Теперь дело за вами. Возьмите пакеты из Сравнения этого номера, скачайте новые версии Scilab и FreeMat и выясните, что больше всего подходит вам для того, чтобы начать или продолжить свои исследования при помощи свободного программного обеспечения. И даже если впоследствии вам понадобится Matlab, то переход не будет таким уже страшным. Но действуйте немедленно, помните, Нобелевская премия вручается каждый год, а вот ждать ее приходится десятилетиями, поэтому чем быстрее вы закончите эпохальное исследование, тем больше шансы, что вы доживете до вашей лекции в Стокгольме.

Руководители курсовых и дипломных работ могут привлечь студентов к разработке и/или портированию различных пакетов расширений для Scilab или другого пакета с открытым кодом. Если же вы студент и вас заинтересовал какой-либо проект, то обратитесь сами к своему руководителю или преподавателям на кафедре – может быть, кто-то возьмется вам помочь, и в итоге получится неплохая курсовая или дипломная работа.

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию