Введение в пакет Maxima1
.pdfАрифметические операторы могут использоваться и в качестве функций. В этом случае символ оператора, взятый в кавычки, сопровождается списком аргументов. Операторы сложения и умножения дадут нам коммутативные функции n аргументов, а операторы деления и возведения в степень – бинар- ные некоммутативные функции.
Несколько примеров:
10
Все действия вполне очевидны, прокомментируем только некоторые из них. Каждая строка ввода в Maxima должна завершаться либо символом «;», либо символом «$». В первом случае операция будет выполнена и результат ее отображен на экране в строке вывода. Во втором, вывод будет подавлен, но результат операции все равно будет храниться в соответствующей области памяти, и может быть вызван обращением к метке соответствующей (неото- браженной) строки вывода. Символы операций могут, как разделяться про- белами, так и не разделяться. Дроби (если иное не оговорено специально) не вычисляются, а остаются в рациональном виде.
К логическим операторам относятся and – логическое «и», or – логиче- ское «или» и not – логическое «не».
Для операций отношений используются =, <, <=, >=, >, #. В пояснении из них нуждается только последний: символом «#» в Maxima обозначается «не равно».
В качестве оператора присваивания используется двоеточие «:», а опера- тор «:=» является оператором задания функции.
Полный список операторов Maxima может быть найден в файле справки, приведем здесь еще три из наиболее употребительных:
«!» – оператор факториала;
«.» – матричное некоммутативное умножение (в руководстве пользовате- ля рекомендуется отделять пробелами от операндов, на практике работает и без пробелов);
11
«^^» – некоммутативный матричный оператор возведения в степень, со- ответствующий умножению «.».
Функции, описывающие основные математические операции (дифферен- цирование, интегрирование и т.п.) будем вводить по мере необходимости, здесь же приведем список наиболее употребительных математических функ- ций.
abs(x) − x
signum (x) – сигнум sqrt (x) – x
exp(x) – e x log (x) – ln( x)
Maxima не имеет встроенной функции для десятичного логарифма, как, впрочем, и для логарифма по любому другому основанию. В случае необхо- димости пользователь может сам задать подобную функцию. Например (функция radcan() будет описана далее):
Тригонометрические функции:
12
sin (x), cos (x), tan (x), cot (x), sec (x), csc (x)
Обратные тригонометрические функции:
asin (x), acos (x), atan (x), acot (x), asec (x), acsc (x)
Гиперболические функции:
sinh (x), cosh (x), tanh (x), coth (x), sech (x), csch (x)
Обратные гиперболические функции:
asinh (x), acosh (x), atanh (x), acoth (x), asech (x), acsch (x)
|
Некоторые специальные функции: |
bessel_j (index, expr) |
Функция Бесселя первого рода |
bessel_y (index, expr) |
Функция Бесселя второго рода |
bessel_i (index, expr) |
Модифицированная функция Бесселя первого рода |
bessel_k (index, expr) |
Модифицированная функция Бесселя второго рода |
%p[u,v] (z) |
Функция Лежандра первого рода |
%q[u,v] (z) |
Функция Лежандра второго рода |
%f[p,q] ([], [], expr) |
Обобщенная гипергеометрическая функция |
gamma(z) |
Гамма функция |
gammagreek(a,z) |
Неполная гамма функция. |
Системные переменные (флаги)
Правила выполнения действий над выражениями в Maxima не являются заданными раз и навсегда, а могут изменяться пользователем, в зависимости от стоящих перед ним задач. Изменять эти правила можно, задавая опреде- ленные значения глобальных системных переменных. Ниже приводятся лишь некоторые из них, информацию об остальных, при необходимости можно найти в файле помощи Maxima.
13
Таблица 2
Краткий список системных переменных
|
Флаг |
Возможные |
Значение |
|
|
Описание |
|
|
||
|
|
значения |
по умолчанию |
|
|
|
|
|
|
|
|
|
true |
|
|
Определяет способ отображения на |
|||||
|
derivabbrev |
false |
|
экране производной (краткая/полная |
||||||
|
false |
|
||||||||
|
|
|
|
форма записи) |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
||
|
|
true |
|
|
Автоматическое |
использование |
||||
|
halfangles |
false |
|
формул половинного аргумента в три- |
||||||
|
false |
|
||||||||
|
|
|
|
гонометрических выражениях |
|
|
||||
|
|
|
|
|
|
|
||||
|
|
true |
|
|
Запрет преобразования чисел с пла- |
|||||
|
keepfloat |
false |
|
вающей точкой к рациональной форме |
||||||
|
false |
|
||||||||
|
|
|
|
записи |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
true |
|
|
Преобразование |
дробей, содержа- |
||||
|
ratdenomdivide |
true |
|
щих в числителе сумму к сумме дро- |
||||||
|
false |
|
||||||||
|
|
|
|
бей |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2*10-8 |
|
Точность |
при преобразовании |
от |
|||
|
ratepsilon |
любое |
|
формы записи с плавающей точкой к |
||||||
|
|
|
|
|
рациональной. |
|
|
|
|
|
|
|
true |
|
|
Автоматическое |
раскрытие |
скобок |
|||
|
ratexpand |
false |
|
в выражениях, |
приведенных к кано- |
|||||
|
false |
|
||||||||
|
|
|
|
нической форме |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
||
|
ratfac |
true |
false |
|
Автоматическое вынесение за скоб- |
|||||
|
false |
|
ки всех возможных множителей |
|
||||||
|
|
|
|
|
||||||
|
ratsimpexpons |
true |
false |
|
Автоматическое упрощение показа- |
|||||
|
false |
|
телей степени |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|||
|
simp |
true |
true |
|
Автоматическое |
упрощение |
выра- |
|||
|
false |
|
жений |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
||
|
sumsplitfact |
true |
true |
|
Запрещает |
автоматическое |
сокра- |
|||
|
false |
|
щение факториалов |
|
|
|
||||
|
|
|
|
|
|
|
||||
|
trigexpand |
true |
false |
|
Автоматическое |
раскрытие |
скобок |
|||
|
false |
|
в тригонометрических выражениях |
|
||||||
|
|
|
|
|
||||||
|
|
true |
|
|
Автоматическое |
использование |
||||
|
trigexpandplus |
true |
|
формул сумм аргументов в тригоно- |
||||||
|
false |
|
||||||||
|
|
|
|
метрических выражениях |
|
|
||||
|
|
|
|
|
|
|
||||
|
|
true |
|
|
Автоматическое |
использование |
||||
|
trigexpandtimes |
true |
|
формул кратного аргумента в триго- |
||||||
|
false |
|
||||||||
|
|
|
|
нометрических выражениях |
|
|
||||
|
|
|
|
|
|
|
||||
|
|
|
|
|
Определяет |
правила вычисления |
||||
|
|
true |
|
|
выражений |
вида |
sin(asin(x)) |
и |
||
|
|
|
|
|
asin(sin(x)). Значение all позволяетвы- |
|||||
|
triginverses |
false |
all |
|
числять их в обоих направлениях, зна- |
|||||
|
|
|
|
|
чение true – |
только в прямом, |
значе- |
|||
|
|
all |
|
|
ние false блокирует такие вычисления |
|||||
|
|
|
|
|
полностью |
|
|
|
|
|
|
trigsign |
true |
true |
|
Вынос знака |
за |
тригонометриче- |
|||
|
false |
|
скую функцию |
|
|
|
|
|||
|
|
|
|
|
|
|
|
14
Существительные и глаголы
Нет, это не попавший сюда по ошибке кусок пособия по филологии, а до- словный перевод терминов Maxima «nouns» и «verbs». Дело в том, что выра- жения Maxima могут находиться в двух состояниях: вычисляемом – «verb» и невычисляемом – «noun». В состоянии «verb», например, по умолчанию, на- ходятся все функции. В состоянии «noun» выражение будет храниться в сим- вольной форме и может быть использовано для конструирования других вы- ражений. Каждое выражение может быть переведено из одной формы в дру- гую. Так, добавление апострофа «’» перед вычисляемым выражением пре- вращает его в невычисляемое и наоборот, два апострофа «’’» позволяют при- нудительно вычислить выражение в состоянии «noun». Например:
здесь была использована функция diff(f, x) – производная от функции f по пе- ременной x.
Способы вычисления
Мы уже знаем, что с помощью изменения глобальных переменных среды можно регулировать параметры вычисления выражений. А еще мы умеем за- прещать или разрешать вычислять какое-то одно выражение. Может возник- нуть вопрос (нет, он, конечно, может и не возникнуть, но все-таки…), « а нельзя ли управлять вычислением не глобально, а для какого-то отдельно взятого выражения?» – и ответом будет – « можно». Для этого предназначена функция ev (<выражение>, <арг_1>, ..., <арг_n>), набор возможных аргу- ментов которой очень велик. Перечислим их:
15
|
|
|
|
|
Таблица 3 |
|
|
|
Аргументы функции ev |
||||
|
|
|
|
|
|
|
|
Аргумент |
Возможные |
|
|
Описание |
|
|
|
значения |
|
|
|
|
|
simp |
true |
|
Действие аналогично глобальному ключу – упроще- |
|
|
|
false |
|
ние выражений |
|
||
|
|
|
|
|||
|
|
true |
|
Подавляет вычисления, применяется при необходи- |
|
|
|
noeval |
|
мости воспользоваться дополнительными возможно- |
|
||
|
false |
|
|
|||
|
|
|
стями функции без вычисления выражений. |
|
||
|
|
|
|
|
||
|
nouns |
true |
|
Вычисляет находящиеся в состоянии «noun» выра- |
|
|
|
false |
|
жения |
|
|
|
|
|
|
|
|
||
|
expand |
true |
|
Раскрывает скобки в выражении |
|
|
|
false |
|
|
|||
|
|
|
|
|
|
|
|
|
true |
|
Позволяет, |
при вычисление обратной матрицы не |
|
|
detout |
|
делить почленно ее элементы на определитель, а дер- |
|
||
|
false |
|
|
|||
|
|
|
жать его в множителе за пределами матрицы. |
|
||
|
|
|
|
|
||
|
diff |
true |
|
Вычисляет все входящие в выражение производные, |
|
|
|
false |
|
находящиеся в состоянии «noun» |
|
||
|
|
|
|
|||
|
derivlist |
–– |
|
Вычисляются только производные по x, y, z. |
|
|
|
(x, y, z, ...) |
|
|
|||
|
|
|
|
|
|
|
|
float |
true |
|
Переводит дробные выражения в форму с плаваю- |
|
|
|
false |
|
щей точкой |
|
|
|
|
|
|
|
|
||
|
numer |
true |
|
Вычисляет |
численные значения математических |
|
|
false |
|
функций, аргументы которых заданы в численном виде. |
|
||
|
|
|
|
|||
|
pred |
true |
|
Вычисляет выражения логического типа |
|
|
|
false |
|
|
|||
|
|
|
|
|
|
|
|
eval |
true |
|
Проводит дополнительный цикл вычислений |
|
|
|
false |
|
|
|||
|
|
|
|
|
|
Кроме того, функция ev может принимать в качестве аргументов равенст- ва, задающие условия для переменных, входящих в вычисляемое выражение.
Можно заметить, что, несмотря на использование для задания значения параметра во второй строке, переменная а осталась неопределенной.
16
Еще одной интересной особенностью этой функции является то, что ее можно вообще не вызывать: задание в командной строке выражения с аргу- ментами функции ev будет эквивалентно обращению к ней:
Что характерно, переменная а все еще не определена.
Очистка памяти
Любой идентификатор может быть очищен от присвоенного ему ранее значения командой kill(<идентификатор>). Для очистки всей памяти и сброса значений меток ввода и вывода используется команда kill(all). Этого же эф- фекта можно добиться при помощи wxMaxima: Главное меню – Maxima – Очистить память.
Итак, теперь вы знакомы с алфавитом Maxima. Пора учиться писать.
Преобразования рациональных выражений
Напомним, на всякий случай, что к рациональным выражениям относятся полиномы и их отношения. Maxima может работать с полиномами как в об- щем виде, так и в каноническом (Canonical Rational Expression). В последнем случае выражение представляется, как дробь, в числителе и знаменателе ко- торой находятся многочлены, не имеющие общих множителей, причем зна- менатель является положительным. Для приведения выражения к канониче- ской форме служит функция rat:
17
Если не изменено умолчательное значение глобальной переменной keepfloat, то функция rat заменяет все числа с плавающей точкой их рацио- нальными эквивалентами с точностью задаваемой системной переменной ra-
tepsilon.
Рассмотрим еще несколько функций для работы с рациональными выра- жениями.
coeff (expr, x, n) – возвращает коэффициент стоящий при xn в выражении expr:
combine (expr) – упрощает выражение expr, путем объединения слагае- мых с общим знаменателем в одно слагаемое:
18
denom (expr) – возвращает знаменатель выражения expr.
divide (p_1, p_2, x_1, ..., x_n) – возвращает частное и остаток от деления многочлена p_1 на многочлен p_2, считая главной переменную x_n.
factcomb (expr) – пытается включить коэффициенты при факториалах в выражении expr в сами факториалы.
factor (expr) – раскладывает выражение expr на простейшие множители. Если expr – целое число, то оно будет разложено на простые числа, если дробь, то будут разложены ее числитель и знаменатель.
factorsum (expr) – пытается разложить выражение expr на сумму произ- ведений простейших множителей.
19