Математическая система Maxima
Система выполняет операции с комплексными числами. Они записываются в алгебраической форме с мнимой единицей, которая обозначается i (учитывается регистр, то есть используется именно маленькая буква); то есть в виде a+b*i, где а и b — соответственно действительная и мнимая части числа. Например:
Структурированные типы данных
Для создания массивов используется функция matrix.
[Имя матрицы:]matrix([значение элементов в строке, отделяющиеся друг от друга запятой] [,значение элементов в строке, отделяющиеся друг от друга запятой]. )
Значения строк также отделяются запятой.
Следовательно, для создания вектора-строки следует применить функцию так:
Пример создания матрицы:
Работу с матрицами обеспечивают также команды пункта главного меню Алгебра и несколько инструментов панели «Statistics».
Например, создание массива с помощью команд пункта главного меню Алгебра осуществляется так:
- Выполнить команду Алгебра > Enter Matrix (Ввести матрицу). Появится окно «Матрица».
- Определить размерность матрицы, а при необходимости и ее тип, например «диагональная».
- В поле «Name» (Имя) ввести имя матрицы.
- Появится окно с матрицей заданной размерности, в котором вводятся элементы матрицы.
- Щелкнуть «ОК».
| Операции с массивами | ||
| Операция | Примечание | |
| М1+М2 | Добавление | Массивы должны быть одинаковой размерности |
| М1-М2 | Вычитание | |
| М1.М2 | Умножение массивов | Массивы должны быть соответствующей размерности: количество столбцов в левой матрице М1 должно равняться количеству строк в правой матрице М2. Результатом будет новая матрица, которая будет иметь такое же количество строк, как и в матрицы М1, и такое же количество столбцов, как и в матрице М2 |
| М1*М2 | Поэлементное умножение массивов или умножение массива на скаляр | Массивы должны быть одинаковой размерности. Векторы должны иметь одинаковую структуру, то есть быть оба или столбцами или строками. При выполнении действия умножения двух массивов результатом будет массив такой же размерности, каждый элемент которого является произведением элементов массивов с одинаковыми порядковыми номерами |
Размерность матрицы очень просто изменить. Для этого следует установить курсор среди ее значений и удалить ненужные строки или столбики. При этом следует помнить, что количество элементов в каждом столбце или строке должно быть одинаковым. Размерность матрицы изменяется также с помощью соответствующих функций:
- Увеличение количества столбцов. Используется функция addcol, имеющая два аргумента: имя массива и новые элементы в виде списка или матрицы. Список элементов записывается в квадратных скобках; при этом каждый элемент отделяется друг от друга запятой. Следует не забывать применить перед этим оператором действие присвоения для массива, для которого происходит увеличение количества элементов. Например, если нужно прибавить к массиву V1 два элемента (9 и 10), то функция будет иметь вид:
V1: addcol(V1,[9,10]); - Увеличение количества строк. Используется функция addrow, имеющая два аргумента: имя массива и новые элементы в виде списка или матрицы. Например, если нужно прибавить к массиву V1 еще одну строку с элементами 1,2,3,4,5, то функция будет иметь вид:
V1: addrow(V1,[1,2,3,4,5]); - Уменьшение количества столбцов. Используется функция submatrix, имеющая синтаксис:
submatrix(Имя матрицы; начальный номер удаляемого столбца; конечный номер удаляемого столбца).
Например, если нужно удалить из матрицы V1 6-й и 7-й столбец, то функция будет иметь вид:
V1: submatrix(V1, 6,7); - Уменьшение количества строк. Используется функция submatrix, имеющая синтаксис:
submatrix(начальный номер удаляемой строки, конечный номер удаляемой строки; Имя матрицы;)
Для обращения к конкретному элементу массива М используется выражение M[j, i], где М — имя массива, j — номер строки и i — номер столбца. При этом такая запись распространяется и на вектор (одномерный массив), и на матрицу (двумерный массив). Для одномерных массивов просто добавляется еще один элемент: для вектора-столбца это будет номер строки, а для вектора-строки — номер строки. Понятно, что в обоих случаях этот номер всегда равен «1».
Например, если нужно сложить значение второго элемента вектора-строки V0 и четвертого элемента вектора-столбца V1, то это осуществляется так:
Все значения элементов массива могут быть одновременно изменены на одно и то же значение. Для этого необходимо после имени массива добавить знак математической операции и число, на которое нужно изменить все элементы массива. Например, нужно создать новую матрицу, все элементы которой будут равняться «1». Это может быть осуществлено путем создания матрицы, например, с именем М7, все элементы которой равняются «0», а потом использованием оператора:
| Специальные функции для создания матриц | |
| zeromatrix(m, n) | Создание матрицы размерностью m*n, все элементы которой равняются «0» |
| ident(n) | Создание единичной квадратной матрицы размерностью n*n (все ее элементы равняются нулю, кроме элементов главной диагонали, значение которых равняется «1») |
| diagmatrix(n, x) | Создание диагональной квадратной матрицы размерностью n*n, элементами главной диагонали которой являются значения переменной x; а все другие ее элементы равняются «0» |
Матрицу также можно создать автоматически по определенному алгоритму. Для этого следует выполнить команду Алгебра > Generate Matrix from Expression (Генерировать матрицу из выражения), после чего появится окно «Создать матрицу». В поле «matrix[i, j]» вводится математическое выражение, согласно которого и формируются элементы матрицы. Если в текущей сессии предусматривается использовать матрицу несколько раз, то в окне «Создать матрицу» целесообразно также задать имя матрицы. Такой вариант создания матрицы эквивалентен использованию циклов в языках программирования.
Построение графиков
Графические возможности системы достаточно скромны, но все же она позволяет строить графики трех форматов:
- Gnuplot graph. Используется при применении встроенных функций построения графиков. Имеет собственную систему команд, может работать интерактивно (в режиме командной строки) и выполнять скрипты.
- Встроенный. По умолчанию предлагается во время выбора инструмента построения графиков на панели «General Math» или по команде Plot > Plot 2d.
- Openmath. Система разметки математической семантики, которая назначена дополнить MathML. MathML (от англ. Mathematical Markup Language — язык математической разметки) — это дополнение XML, которое используется для представления математических символов и формул в документах WWW.
| Функциональные возможности графиков | |||
| Gnuplot graph | Встроенный | Openmath | |
| Копирование в буфер обмена и вставка из него в другие документы | + | + | — |
| Изменение размеров графика | + | — | — |
| Изменение цвета фона | + | — | |
| Форматирование масштабных ординат, легенды | + | — | — |
| Изменение цвета, типа и толщины линий | + | — | * |
| Сохранение в форматах | — | JPG, BMP, PNG | PS |
| * Возможно конфигурированием, после чего заданные параметры применяются для всех новых создаваемых графиков. | |||
Формат построенного графика можно изменить. Для этого следует выделить команду для построения графика, выполнить команду Plot > Plot Format и ввести название другого формата графика в поле «Введите новый формат графиков» в окне «Формат графика».
Двумерная (2D) графика
Двумерные графики строятся с помощью функции plot2d.
plot2d(y(x), [x, xmin, xmax])
где y(x) — функция от x, значения которой изменяются на интервале от xmin до xmax.
Обязательными являются все четыре аргумента, при этом только первый аргумент (при условии, что график строится только для одной функции) может быть записан не в скобках, все другие аргументы записываются в квадратных скобках. Это связано с тем, что аргументами функции являются не отдельные переменные-параметры, а списки, для записи которых используются именно квадратные скобки. Например:
На одной координатной плоскости можно одновременно вывести графики нескольких функций. В этом случае первый аргумент plot2d содержит перечень этих функций и записывается в квадратных скобках.
Еще проще строить функции при помощи инструментов «График 2D» и «График 3D» панели «General Math» или по команде Plot > Plot 2d. (Plot 3d). Использование этих команд инициирует появление окна «График 2D» или «График 3D». В этом окне пользователь имеет возможность определить ряд параметров, в частности:
- Начальное и конечное значение изменений для переменных x и y.
- «Число точек» указывает, сколько опорных точек используется для построения графика.
- Опции. Это дополнительные действия, которые можно применить к графику. Их определение начинается с ключевого слова «set». Например, «set grid» задает в графике вывод линий масштабной сетки, а «set size ratio 1» выравнивает масштабы по осям координат: это будет полезно, когда строится круг и нужно, чтобы график строился действительно как круг, а не как овал. Следует заметить, что построение круга в виде овала связано с тем, что разрешающая способность монитора по горизонтали и вертикали является разной, поскольку пиксель не является «круглым».
После формирования график появляется в специальном окне, а автоматически сгенерированная команда построения графика, которая имеет синтаксис wxplot2d — в рабочем документе.
Каждая функция plot инициирует построение графика (или графиков) в новом окне.
Редактирование графика
Нажатие мышью на пиктограмме окна в его заголовке для графиков формата gnuplot открывает меню, пункт «Option» которого содержит команды для форматирования графика: изменение цвета фона, стиля линий, шрифта и т.п.
Последней командой пункта «Option» является «Update \..\wgnuplot.ini». Все изменения, осуществленные во время форматирования графика, являются временными и касаются только графика, для которого осуществляется форматирование. Выполнение пункта «Update \..\wgnuplot.ini» приводит к тому, что изменения запоминаются в файле параметров, применяемых для графиков автоматически, и для всех последующих графиков эти изменения будут применяться по умолчанию.
Для изменения параметров уже построенного графика любого типа следует установить курсор на имени функции для построения графика и щелкнуть «График 2D» на панели «General Math». Это приведет к появлению окна «Графики 2D», в котором, как отмечалось ранее, можно изменить ряд параметров.
Построение графика в полярных координатах
Для этого сначала следует загрузить пакет расширенных графических возможностей, который осуществляется по команде load(draw). В ответ система должна ответить, что она осуществила доступ к нужному файлу:
Для построения графика в полярных координатах применяется функция draw2d со следующими аргументами:
- user_preamble = «set grid polar», // построение в полярных координатах
- nticks = n, // n — число точек
- xrange = [dx1, dx2], // диапазон изменения x
- yrange = [dy1, dy2], // диапазон изменения y
- color = red, // цвет
- line_width = k, // ширина линии, которой строится график
- title = «общее название графика»,
- polar(функция, переменная, нижняя_граница _переменной, верхняя_граница _переменной) // функция построения графика
Обязательными являются первый и последний аргументы функции. Первый инициирует построение графика в полярных координатах, последний (polar) — это функция, по которой строится график.
В свою очередь, аргумент polar также имеет несколько аргументов:
- Функция для графика. В математике в ее роли принято использовать греческие буквы. Эти буквы изменяются на имена-эквиваленты, например theta.
- Аргумент функции (угловая координата).
- Начальное значение угла.
- Конечное значение угла.
Трехмерная (3D) графика
Для построения изображений трехмерных объектов используется функция plot3d.
plot3d(z(x, y), [x, xmin, xmax], [y, ymin, ymax], дополнительные опции)
где z(x,y) — функция от x, y, значения которой изменяются от xmin до xmax и от ymin до ymax.
plot3d(((x — 10)/5)*((y — 10)/5),[x, 0,20],[y, 0,20]);
На одной координатной плоскости можно одновременно построить до трех функций. В этом случае перечень функций записывается в квадратных скобках: plot3d ([функция1, функция2, функция3], [переменная 1, нижний предел переменной, верхний предел переменной], [переменная 2, нижний предел переменной, верхний предел переменной], дополнительные опции).
Редактирование трехмерного графика осуществляется так же, как и двумерного.
Трехмерная поверхность может быть заменена градиентным переходом цветов. Для этого следует применить опцию «set view map».
Maxima — Tips&Tricks, или собираем по крохам инфо, как на ней работать
Человеческая память для меня загадка. Являясь обладателем слабой памяти с детства, вечно забываю о некоторых нюансах окружающего меня мира. Тем не менее, эти данные должны быть под рукой. И когда не хватает блокнота, на помощь приходят текстовые файлы. Один из таких файлов содержит небольшую сборку повседневных и обыденных команд Maximа.
Я думаю, всем из нас известна данная система компьютерной алгебры. Она не является конкурентом Wolfram Mathematica, но она обладает именно тем функционалом, который я требую от математического софта. Если говорить проще и доступнее — считать можно на всём, от палочек до суперкомпьютеров, и далеко не всегда задачи инженерной практики целиком переносятся с бумаги в программный код. Одним из примеров, который я честно говоря, еле-еле застал, является сегодня забытая поделка нашего конверсионного производства — цельнометаллический бытовой вакуумный гражданский термос, который выпускался ранее ещё в СССР на Урале. Чтобы наладить его производство институт, в котором я учусь, де-факто вручную на счётных машинках высчитал все необходимые параметры рабочего оборудования. Поэтому лицензия на Mathematica — не показатель и не ценз пригодности к практике. Считать, повторюсь, можно на всём.
От слов к делу. Ниже разбиты на категории те моменты в документации Maxima, которые желательно знать для начинающего пользователя данной СКА.
Общий функционал
/.maxima — стандартный каталог системы;
file_search_lisp и file_search_demo — функции для поиска соответствующих файлов;
load() — обертка над двумя функциями загрузки файлов, просто короче;
loadfile() -загружает файл с исходным кодом Lisp (парна к save());
stringout()- выгружает в файл любые выражения и функции Maxima;
declare() — внести факт в базу фактов;
facts(name) или facts() — узнать текущее состояние базы;
remove() — удалить свойства из базы;
assume() — в качестве аргументов принимает в любом количестве самые обыкновенные равенства и неравенства в логической форме, то есть не «a=b», «a#b», а «equal(a,b)», «not equal (a,b)». Из логических операторов допускается также использование and (по сути assume(x>0 and x<1) это то же самое, что и assume(x>0, x<1)), но не or – база фактов не поддерживает информацию вида «или»; и речь не о синтаксисе, а именно о конструкциях, то есть выражения типа not(a>b and a<c) тоже недопустимы. Факты, добавленные assume(), также видны функции facts():
Производные, пределы, ряды.
diff(выражение) — находит полный дифференциал выражения, который является суммой всех частныхпроизводных по переменным выражения;
diff(выражение, переменная) — находит частную производную первого порядка;
diff(выражение, переменная, N) — находит частную производную N-го порядка;
diff(выражение, х_1, N_1, х_2, N_2, …) —находит сумму частных производных;
derivlist(x, y, . v) – производные относительно переменных, заданных в качестве аргументов, а также полные дифференциалы (так как они не зависят ни от каких переменных);
integrate(%,x) — интегрирование;
romberg(cos(sin(x+1)), x, 0, 1) — численное интегрирование методом Ромберга;
limit ((x^2 — 1)/(x^2 + 1), x, inf) — вычисление пределов;
limit ((x^2 — 1)/(x^2 + 1), x, minf);
limit (tan(x), x, %pi/2, plus) — предел справа;
limit (tan(x), x, %pi/2, minus) — слева;
tlimit(. ) — попытка найти предел с поднятым флагом tlimswitch (см. ниже);
sum(i, i, 1, 100) — сумма ряда;
product — произведение ряда (синтаксис аналогично sum);
sum(1/x^2, x, 1, inf), simpsum=true; — чтобы выполнить суммирование, нужно указать опцию «simpsum=true»;
sumcontract(sum1+sum2) — сокращение сум;
taylor(sin(x), x, 0, 8) — ряды;
niceindices(powerseries(sin(x), x, 0)) — ряды с упрощением;
Упрощения
simp: false — отключить принудительное упрощение «на лету»;
ratdenomdivide — по умолчанию системная переменная имеет значение «true». В этом случае каждая дробь, в которой числитель является суммой, раскладывается на сумму дробей с одинаковым знаменателем. Если же присвоить этой опции значения «false», то тогда все дроби с одинаковым знаменателем будут объединены в одну дробь с числителем в виде суммы числителей начальных дробей;
expand() — раскрыть скобки, упростить;
distrib() – expand(), но только на один уровень в глубину;
combine() — функция, собирающая воедино дроби с одинаковыми знаменателями;
trigsimp(%) — тригонометрические упрощения через основное тригонометрическое тождество;
trigrat(%) — аналогично, посильнее;
trigreduсe(%) — преобразовать тригонометрические выражения в канонические конечные тригонометрические ряды (Fourier sums) [преобразует тригонометрическое выражение как сумма слагаемых, каждое из которых содержит один синус или косинус];
trigexpand(%) — «раскрывает» аргументы тригонометрических функций, согласно правилам тригонометрических функций от суммы углов;
partfrac(%) — разложение на простые дроби;
ratsimp(%) — быстро упростить сумму рациональных выражений;
fullratsimp(выражение) — последовательно применяет к выражению функцию ratsimp, а также некоторые нерациональные преобразования и повторяет эти действия в цикле до тех пор, пока выражение не перестанет в процессе преобразования изменяться (медленнее, зато дает более надежный результат);
ratexpand(%) — приводит дроби к общему знаменателю;
radcan(%) — «сократить» экспоненты с логарифмами, перейдя к каноническому радикалу [упрощение показательных, логарифмических и степенных (с рациональными степенями) функций];
factor — максимально сворачивает выражение в скобки;
factorsum() — если многочлен не может быть представлен в виде произведения нескольких сомножителей, его можно попытаться преобразовать в сумму таких произведений;
0. Также имеются такие функции как: atensimp, foursimp, fullratsimp, logarc, rootscontract, scsimp, simplify_sum, vectorsimp.
1. После ratexpand() и в числителе, и в знаменателе дроби все скобки будут раскрыты, в случае же rat() слагаемые, где имеются, например, две переменные, будут сгруппированы, и одна из них будет вынесена за скобки.
2. expand раскрывает скобки на всех уровнях вложенности, а ratexpand раскрывает рациональное выражение только первого уровня, при этом подвыражения, которые не являются рациональными, не обрабатываются;
3. ratexpand приводит дроби-слагаемые к общему знаменателю, а expand этого не делает;
4. На expand не влияет системная опция ratdenomdivide;
5. expand не преобразует в рациональные числа конечную десятичную запись независимо от значения системной опции keepfloat.
6. maxposex и maxnegex — переменные, управляющие раскрытием возведения в целую степень — максимальные положительный и отрицательный показатель степени, которые будут раскрываться этой функцией expand ( По умолчанию 1000), переназначить можно прямо в функции expand();
7. expop и expon — переменные, задают максимальные положительную и отрицательную степени, которые будут раскрываться автоматически, без вызова функций группы expand (по умолчанию 0, то есть автоматически степени не раскрываются вообще);
8. Флаг – halfangles – управляет раскрытием формул половинных углов;
Два флага – trigexpandplus и trigexpandtimes – отвечают соответственно за применение формул сумм углов и кратных углов (по умолчанию установлены);
9. Флаги trigsign и triginverses — первый принимает традиционные два значения (по умолчанию – true) и регулирует вынос знака за пределы тригонометрической функции. Флаг triginverses – трехзначный, и умолчательное его значение равно all. Он отвечает за обработку сочетаний вида sin(asin(x)) или atan(tan(x)). Значение all позволяет раскрывать эти сочетания в обоих направлениях (напомню, что при этом часть корней будет теряться); значение true оставляет разрешенным раскрытие только вида sin(asin(x)), то есть блокирует вариант с потерями периодических значений; а случай false запрещает оба направления преобразований;
10. Флаг tlimswitch. По умолчанию он тоже выключен, а если его включить, функция limit будет, при невозможности найти предел другими способами, пытаться его найти путем разложения подпредельной функции в ряд Тейлора в окрестности заданной точки;
11. Единственный флаг, имеющий прямое отношение к самой функции diff – это флаг derivabbrev, который влияет на отображение производных в ячейках вывода Maxima. По умолчанию он равен false, и производные обозначаются в виде дробей с буквой d; если же его выставить в true, производные будут отображаться в сокращенном виде, с переменными дифференцирования записанными в виде индексов.
12. solveradcan — флаг, по умолчание false, а выставив этот флаг в true, мы заставим solve применять radcan, что в некоторых случаях может помочь разрешить проблемы, которые без этого ключа приведут к невозможности найти точное решение.
Матрицы
A: matrix([1,2],[3,4]);
Определитель матрицы. Функция determinant(matrix).
Транспонирование матрицы. Функция transpose(matrix).
Вычисление обратной матрицы. Функция invert(matrix).
Построение характеристического многочлена матрицы. Функция charpoly(matrix, var).
Сложение матриц (знак «+»). Почленно складывает все элементы двух матриц.
Вычитание (знак «-»). Совершенно аналогичен сложению, но элементы матриц вычитаются.
Деление матриц (знак «/»). Деление слабо отличается от сложения, каждый элемент одной матрицы делится на соответствующий элемент другой матрицы.
Перемножение матриц почленно (знак «*»). Этот оператор работает также как и сложение: элементы первой матрицы умножаются на соответствующие элементы второй матрицы. Это не то умножениематриц, которое обычно подразумевается в курсе линейной алгебры!
Умножение матриц (знак «.», точка).
addcol(V1,[9,10]) — добавление столбца к матрице;
addrow(V1,[9,10]) — добавление строки к матрице;
V1: submatrix(V1, 6,7) — удалить из матрицы V1 6-й и 7-й столбец;
submatrix(начальный номер удаляемой строки, конечный номер удаляемой строки; Имя
матрицы;) — уменьшение количества строк;
M[j, i] — обращения к конкретному элементу массива М;
zeromatrix(m, n) — создание нулевой матрицы размерностью m*n;
ident(n) — создание единичной квадратной матрицы;
diagmatrix(n, x) — создание диагональной квадратной матрицы размерностью n*n;
transpose(M) — транспонирование матрицы M;
matrix_size(M) — определение количества столбцов и строк матрицы;
rank(M) — определение ранга матрицы;
mattrace(M) — определение следа (суммы диагональных элементов) квадратной матрицы (* приложению предшествует загрузка пакета для работы с матрицами: load («nchrpl»));
determinant(М) — вычисление определителя (детерминанта) квадратной матрицы;
invert(M) -вычисление матрицы, обратной к М.
Обыкновенные дифференциальные уравнения
1)
ode2(уравнение, функция, переменная). Функцией обычно является у, а переменной — х;
Помимо решения дифференциального уравнения в общем виде, можно решать уравнения с начальными условиями (краевая задача). Для этого необходимо решить уравнение в общем виде при помощи функцииode2, а затем воспользоваться одной из функций поиска начальных условий:
ic1(решение, точка х, значение у в точке х) —для решения дифференциальных уравнений 1-го порядка с начальным условием;
ic2(решение, точка х, значение у в точке х, значение y’ в точке х) — для решения дифференциальных уравнений 2-го порядка с начальным условием;
bc2(решение, точка х1, значение у в точке х1, точка х2, значение у в точке х2) — для решения дифференциальных уравнений 2-го порядка с начальными условиями в виде двух точек;
2)
desolve(дифференциальное уравнение, переменная);
Если осуществляется решение системы дифференциальных уравнений или есть несколько переменных, то уравнение и/или переменные подаются в виде списка:
desolve([список уравнений], [переменная1, переменная2. ]);
Так же как и для предыдущего варианта, для обозначения производных в дифференциальных уравнениях используется функция diff, которая имеет вид ‘diff(f(x), x);
atvalue(функция, переменная = точка, значение в точке) — начальные значения.
Графики
plot2d(sin(x), [x,0,6]);
plot2d(sin(x), [x,0,1], [y,0,1]);
plot2d([parametric, realpart(W(%i*t)), imagpart(W(%i*t))], [t,0,100], [nticks,1000])$
Параметрические графики строятся так:
[parametric, x(t), y(t)]. Поэтому из приведенной формулы были подставлены параметрические функции. Далее, [t,0,100] — это диапазон точек, в котором рисовать годограф. Тут у каждого получается по-разному, ясно, что кривая уходит либо в 0, либо в бесконечность, тут главное не переборщить. Рекомендуется поиграться с диапазоном значений t, чтобы определить откуда и куда движется кривая. Данный пример берёт начало в точке [-1, 0] и стремится к [0, 0]. [nticks,1000] — этот параметр задает число точек для интерполяции графика. Чем их больше — тем более гладким будет выглядеть график и больше времени потребуется на его построение.
Графики в полярных координатах — применяется функция draw2d со следующими аргументами:
user_preamble = «set grid polar», // построение в полярных координатах;
nticks = n, // n — число точек;
xrange = [dx1, dx2], // диапазон изменения x;
yrange = [dy1, dy2], // диапазон изменения y;
color = red, // цвет;
line_width = k, // ширина линии, которой строится график;
title = «общее название графика»,
polar(функция, переменная, нижняя_граница _переменной, верхняя_граница_переменной) // функция построения графика;
Обязательными являются первый и последний аргументы функции. Первый инициирует построение графика в полярных координатах, последний (polar) — это функция, по которой строится график.
plot3d(((x — 10)/5)*((y — 10)/5),[x, 0,20],[y, 0,20]) — трехмерная (3D) графика;
Редактирование трехмерного графика осуществляется так же, как и двумерного.
Трехмерная поверхность может быть заменена градиентным переходом цветов. Для этого следует применить опцию «set view map».
Программирование (подробнее в документации)
for, while, until и т.д.
Примеры:
for i in s do
for k:1 thru b:3 do
for переменная: начало step шаг thru конец do выражение
for переменная: начало step шаг while условие do выражение
for переменная: начало step шаг unless условие do выражение
Задание функции:
f1(x,y):=x+y;
Русское обозначение — в Maxima:
arccos — acos
arcsin — asin
arctg — atan
ch — cosh
sh — sinh
ctg — cot
ln — log
tg — tan
Символы греческого алфавита:
Gamma; Theta; Psi и т.д.
Обработка данных:
1)
load (descriptive)$ /*загрузить расширение*/
a:[1,2,3,4];
mean(a); /*=5/2 среднее*/
var(a); /*=5/4 дисперсия*/
std(a); /*=?5/2 среднеквадратичное отклонение*/
mean (средняя арифметическая);
median (медиана);
variance (дисперсия);
deviation (среднее квадратичное отклонение);
2)
a:[1.0,2.0,3.0,4.0];
for i in a do ldisp( sin(i)/i );
Вычисление производных по всем переменным, входящим в выражение:
eq: x*l/k; /*исходное выражение*/
res: 0$ for i in listofvars(eq) do res: res + (diff(eq,i) * concat(«d»,(i)))^2$
Для большей точности существует специальная функция bfloat() (big float, большой float), а также переменная ffprec — за число знаков после запятой. То есть для повышения/понижения точности нужно присвоить переменной fpprec другое числовое значение и воспользоваться функцией bfloat() вместо float(). Нужно, чтобы переменная numer равнялась false.
По умолчанию Maxima работает в системе МКС: метр-килограмм-секунда:
2*m;
2*cm;
setunits([centigram,inch,minute]) — аргументами которой являются три базовых единицы измерения: веса, длины и времени;
setunits([kg, m, s]);
convert(inch,[sm]); — перевод единиц измерения;
stringout(«/Users/myusername/file1maxima.mc»,INPUT);
To save all your work as a «tape» that can be replayed later, all your input can be saved to a file.
batch(«/Users/myusername/file1maxima.mc»);
Loading the saved file: the saved file can also be loaded directly, although the exact numbering of lines will change from the original calculation.
SIMPSUM:TRUE;
sum(k, k, 1, n), simpsum;
=> \displaystyle <
product(1/(n^2),n,1,10); Products work in much the same way.
niceindices(powerseries(%e^x, x, 0));
=> \displaystyle \sum_^<\infty ><<
taylor(%e^x, x, 0, 5);
=> \displaystyle 1+x+<
trunc(%); Since the output of taylor has special properties, we need to convert it into a polynomial.
load(«newton»);
=>/sw/share/maxima/5.9.0rc3/share/numeric/newton.mac
newton(x^7-5*x^6+4*x^4-5*x^2+x+2,1);
=>8.194213634964119B-1
tex(%)- преобразовать выражение к виду TeX;
$$\left(x+1\right)^2$$
Преобразовать TeX в PDF:
1. Paste the following five lines verbatim into the text editor:
\documentclass
\begin
\huge
\end
2. Copy the tex() output line, and paste it between the \huge and \end
3. Save the result in text format as: myoutput.txt
4. In the terminal window, navigate to the directory where you saved myoutput.txt
5. type:
pdflatex myoutput.txt
6. Hit return — a PDF file called myoutput.pdf containing your typeset equation will now be created in this directory.
load(to_poly_solve); — дополнительные процедуры для решения систем алгебраических уравнений;
to_poly_solve([3*z1+z2+2=0,sqrt(z1)=z2],[z1,z2]);
sol:rk([rk1, rk2, gamma, w], [gamma, w, fi, tetta], [0, %pi/8, %pi/2, 0], [t, 0, Tmax with_stdout («gamma.txt», for k:1 thru points do print (sol[k][1], sol[k][2])) — пример ввода данных из файла.
А теперь рассмотрим типовой пример использования Maxima в студенческой жизни. Красиво и интересно данный процесс был показан в статье на Хабре ранее. Я в свою очередь только поверну координатные оси в одном уравнении:
F:uxx+2*uxy+cos(x)^2*uyy-ctg(x)*(ux+uy); /*искомое уравнение*/ A:F,uxx=uxx,uxy=0,uyy=0,ux=0,uy=0$ A:A/uxx$ B:F,uxx=0,uxy=uxy,uyy=0,ux=0,uy=0$ B:B/(2*uxy)$ C:F,uxx=0,uxy=0,uyy=uyy,ux=0,uy=0$ C:C/(uyy)$ D:F,uxx=0,uxy=0,uyy=0,ux=ux,uy=0$ D:D/(ux)$ E:F,uxx=0,uxy=0,uyy=0,ux=0,uy=uy$ E:E/(uy)$ print(«A = «,A)$ print(«B = «,B)$ print(«C = «,C)$ print(«D = «,D)$ print(«E = «,E)$ delta:B^2-A*C$ print(«Delta w1 = «,w1)$ ‘diff(y,x,1)=(2*B-sqrt((2*B)^2-4*A*C))/(2*A); ode2(%,y,x); solve(%,%c)$ w2:rhs(%[1])$ print(«w2 tm-article-presenter__meta»>
Name already in use
Maxima -программа для выполнения различных математических операций, также строит графики с помощью прораммы gnuplot. Ее базовый интерфейс — это командная строка.
wxMaxima — пользовательский интерфейс основной программы maxima (имеются встроенные меню для выполнения стандартных математических операций).
Символьные вычисления в Maxima
Среда maxima и wxmaxima. Режим калькулятора
Набрать выражение, закончить строку «;» и SHIFT-ENTER для выполнения.
(%i1) — метка для первой строки ввода;
(%o1) — метка для первой строки вывода (результат вычислений).
float(%); — эта команда, выведет строку, которую мы укажем (float(%i1);).
Мы послали 5 строк (синие) на выполнение в Maxima. Каждая строка должна завершаться символом «;» или «$». Для «;», Maxima выведет (покажет) результат выполнения строки. При использовании «$» результат будет получен, но не выведен. (Полезно для скрытия промежуточных результатов громоздких вычислений).
«1/3» — вычисляется символьно (простая дробь);
«1.0/3.0» — вычисляется численно (десятичная дробь);
% — использует последний результат вычислений;
%o1 — результат выведенный в строке с данным идентификатором.
Пример символьного вычисления с последующим переводом в численный результат:
Присвоение. Алгебраические выражения
Перевод результата в численную форму:
Работа с алгебраическими выражениями:
Дифференцирование и интегрирование
Для дифференцирования используется функция «diff».
Неопределенные и определенные интегралы:
Посмотрим на графике:
Определим функцию и проинтегрируем её:
Иногда Maxima задает вопросы. Надо ответить и нажать SHIFT-ENTER. Можно сокращенно (вместо «positive;», можно «p»).
Можно «ответить» заранее (функция «assume») и отменить предположение функция «forget»).
Решение квадратного уравнения:
Функция «matrix» создает матрицы. Матрицы могут содержать нечисловые выражения.
Матричные вычисления
Maxima позволяет легко манипулировать матрицами. В следующем примере задаются две матрицы, которые затем складываются (+) и перемножаются (.):
Функция determinant вычисляет определитель матрицы.
Транспонирование матрицы осуществляется функцией transpose.
Для получению обратной матрицы используется операция ^^-1 или функция invert.
Как известно, каждый элемент b ij обратной матрицы B = A -1 получается делением алгебраического дополнения A ij соответствующего элемента исходной матрицы на ее определитель |A|. Для того чтобы вынести 1/|A| в качестве сомножителя применяется функция detout.
Убедимся в правильности полученного результата, умножив A на обратную к ней матрицу:
Будьте внимательны: в результате выполнения операции ^-1 получится матрица, каждый элемент которой обратен элементу исходной, а не обратная матрица.
Использование матриц позволяет легко решать системы линейных уравнений с несколькими переменными. Пусть A — матрица коэффициентов системы, X — матрица неизвестных, B — матрица свободных членов системы. Тогда матрица X находится по формуле X = A -1 . B, где операция . означает матричное умножение.
Пример
Решим следующую систему уравнений матричным способом.
Сначала заполним соответствующие матрицы, а затем получим матрицу результатов: