Использование результатов работы Maxima в скриптах и во внешних программах

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

Работа с Maxima сама по себе это работа с командной строкой. Но как быть, если мы хотим, чтобы Bash скрипт или PHP скрипт обратились к программе Maxima для вычислений и могли получить от неё результат для дальнейшего использования? Это действительно может понадобиться на практике. Например, веб-приложение может обращаться к Maxima и отображать результаты в веб-браузере, или же другая программа, которая собирает данные, сможет обратиться к Maxima для статистического или иного анализа этих данных.

Кстати, если мы говорим о связи с веб-приложениями, то обратитесь к связанным с Maxima проектам по этой ссылке: http://maxima.sourceforge.net/relatedprojects.html

Вполне возможно, ваш «велосипед» уже изобретён.

Обращение к Maxima из скрипта командной строки или из другой программы

Для этого разработчики предусмотрительно ввели ключ —batch-string

К примеру нам нужно узнать значение выражения diff(x^3,x,2);

Тогда к Maxima нужно обратиться так:

maxima --batch-string='diff(x^3,x,2);'

03

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

Сохранение графика Maxima в файл

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

maxima --batch-string='plot2d ([x^2],[x,-10,10]);'

Нельзя сказать, что при этом ничего не происходит, поскольку Maxima генерирует файл maxout.gnuplot_pipes, содержащий рассчитанные точки графика:

04

Но, согласитесь, это не совсем то, что нам нужно.

В качестве опции можно указать формат и имя файла, в который нужно сохранить график. Доступны, к примеру, форматы PNG, PDF, PS.

Делается это так:

maxima --batch-string='plot2d ([x^2],[x,-10,10], [png_file, "test.png"]);'

В результате в рабочей директории (чтобы узнать рабочую директорию наберите pwd) будет создан файл test.png:

05

На мой взгляд, отличное решение.

Как убрать из вывода Maxima лишние строки

Если результаты работы Maxima должны быть переданы в другую программу или в скрипт, то лишние строки, которые выводятся при каждом обращении к Maxima, будут мешать. Чтобы они не выводились предусмотрено два ключа -q и —very-quiet. Ключ -q уберёт только верхние строки, а ключ —very-quiet уберёт вообще всё (в том числе и те пометки с %), кроме введённых данных и полученных результатов. Использовать так:

maxima -q --batch-string='diff(x^3,x,2);'
maxima --very-quiet --batch-string='diff(x^3,x,2);'

Сравнение вывода без ключей и с этими ключами:

01

Как в командной строке отобразить вместо вычисления введённые в Maxima данные

Если выражение diff(x^3,x,2) нам не нужно считать, а нужно отобразить, то перед этим выражением мы ставим одиночную кавычку 'diff(x^3,x,2).

В командной строке это не работает. Не работает также и экранирование кавычки. Я нашёл следующий выход: заменить одиночные кавычки при ключе —batch-string на двойные, после этого внутри этих двойных кавычек можно использовать одинарные. Например так:

maxima --very-quiet --batch-string="'diff(x^3,x,2);"

02

Полный список опций командной строки maxima

Это те опции, которые можно увидеть набрав ключ —help:

maxima --help

-b <файл>, —batch=<файл>

Обработка файл maxima <file> в пакетном режиме.

—batch-lisp=<файл>

Обработка файла lisp <файл> в пакетном режиме.

—batch-string=<строка>

Обработать команду(ы) maxima <строка> в пакетном режиме.

-d, —directories

Отобразить информацию о внутренних директориях maxima.

—disable-readline

Отключить поддержку readline (чтения строки).

-g, —enable-lisp-debugger

Включить лежащий в основе отладчик lisp.

-h, —help

Отобразить это сообщение помощи.

—userdir=<директория>

Использовать <директорию> в качестве пользовательской директории (по умолчанию это $HOME/maxima для Windows и $HOME/.maxima для других ОС)

—init=<файл>

Задать имя файлов инициализации Maxima и Lisp в <файл>.mac & <файл>.lisp (по умолчанию это maxima-init)

—init-mac=<файл>

Задать имя файла инициализации Maxima (по умолчанию это maxima-init.mac)

—init-lisp=<файл>

Задать имя файла инициализации Lisp (по умолчанию это maxima-init.lisp)

-l <lisp>, —lisp=<lisp>

Использовать реализацию lisp <lisp>.

—list-avail

Список установленных версий/комбинаций lisp.

-p <lisp-file>, —preload-lisp=<lisp-file>

Предварительная загрузка <lisp-file>.

-q, —quiet

Подавить начальное сообщение Maxima.

-r <строка>, —run-string=<строка>

Обработать команду(ы) maxima из <строки> в интерактивном режиме.

-s <port>, —server=<порт>

Соединить Maxima к серверу на <порту>.

-u <версия>, —use-version=<версия>

Использовать maxima версии <версия>.

-v, —verbose

Отобразить вызовы lisp в скрипте оболочки maxima.

—version

Отобразить версию по умолчанию.

—very-quiet

Подавить метки выражения и стартовое сообщение Maxima.

-X <Опции Lisp>, —lisp-options=<Опции Lisp>

Опции, которые будут переданы в лежащий в основе Lisp.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск по сайту