Программа Maxima

1 Общие сведения

 

Программа Maxima распространяется под лицензией GPL и доступна как

пользователям ОС Linux, так и пользователям MS Windows. К сожалению,

русская версия программы  не имеет даже простой справки  на русском языке, а

немногочисленные статьи, посвященные изучению этой программы,

имеющиеся в некотором количестве в Интернете, – не всегда доступны и,

зачастую, рассчитаны на уже компьютеризированного пользователя.

Системы компьютерной математики, избавлены от

подобных недостатков. Они  способны использовать в процессе вычислений

математические теоремы  и факты. Так, известное тригонометрическое

тождество гласит, что sin2x+cos2x=1 для любого x. Ни один калькулятор не

способен применить это тождество в процессе преобразований, в то время как

такие программы, как Mathematica или Maxima, предназначенные для

символьных вычислений, легко  справляются с подобными задачами.

Там, где необходимо выполнить  вычисления точно, либо осуществить

аналитическое преобразование, например, упростить сложное математическое

выражение, вычислить в  символьном виде производную или  первообразную

заданной функции, разложить  ее в ряд Тейлора, найти корни  уравнения и т. д.,

применяются системы компьютерной алгебры (системы символьных

вычислений). В отличие от коммерческой программы Mathematica программа Maxima распространяется под лицензией GNU, что позволяет рекомендовать ее

широкому кругу пользователей. У каждой из этих двух программ есть свои

сильные и слабые стороны. Удобный графический интерфейс  является

несомненным достоинством программы  Mathematica, в то время как Maxima

зачастую дает математически  более строгие ответы. Так, например, при

вычислении первообразной функции xn Maxima просит уточнить значение n, так

как при n= – 1 результатом является функция ln x, а при других n первообразная

равна xn+1/(n+1). Программа Mathematica не уточняет n и для такой функции

всегда в качестве первообразной выдает значение xn+1/(n+1), хотя если в

качестве функции задать 1/x, то получим верный результат – ln x.

 

 

 

 

 

 

 

 

 

 

2 История

Maxima среди прочих аналогичных программ обладает наиболее широкими

возможностями по части символьных вычислений.

Система аналитических вычислений Maxima идеально подходит в качестве объекта для изучения как при обучении школьников старших классов, так и студентов вузов, ее могут использовать и профессиональные математики для проведения сложных расчетов и исследований. По происхождению Maxima принадлежит к древнейшему роду среди программ этого вида деятельности – она обладает, пожалуй, одной издлиннейших историй среди всех сколь-нибудь распространённых сегодня программ. Жизнеописание Максимы берёт своё начало в 60-х годах, когда появился продукт под названием Macsyma, в котором реализовывались, как принято сейчас говорить, «передовые идеи» в области компьютерной математики. Позже эти идеи легли в основу обоих уже упомянутых лидеров проприетарного рынка математического софта – Mathematica и Maple.

Проект Macsyma был основан Энергетическим Управлением США

(Departament of Energy, DOE) в 60-х годах. Разрабатывать его начали в

легендарном Массачусетском Технологическом Институте (Massachusets

Institute of Technology, MIT), на языке, который заслуженно считался тогда

наиболее подходящим для  невычислительных задач из всех существовавших на

тот момент. Этим языком был  Lisp, единственный из языков того времени

доживший до наших дней и даже сейчас соперничающий по

распространённости в  живых проектах со многими ультрасовременными языками.

Естественно, изначально Macsyma была закрытым коммерческим проектом. Доступность проекта OpenSource-сообществу стала возможной благодаря профессору Техасского Университета Вильяму Шелтеру (William Schelter), который добился от DOE получения кода Macsyma и его публикации

под лицензией GPL под именем Maxima. Он же долгое время разрабатывал как

саму Максиму, так и  один из диалектов лиспа – GCL (GNU Common Lisp) – на

котором разрабатывалась  Максима после её «освобождения». К величайшему

сожалению, Вильям Шелтер умер в 2001 году. Но, как это часто бывает в мире

открытого ПО, жизнь проекта  не закончилась вместе с жизнью его  основателя.

Сейчас над проектом работает большое число математиков и  программистов во

главе с Джеймсом Эмундсоном (James Amundson). Теперь Maxima работает не

только с GCL, но и с CLisp и CMUCL, полностью отвечающими стандарту

ANSI Common Lisp (в отличие от GCL, в котором пока есть незначительные

отклонения от стандарта).

В Максиме сейчас принят такой же принцип нумерации версий, как и в

ядре Linux: номер состоит из трёх чисел, разделённых точками, причём номера

с нечётным средним числом соответствуют так называемым development-

версиям (разрабатываемым), с чётным – stable (стабильным).

 

3 Классы решаемых  задач

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

Решаемые задачи: Решение задач элементарной математики(упрощение выражения, раскрытие скобок); графики функций(степенная функция, тригонометрическая функция, обратные тригонометрические функции, экспонента и логарифм, графики параметрически заданных функций, дискретный график, график в полярной системе координат, решение уравнений( поиск экстремума, решение систем уравнений), решение задач математического анализа( нахождение производной, интегрирование, нахождение пределов, разложение в ряд Тейлора, нахождение суммы ряда), решение задач линейной алгебры (операции с матрицами, умножение матриц и возведение их в степень, решение систем линейных алгебраических уравнений), трёхмерные графики(трёхмерные параметрические графики) и так далее.

Например: Построить график функции f(x)= . Первый аргумент оператора plot3d – функция. Далее в квадратных скобках вводят имя первой переменной и указывают ее минимальное и максимальное значение, разделяя запятыми. Аналогично в следующих квадратных скобках вводят имя и диапазон значений второй переменной. Четвертый аргумент - формат графика (необязательный при работе в Windows).

(%i1)plot3d(x1^2+2*x2^2-4*x1-4*x2,[x1,-5,5],[x2,-5,5],[plot_format,openmath])$);

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

Для решения системы двух линейных уравнений:

в Maxima запишем:  (%i1) linsolve([2*x1-3*x2=-6,3*x1+4*x2=5],[x1,x2]);

(%o1) [x1=-9/17,x2=28/17] 

Здесь в первых квадратных скобках заданы через запятую  уравнения, а во вторых квадратных скобках  – переменные. В свою очередь  все эти квадратные скобки заключены  в круглые скобки, которые следуют  за командой linsolve. 

4 Описание системы 

 

На данный момент Maxima выпускается под две платформы: Unix-совместимые системы, т. е. Linux и *BSD, и MS Windows. Речь о Linux-версии.

 

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

 

С другой стороны, сама по себе, без каких-либо интерфейсных надстроек, Maxima нетребовательна к железу и может работать на таких компьютерах, которые сейчас и за компьютеры уже никто не считает (это может оказаться актуальным, к примеру, для вуза или научной лаборатории, у которых денег на обновление парка машин скорее всего нет, а потребность в ПО для символьных вычислений возникнуть может).

 

Имена функций и переменных в Максиме чувствительны к  регистру, то есть прописные и строчные буквы в них различаются. Это  не будет в новинку любому, кто  уже имел дело с POSIX-совместимыми системами  или с такими языками программирования, как, скажем, C или Perl. Удобно это и с точки зрения математика, для которого тоже привычно, что заглавными и строчными буквами могут обозначаться разные объекты (например, множества и их элементы, соответственно).

 

На данный момент последняя  версия программы — 5.9.3.

С точки зрения ознакомления с самой Maxima наибольший интерес представляют два интерфейса.

 

Первый — это отдельная  самостоятельная графическая программа  по имени wxMaxima. Она, как и сама Maxima, помимо Linux/*BSD существует еще и в версии для MS Windows. В wxMaxima вы вводите формулы в текстовом виде, а вывод Максимы отображается графически, привычными математическими символами. Кроме того, большой упор здесь сделан на удобство ввода: командная строка отделена от окна ввода-вывода, а дополнительные кнопки и система меню позволяют вводить команды не только в текстовом, но и в диалоговом режиме. Так называемое «автодополнение» в командной строке на самом деле с таковым имеет лишь то сходство, что вызывается клавишей «Tab». Ведет же оно себя, к сожалению, всего лишь как умная история команд, т. е. вызывает ту команду из уже введенных в этой сессии, которая начинается с заданных в командной строке символов, но не дополняет до имен команд и их параметров. Таким образом, этот интерфейс наиболее удобен в том случае, когда вам нужно много вычислять и видеть результаты на экране; и еще, возможно, в том случае, если вы не очень любите вводить все команды с клавиатуры. Кроме того, wxMaxima предоставляет удобный интерфейс к документации по системе; хотя, так как документация поставляется в формате html, вместо этого можно использовать обычный браузер.

 

 

Рис. 1 Графическая программа по имени wxMaxima.

 

Второй достаточно интересный интерфейс к Maxima — это дополнительный режим в редакторе TeXmacs. Хотя этот редактор имеет общее историческое прошлое с широко известным Emacs, что явствует из названия, но практического сходства между ними мало. TeXmacs разрабатывается для визуального редактирования текстов научной тематики, при котором вы видите на экране редактируемый текст практически в том же виде, в котором он будет распечатан. В частности, он имеет так называемый математический режим ввода, очень удобный для работы с самыми разнообразными формулами, и умеет импортировать/экспортировать текст в LaTeX и XML/HTML. Именно возможностями по работе с формулами пользуется Maxima, вызванная из TeXmacs’а. Фактически, формулы отображаются в привычной математической нотации, но при этом их можно редактировать и копировать в другие документы наподобие обыкновенного текста. Maxima-сессия вызывается из меню: «вставить → Сессия → Maxima», при этом появляется дополнительное меню с командами Максимы. После запуска сессии можно уже внутри нее перейти в математический режим ввода (меню режимов ввода вызывается первой кнопкой на панели ввода) и при вводе также использовать элементы математической нотации. Этот интерфейс будет наиболее удобен тем, кто хочет использовать результаты вычислений в своих текстах и любит редактировать их в визуальном режиме.

 


 

 

 

 

 

 

 

Рис. 2 Дополнительный режим в редакторе TeXmacs.

После запуска Maxima-сессии мы видим перед собой такие строки:

Maxima restarted.

(%i1)

Первая — это сообщение  о том, что ядро Максимы только что запустилось (вместо нее, в зависимости  от версии и конкретной сборки, может  выводиться краткая информация о  программе); вторая — приглашение  к вводу первой команды. Команда  в Максиме — это любая комбинация математических выражений и встроенных функций, завершенная, в простейшем случае, точкой с запятой. После ввода  команды и нажатия «Enter» Maxima выведет результат и будет ожидать следующей команды:

Для арифметических действий используются традиционные обозначения: -, +, *, /; ** или ^ для возведения в степень, sqrt() для квадратного корня.

Далее будем пользоваться для наглядности упомянутым во врезке математическим режимом ввода редактора  TeXmacs. К примеру, приведенный выше код выглядел бы так:

 

Если для каких-то обозначений  будет неочевидно, как записать их в строку, будем пояснять это по ходу изложения.

Как видите, каждая ячейка имеет  свою метку; эта метка — заключенное  в скобки имя ячейки. Ячейки ввода  именуются как %i с номером (i от input — ввод), ячейки вывода — как %o с соответствующим номером (o от output — вывод). Со знака % начинаются все встроенные служебные имена: чтобы, с одной стороны сделать их достаточно короткими и удобными в использовании, а с другой — избежать возможных накладок с пользовательскими именами, которые тоже часто удобно делать короткими. Благодаря такому единообразию вам не придется запоминать, как часто бывает в других системах, какие из таких коротких и удобных имен зарезервированы программой, а какие вы можете использовать для своих нужд. К примеру, внутренними именами %e и %pi обозначены общеизвестные математические постоянные; а через %c с номером обозначаются константы, используемые при интегрировании, для которых использование буквы «c» традиционно в математике.

 

При вводе мы можем обращаться к любой из предыдущих ячеек по ее имени, подставляя его в любые  выражения. Кроме того последняя  ячейка вывода обозначается через %. Это  позволяет обращаться к последнему результату, не отвлекаясь на то, каков  его номер.

Здесь %+47/59 — то же самое, что %o1+47/59.

 

Вывод результата вычисления не всегда нужен на экране; его можно  заглушить, завершив команду символом $ вместо ;. Заглушенный результат при этом все равно вычисляется; как видите, в этом примере ячейки %o1 и %o2 доступны, хотя и не показаны (к ячейке %o2 обращение идет через символ %, смысл которого расшифрован выше):

Каждую следующую команду  не обязательно писать с новой  строки; если ввести несколько команд в одну строчку, каждой из них все  равно будет соответствовать  свое имя ячейки. К примеру, здесь  в строке после метки %i1 введены  ячейки от %i1 до %i4; в ячейке %i3 используются %i1 и %i2 (обозначенная как _ — предыдущий ввод):

 

 

В wxMaxima и TeXmacs последнюю или единственную команду в строке можно не снабжать завершающим символом — это сработает так же, как если бы она была завершена ; , т. е. вывод заглушен не будет.

Помимо использования  имен ячеек, мы, естественно, можем и  сами давать имена любым выражениям. По-другому можно сказать, что  мы присваиваем значения переменным, с той разницей, что в виде значения такой переменной может выступать  любое математическое выражение. Делается это с помощью двоеточия —  знак равенства оставлен уравнениям, которые, учитывая общий математический контекст записи, проще и привычнее  так читаются. И к тому же, так  как основной конек Максимы —  символьная запись и аналитические  вычисления, уравнения достаточно часто  используются. Например:

В каком-то смысле двоеточие  даже нагляднее в таком контексте, чем знак равенства: это можно  понимать так, что мы задаем некое  обозначение, а затем через двоеточие  расшифровываем, что именно оно обозначает. После того, как выражение поименовано, мы в любой момент можем вызвать  его по имени:

Любое имя можно очистить от присвоенного ему выражения функцией kill(), и освободить занимаемую этим выражением память. Для этого нужно просто набрать kill(name), где name — имя уничтожаемого выражения; причем это может быть как имя, назначенное вами, так и любая ячейка ввода или вывода. Точно так же можно очистить разом всю память и освободить все имена, введя kill(all). В этом случае очистятся в том числе и все ячейки ввода-вывода, и их нумерация опять начнется с единицы. В дальнейшем, если по контексту будет иметься в виду логическое продолжение предыдущих строк ввода-вывода, я буду продолжать нумерацию (этим приемом я уже воспользовался выше). Когда же новый «сеанс» будет никак не связан с предыдущим, буду начинать нумерацию заново; это будет косвенным указанием сделать «kill(all)», если вы будете набирать примеры в Maxima, так как имена переменных и ячеек в таких «сеансах» могут повторяться.

None Программа Maxima