При
написании вычислительной программы
понадобилось задавать уравнения движения
материальных точек. Точки могут двигаться
по различным траекториям, и каждый раз
закладывать новую функцию в программу
и пересобирать ее мне не хотелось. Тут
я задумался о том, чтобы передавать
закон движения программе в текстовом
виде, а дальше программа должна распознать
выражение и вычислить его. Причем если
нужно будет найти производные для
заданного закона движения, то можно
воспользоваться конечными разностями
2 порядка и выше.
Самому
писать распознаватель выражений писать
не хотелось, и к тому же я усвоил, что
существует множество Open Source проектов
направленных на решение всевозможных
задач. А значит и можно найти готовый и
бесплатный распознаватель выражений.
Достаточно
быстро нашелся подходящий мне проект
под названием muParser. Официальный сайт -
http://muparser.beltoforion.de/.
Что меня привлекло в этом парсере:
1. Наличие примеров.
2. Наличие
документации на сайте.
3. Простота
использования.
4. Кроссплатформенность.
Сразу
скажу, что muParser я не сравнивал с аналогами.
Вопрос высокой эффективности остро не
стоял, так как время вычисления выражения
muParser'ом существенно меньше временных
затрат остальной части программы.
Здесь
я опишу процесс установки в ОС Ubuntu
Linux 12.04 64-bit.
1. Скачиваем
дистрибутив библиотеки в официального
сайта. После скачивания у меня в папке
Downloads появился архив muparser_v2_2_3.zip.
2. Копируем
архив во временную папку temp
cp
Downloads/muparser_v2_2_3.zip temp/
3. Переходим
в папку temp и распаковываем архив
cd
~/temp
unzip
muparser_v2_2_3.zip
4. Переходим
в папку извлеченную из архива
cd
muparser_v2_2_3
Рекомендую
прочитать содержимое файла License.txt. В
файле Install.txt описана процедура установки.
5. Запускаем
скрипт configure и
указываем в параметрах запуска, что
хотим собрать динамически подключаемую
библиотеку и примеры.
./configure
--enable-shared=yes --enable-samples=yes --enable-debug=no
6 Запускаем
утилиту
make
7. Устанавливаем
muParser
sudo
make install
В
папке /usr/local/include
появятся заголовочные файлы парсера.
В
папке /usr/local/lib появится
динамически подключаемая библиотека
libmuparser.so
8. Обновляем
кэш динамических библиотек
sudo
ldconfig
9. Проверяем
работоспособность примеров
./sample/example1/example1
example2
написан для Windows
В
качестве демонстрации возможностей
muParser'а я написал рисовалку графиков для функций одного действительного
переменного. Для визуализации использовал
freeglut.
Программа
требует ввести выражение для функции,
далее выводит кривую графика функции.
Поскольку
muParser понимает только основные элементарные
функции я зарегистрировал в своей
программе первые пять полиномов Лежандра,
которые называются P0, P1, P2, P3, P4.
Так
как у меня не стояла задача писать
универсальный построитель графиков,
то программа может вывести только одну
кривую на промежутке [-1, 1], подписи осей
отсутствуют.
Рисунок 1 - Скриншот терминала
Рисунок 2 - Скриншот построителя графиков. Полином Лежандра 4-й степени
Теперь построим 11 первых слагаемых разложения функции
в ряд Фурье
Рисунок 3 - Скриншот терминала
Рисунок 4 - 11 первых членов Фурье разложения
Исходники можно скачать по ссылке
Для сборки выполнить в
консоли следующее
g++
-O3 main.cpp Legendre.cpp colors.cpp -lmuparser -lGL -lglut -o
muParserTest
Текущий
релиз 2.2.3 выпущен 22.12.2012. Подозрительно
долго не выходило новых версий библиотеки.
Тем не менее имеющийся функционал
библиотеки может быть полезен при
решении определенного круга задач.





