Информация из этой заметки полезна для разработчиков, программистов, которые на основе Maxima делают свои программные продукты, или которые хотят использовать результаты вычислений Maxima в своих программах и скриптах в автоматизированном режиме.
Работа с Maxima сама по себе это работа с командной строкой. Но как быть, если мы хотим, чтобы Bash скрипт или PHP скрипт обратились к программе Maxima для вычислений и могли получить от неё результат для дальнейшего использования? Это действительно может понадобиться на практике. Например, веб-приложение может обращаться к Maxima и отображать результаты в веб-браузере, или же другая программа, которая собирает данные, сможет обратиться к Maxima для статистического или иного анализа этих данных.
Кстати, если мы говорим о связи с веб-приложениями, то обратитесь к связанным с Maxima проектам по этой ссылке:
Вполне возможно, ваш «велосипед» уже изобретён.
Обращение к Maxima из скрипта командной строки или из другой программы
Для этого разработчики предусмотрительно ввели ключ —batch-string
К примеру нам нужно узнать значение выражения diff(x^3,x,2);
Тогда к Maxima нужно обратиться так:
maxima --batch-string='diff(x^3,x,2);'
В простейших случаях работает прекрасно, но есть некоторые нюансы. Например, как мы можем отобразить графики, как мы можем вместо вычисления выражения отобразить его, как убрать лишние строки в выводе Maxima? На все эти вопросы у меня есть ответы! Читайте дальне.
Сохранение графика Maxima в файл
Если бы работали с Maxima в привычном режиме, войдя в программу, то наши графики открывались бы в отдельном окне. При работе в режиме командной строки без входа в Maxima, никакие графики не открываются. Можете сами проверить:
maxima --batch-string='plot2d ([x^2],[x,-10,10]);'
Нельзя сказать, что при этом ничего не происходит, поскольку Maxima генерирует файл maxout.gnuplot_pipes, содержащий рассчитанные точки графика:
Но, согласитесь, это не совсем то, что нам нужно.
В качестве опции можно указать формат и имя файла, в который нужно сохранить график. Доступны, к примеру, форматы PNG, PDF, PS.
Делается это так:
maxima --batch-string='plot2d ([x^2],[x,-10,10], [png_file, "test.png"]);'
В результате в рабочей директории (чтобы узнать рабочую директорию наберите pwd) будет создан файл test.png:
На мой взгляд, отличное решение.
Как убрать из вывода 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);'
Сравнение вывода без ключей и с этими ключами:
Как в командной строке отобразить вместо вычисления введённые в Maxima данные
Если выражение diff(x^3,x,2) нам не нужно считать, а нужно отобразить, то перед этим выражением мы ставим одиночную кавычку 'diff(x^3,x,2).
В командной строке это не работает. Не работает также и экранирование кавычки. Я нашёл следующий выход: заменить одиночные кавычки при ключе —batch-string на двойные, после этого внутри этих двойных кавычек можно использовать одинарные. Например так:
maxima --very-quiet --batch-string="'diff(x^3,x,2);"
Полный список опций командной строки 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.
- Как установить и запустить wxMaxima и Maxima в Linux (83.9%)
- Построение графиков в wxMaxima и Maxima (перевод официальной документации) (66.2%)
- Как в wxMaxima и Maxima построить графики кривых второго порядка (окружности, эллипса, гиперболы, параболы)? (66.2%)
- Как установить и запустить wxMaxima и Maxima в Windows (59.7%)
- Все подсказки дня wxMaxima (59.7%)
- Maxima для Android (RANDOM - 9.7%)