Среди программного обеспечения для математических расчетов наиболее широко известны такие универсальные пакеты-комбайны, как Mathcad, Mathematica, Maple и др. Эти системы являются мощным инструментом для студента и преподавателя, инженера и ученого. Они позволяют провести с минимальными усилиями расчетную часть работы - самую рутинную и требующую повышенного внимания. По своим возможностям эти системы можно назвать средой программирования, с той лишь разницей, что в качестве элементов языка программирования выступают привычные для человека математические обозначения.
Однако у них у всех есть один недостаток - за них надо платить!
Программа, представленная в обзоре, по своим возможностям мало чем уступает таким монстрам, как Mathcad или Mathematica, но самое главное ее отличие в том, что она не является коммерческой и закрытой. Другими словами, речь идет о свободном ПО.
Проект, существующий в наши дни под именем Maxima, зародился в конце 60-х в легендарном MIT (Massachusetts Institute of Technology - Массачусетский Технологический институт), когда в рамках проекта по созданию искусственного интеллекта "MAC" (Machine Aided Cognition - познание с помощью машины) началась работа над программой символьных вычислений, которая получила имя Macsyma (от MAC's SYmbolic MAnipulation). Архитектура системы была разработана к июлю 1968 г., непосредственно программирование началось в июле 1969. В качестве языка для разработки системы был выбран Lisp.
Программа в течение многих лет использовалась и развивалась в университетах Северной Америки, где появилось множество вариантов системы.
Maxima является одним из таких вариантов, созданным профессором Вильямом Шелтером (William F. Schelter) в 1982 году. В 1998 году он получил официальное разрешение Министерства энергетики США, которое в тот момент курировало проект, использовать исходный код Macsyma под лицензией GNU Public License и в 2000 году положил начало проекту Maxima, преемнику Macsyma.
Принципы, положенные в основу проекта, позднее были заимствованы наиболее активно развивающимися ныне коммерческими программами - Mathematica и Maple. Можно сказать, что Macsyma фактически стала родоначальником всего направления программ символьной математики.
Сама по себе Maxima - консольная программа, и все математические формулы отрисовывает обычными текстовыми символами. В этом есть, как минимум, два плюса. С одной стороны, саму Maxima можно использовать как ядро, надстраивая поверх нее графические интерфейсы на любой вкус.
С другой стороны, сама по себе, без каких-либо интерфейсных надстроек, Maxima нетребовательна к железу и может работать на таких компьютерах, которые сейчас и за компьютеры уже никто не считает (это может оказаться актуальным, к примеру, для вуза или научной лаборатории, у которых денег на обновление компьютеров, скорее всего, нет, а потребность в ПО для символьных вычислений возникнуть может).
Перейдем непосредственно к программе. При ее установке дополнительно предлагается две графические оболочки: wxMaxima и XMaxima. Первый из интерфейсов русскоязычный и в нем, кроме того, есть возможность не набирать функции вручную, а воспользоваться меню или панелью, что очень помогает при задании дополнительных опций.
После запуска системы можно увидеть информацию о программе и приглашение к вводу первой команды. Для начала вычислим выражение
Для этого в строке ввода необходимо набрать "cos(%pi/4);" и нажать Shift+Enter.
В Maxima символами "%pi", а также "%е" обозначаются общеизвестные математические постоянные.
Если используется wxMaxima, то после вводимого выражения завершающий символ ";" можно не ставить, но в оболочке XMaxima, как и в командной строке, точка с запятой после вычисляемого выражения обязательна.
С какими бы выражениями ни работала Maxima, она всегда стремится к представлению результатов в точной аналитической форме. Для того чтобы получить ответ в виде числа с плавающей точкой, необходимо указать это явно. Простейший способ состоит в задании опции numer через запятую после введенного выражения:
(%i2) cos(%pi/4),numer;
(%o2) 0.70710678118655
Имена функций и переменных в Maxima чувствительны к регистру, то есть прописные и строчные буквы в них различаются, и "Cos(%pi/4)" вместо "cos(%pi/4)" система не посчитает.
Для построения графиков используются две функции - "plot2D" (двумерные) и "plot3D" (трехмерные). Использование этих двух функций позволяет выводить графики разных типов на плоскости и в пространстве с достаточно широкими настройками. С помощью специальных операторов или аргументов функций задаются количество узлов сетки, на которой строится требуемый график, диапазоны данных, цветовые и другие характеристики.
Следующее выражение строит в рабочей области wxMaxima графики двух функций: sin(x) и cos(x) на интервале от -5 до 5. Интервалы отображения графика и дополнительные опции указываются в квадратных скобках через запятую.
(%i3) wxplot2d([sin(x),cos(x)], [x,-5,5], [y,-2,2], [gnuplot_preamble, "set zeroaxis;"]);
Вообще говоря, графические возможности не встроены в Maxima, а реализованы посредством внешних программ. По умолчанию, построением графиков занимается программа gnuplot, но, кроме нее, есть разрабатываемый вместе с Maxima и идущий в ее составе openmath. Собственно, при использовании функции "plot2d" откроется окно gnuplot, в котором и строится необходимый график. Функция же "wxplot2d" используется для построения графиков только в графической оболочке wxMaxima. Однако при использовании этой оболочки для построения графиков, да и не только, значительно удобнее использовать меню или кнопки панели инструментов. Формат экспорта Maxima весьма небогат: рисунки в программе сохраняются, по сути, только в PostScript. Вообще говоря, инструменты визуализации системы очень и очень скромны, хотя и дают возможность получить качественные графики некоторых типов.
В системе Maxima имеется возможность давать имена любым выражениям. Т.е. можно сказать, что мы присваиваем значения переменным с той лишь разницей, что в виде значения такой переменной может выступать любое математическое выражение. Для операции присваивания используется двоеточие - знак равенства оставлен уравнениям, которые, учитывая ориентацию на математическую форму записи, так читаются проще и привычнее.
(%i4) equation: x^2+2*x-15;
(%o4) x^2+2*x-15
После того, как мы присвоили переменной какое-либо выражение, ее в любой момент можно использовать, например, при вычислении первой производной:
(%i5) diff(equation, x);
(%o5) 2x+2
или неопределенного интеграла:
(%i6) integrate(equation, x);
(%o6)
и даже для решения алгебраического уравнения:
(%i7) solve(equation=0,x);
(%o7) [x = 3, x = -5]
Ту же функцию "solve" можно использовать и для решения систем алгебраических уравнений:
(%i8) solve([equation = y, x + y = 2], [x,y]);
(%o8) [[x = -5.887482193696061, y = 7.887482193696061],[x = 2.887482193696061, y = -0.88748219369606]]
Для решения более сложных уравнений следует использовать функцию "find_root":
(%i9) find_root (cos(x)+2*x= 0, x, -1, 1);
(%o9) -0.45018361129487
В скобках, после имени переменной, вводится интервал, на котором ищется корень - в данном случае от -1 до 1.
Рассмотрим другие графические оболочки системы Maxima.
Интерфейс XMaxima значительно примитивней wxMaxima и представляет собой окно, разделенное на две части: верхняя часть является рабочей областью, а нижняя - помощь.
Однако верхом аскетизма является консольный интерфейс.
На экране чередуются вводимые вами команды и ответы системы на них. Интерфейс достаточно незамысловат, но, тем не менее, все формулы, даже достаточно сложные, вполне читабельны. Графики функций могут отображаться только в отдельных окнах - так же, как и в любом из графических интерфейсов. На мой взгляд, единственный реальный плюс консольного интерфейса - это минимальные требования к ресурсам.
Maxima является профессиональной системой, предназначенной для решения достаточно сложных математических задач, а также для графического отображения данных. Безусловно, Maxima не дотягивает до таких коммерческих продуктов, как Mathcad или Mathematica, но ее достоинства - бесплатность и небольшой размер (maxima.sourceforge.net, 22 MB) - делают систему Maxima неплохим инструментом для использования и в учебных целях, и для несложных инженерных расчетов.
Сергей ПРОНКЕВИЧ,
[email protected]
Комментарии