Главная страница
Финансы
Экономика
Математика
Начальные классы
Информатика
Биология
Медицина
Сельское хозяйство
Ветеринария
Вычислительная техника
Дошкольное образование
Логика
Этика
Религия
Философия
Воспитательная работа
История
Физика
Политология
Социология
Языкознание
Языки
Право
Юриспруденция
Русский язык и литература
Строительство
Промышленность
Энергетика
Другое
Доп
образование
Связь
Электротехника
Автоматика
Физкультура
Технология
Классному руководителю
Химия
Геология
Иностранные языки
Логопедия
Искусство
Экология
Культура
География
ИЗО, МХК
Казахский язык и лит
Директору, завучу
Школьному психологу
Обществознание
Социальному педагогу
Языки народов РФ
ОБЖ
Музыка
Механика
Украинский язык
Астрономия
Психология

Введение в пакет Maxima2. М. КузьменкоВведение всистему аналитических вычислений Maxima Часть 2


Скачать 0.53 Mb.
НазваниеМ. КузьменкоВведение всистему аналитических вычислений Maxima Часть 2
АнкорВведение в пакет Maxima2.pdf
Дата11.07.2018
Размер0.53 Mb.
Формат файлаpdf
Имя файлаВведение в пакет Maxima2.pdf
ТипДокументы
#19645

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Федеральное государственное образовательное учреждение высшего профессионального образования
«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
С
.М. Кузьменко
Введение всистему аналитических вычислений Maxima
Часть
2
Ростов-на-Дону
2007

1
Вычисление производных
Функция, которая используется в Maxima, для вычисления производных и дифференциалов уже упоминалась ранее: это функция diff. Рассмотрим ее под- робнее. Возможны четыре различных варианта вызова этой функции:
diff (expr)
diff (expr, x)
diff (expr, x, n)
diff (expr, x_1, n_1, ..., x_m, n_m)
Первый вариант – diff (expr) – вычисляет полный дифференциал выражения
expr. При этом, для записи дифференциалов переменных используется функция
del(x).
Второй вариант – diff (expr, x), которым мы и пользовались ранее, вычисляет первую производную от выражения expr по переменной x.
В третьем варианте – diff (expr, x, n) – вычисляется n-я производная от выра- жения expr по переменной x.

2
И, наконец, четвертый вариант – diff (expr, x_1, n_1, ..., x_m, n_m) – позволяет вычислить смешанные частные производные порядков n_1,…, n_m, по перемен- ным x_1,… x_m, соответственно, от выражения expr.
В невычисляемой форме (с апострофом) функция diff используется при со- ставлении дифференциальных уравнений. Для того чтобы определить старший порядок производной от переменной y по независимой переменной x в выражении
expr служит функция derivdegree (expr, y, x).
Для задания цепочки зависимостей функций и переменных друг от друга слу- жит функция depends (f_1, x_1, ..., f_n, x_n). В качестве аргументов функции
depends могут передаваться имена переменных, массивы или списки. Все зависи- мости, устанавливаемые при вызовах функции depends накапливаются в систем- ной переменной dependencies, являющейся списком. Для удаления из списка за- висимостей функции f служит команда remove(f, dependency).

3
Следует отметить, что хранящиеся в переменной dependencies зависимости используются только функцией diff. Другие функции, такие как интегрирование или преобразования Лапласа учитывают только зависимости явно заданные в своих аргументах.
Вычисление интегралов
Для вычисления неопределенных и определенных интегралов в Maxima ис- пользуется функция integrate. Так же, как и функция diff, она может быть вызва- на с различными наборами параметров.
Очевидно, что в случае вызова integrate (expr, x), вычисляется неопределен- ный интеграл от выражения expr по переменной x а в случае вызова integrate

4
(expr, x, a, b) – определенный интеграл от выражения expr по переменной x в пре- делах от a до b.
При невозможности вычислить интеграл, он будет либо возвращен в неизмен- ном виде, либо частично упрощен.
Maxima может вычислять и несобственные интегралы, как первого (с беско- нечными пределами), так и второго (от функций с бесконечными разрывами) ро- да.

5
Если несобственный интеграл расходится, мы получим соответствующее со- общение об ошибке.
Единственное ограничение, накладываемое Maxima на пределы интегрирова- ния – они не должны зависеть от переменной, по которой интегрирование ведет- ся.
Для пользователей, считающих, что команду integrate (expr, x, a, b) набирать слишком долго, существует альтернативный способ вызова команды вычисления определенного интеграла: defint (expr, x, a, b). Никаких различий между результа- тами выполнения этих команд не существует.
Чтобы провести замену переменной необходимо воспользоваться функцией
changevar (expr, f(x,y),y,x), которая заменяет переменную x на y во всех интегра- лах, входящих в выражение expr, руководствуясь равенством f(x,y)=0.
В Maxima определено, также, большое количество разнообразных функций численного интегрирования, обзор которых выходит за пределы данного пособия, но, при необходимости, может быть найден в руководстве пользователя.

6
Решение алгебраических уравнений
Для аналитического решения алгебраических уравнений и их систем можно воспользоваться функцией solve. как и многие другие функции Maxima, функция
solve может быть вызвана с различными наборами аргументов. Кроме того, как обычно бывает в Maxima, ее поведение регулируется значениями системных пе- ременных. Рассмотрим возможные варианты вызова функции solve.
solve (expr, x) решает алгебраическое уравнение expr относительно перемен- ной x. В качестве результата выдается список корней уравнения. В случае, если выражение expr уравнением не является, то Maxima автоматически дополняет его введением нулевой правой части expr=0.
Если expr зависит только от одной переменной, то возможен вызов функции
solve с одним аргументом: solve (expr).
Для решения системы n уравнений с n неизвестными используется вызов solve
([eqn_1,…,eqn_n], [x_1,…,x_n])

7
Механизм поиска решений систем уравнений имеет некоторые особенности.
Сначала функция solve анализирует переданную ей в качестве аргумента систему уравнений, а затем, в зависимости от ее вида (линейная или нелинейная) обраща- ется к одной из двух функций linsolve или algsys, которые, впрочем, могут быть вызваны пользователем и самостоятельно.
Функция linsolve ([eqn_1,…,eqn_m], [x_1,…,x_n]) решает систему m линейных уравнений с n неизвестными.
В приведенном примере Maxima исключила из системы третье уравнение, как зависимое, выбрала x1 и x2 за базисные, а x3 и x4 за независимые переменные, и корректно нашла решение.
В случае несовместности системы выдается сообщение об ошибке:

8
Что же касается функции algsys ([eqn_1,…,eqn_m], [x_1,…,x_n]), то она пыта- ется решить произвольную алгебраическую систему.
Как и функция solve, две последние функции, в случае, когда eqn_i не являют- ся уравнениями, дополняют их правой частью, равной нулю.
Если решение системы найти не удается, возвращается пустой список [].
Приведем краткий список системных переменных, влияющих на работу с уравнениями.
Флаг
Возможные значения
Значение по умолча- нию
Описание globalsolve true false false
Если true, то после решения сис- темы двух и более линейных урав- нений найденные значения при- сваиваются переменным. При ре- шении любых других уравнений
(систем) игнорируется linsolvewarn true false true
Управляет выводом функцией linsolve сообщения об исключении зависимого уравнения из системы realonly true false false
Если true – функцией algsys воз- вращаются только действительные корни solvetrigwarn true false true
Управляет выводом сообщения об использовании обратных триго- нометрических функций и возмож- ной потере корней solve_inconsistent_error true false true
Управляет выводом сообщения о несовместности системы уравне- ний.

9
Решение дифференциальных уравнений
Возможности Maxima по решению дифференциальных уравнений большим разнообразием не отличаются. Но все же, Maxima умеет находить частные реше- ния линейных дифференциальных уравнений и их систем, а также общие и част- ные решения обыкновенных дифференциальных уравнений первого и второго по- рядков. Необходимо учитывать, что при работе с линейными дифференциальны- ми уравнениями Maxima требует задания функциональных зависимостей в явном виде, как для функций, так и для их производных, соответственно не f и `diff(f,x) а f(x) и `diff(f(x),x).
Для задания начальных условий служит функция atvalue (expr, x=a, c), кото- рая задает значение с выражению expr в точке x=a.
Итак, для решения линейных дифференциальных уравнений и их систем слу- жит функция desolve. В первом случае она вызывается desolve (eqn, f) а во втором – desolve ([eqn_1,…, eqn_n], [f_1,…, f_n])

10
Для решения обыкновенных дифференциальных уравнений первого и второго порядка служит функция ode2 (eqn, dvar, ivar) возвращающая, в случае успеха решение уравнения eqn считая dvar независимой, а ivar зависимой переменными.
В случае невозможности, по какой-либо причине найти решение функция воз- вращает значение false. Для отображения констант интегрирования в решении уравнения первого порядка используется системная переменная %c, а в решении уравнения второго порядка пара переменных %k1 и %k2.
Вместе с функцией ode2 могут быть использованы функции для решения за- дачи Коши и краевой задачи.

11
Функции ic1
(solution, xval, yval) и ic2 (solution, xval, yval, dval) принимают в качестве аргументов solution – решение уравнения, полученное функцией ode2
xval – начальная точка, yval и dval – значения функции и ее первой производной в начальной точке соответственно.
Для решения краевой задачи служит функция bc2 (solution, xval1, yval1, xval2,
yval2), где solution – решение уравнения, полученное функцией ode2 а yval1 и
yval2 –значения функции в точках, xval1 и xval2 соответственно.
Матрицы и
линейная алгебра
Maxima имеет достаточно обширный набор функций, позволяющих работать с матрицами. Приведем здесь в алфавитном порядке наиболее употребительные из них.
Функция addcol (M, list_1, ..., list_n) добавляет один или несколько столбцов, заданных списками или матрицами к матрице М.

12
В случае несовместимости размеров выдается системное сообщение об ошибке:
Функция addrow (M, list_1, ..., list_n) добавляет одну или несколько строк, заданных списками или матрицами к матрице М.
Следует обратить внимание, что столбцы и строки добавляются к матрице за последним столбцом (последней строкой).
Функция adjoint (M) находит транспонированную матрицу алгебраических дополнений матрицы М.
Функция augcoefmatrix ([eqn_1, ..., eqn_m], [x_1, ..., x_n]) возвращает расши- ренную матрицу системы линейных алгебраических уравнений [eqn_1, ..., eqn_m].
Слагаемые, не имеющие множителя из списка неизвестных [x_1, ..., x_n] образуют столбец свободных членов.

13
Функция charpoly (M, x) составляет характеристический многочлен матрицы
M относительно переменной х.
Решая уравнение, задаваемое этим многочленом, мы можем найти характери- стические числа матрицы:
Функция coefmatrix ([eqn_1, ..., eqn_m], [x_1, ..., x_n]) возвращает матрицу системы линейных алгебраических уравнений [eqn_1, ..., eqn_m] с неизвестными
[x_1, ..., x_n].
Функция col (M, i) возвращает i -й столбец матрицы M. Результат имеет тип matrix.
Функция columnvector (L) возвращает матрицу-столбец, состоящий из эле- ментов списка L. Синонимом является вызов covect (L). Функция содержится в пакете eigen. Перед обращением к ней пакет должен быть подключен.

14
Функция copymatrix (M) создает копию матрицы M. Это единственныйспо-
соб
, кроме поэлементного копирования, позволяющий создать независимую ко-
пию матрицы в Maxima. Применениеоператораприсваиваниякматрицам
М2:М1приводитктому, чтопроизведяизменениеэлементовматрицыМ2
мы изменимиэлементыматрицыМ1.
Данный принцип работы с матрицами характерен для «старых» языков про- граммирования, таких как Лисп. Пользователям, привыкшим программировать, например, на языке Паскаль следует обращать особое внимание на этот факт.
Функция determinant (M) вычисляет определитель матрицы M.
Попытка вычислить определитель неквадратной матрицы вызовет сообщение об ошибке:

15
Функция diagmatrix (n, x) генерирует диагональную матрицу, размера n на n элементов, на главной диагонали которой находятся значения x.
Функция echelon (M) приводит матрицу M к верхней треугольной форме, нор- мализуя при этом элементы главной диагонали.
Функция eigenvalues (M) находит характеристические числа матрицы M. Си- нонимом является вызов eivals (M). В качестве результата возвращается список, состоящий из двух подсписков. В первом из них содержатся характеристические числа, во втором – множители, в соответствующем порядке.
Функция eigenvectors (M) находит собственные векторы матрицы M. Синони- мом является вызов eivects (M). В качестве результата возвращается список, со- стоящий из нескольких подсписков. В первом из них содержатся характеристиче- ские числа, в остальных – собственные векторы, в соответствующем порядке.

16
Эта и предыдущая функции содержатся в пакете eigen. При обращении к ним пакет подключается автоматически. В случае если это по какой-либо причине не произошло, пакет должен быть подключен вручную.
Функция ematrix (m, n, x, i, j) генерирует матрицу размера m на n, все элемен- ты которой равны нулю, за исключением элемента с индексами i и j, равного x.
Функция entermatrix (m, n) осуществляет интерактивный поэлементный ввод матрицы. В случае, если m равно n, Maxima дополнительно запрашивает, являет- ся ли матрица диагональной, симметрической, антисимметрической или матри- цей общего вида, после чего следуют приглашения ввода каждого из элементов матрицы. Каждый введенный элемент должен завершаться символом «$» или
«;».
Функция ident (n) генерирует единичную матрицу размера n на n.

17
Функция innerproduct (x, y) находит скалярное произведение двух списков, матриц строк или матриц столбцов одинаковой длины. Синонимом является вы- зов inprod (x, y). Функция содержится в пакете eigen. Перед обращением к ней пакет должен быть подключен.
Функция invert (M) находит обратную матрицу для матрицы M методом ал- гебраических дополнений.
Функция matrixp (expr) возвращает значение true, если выражение expr явля- ется матрицей и false в любом другом случае.
Функция mattrace (M) вычисляет след (сумму элементов главной диагонали) квадратной матрицы M. Функция содержится в пакете nchrpl. Перед обращением к ней пакет должен быть подключен.

18
Функция minor (M, i, j) возвращает минор позиции i, j матрицы M.
Функция rank (M) вычисляет ранг матрицы.
Функция row (M, i) возвращает i -ю строку матрицы M. Результат имеет тип matrix.
Функция setelmx (x, i, j, M) присваивает значение x элементу M[i, j]. функция возвращает в качестве результата измененную матрицу M, во всем остальном идентична оператору присваивания M[i, j] : x.
Функция submatrix (i_1, ..., i_m, M, j_1, ..., j_n) Генерирует новую матрицу, путем удаления из матрицы M строк с номерами i_1, ..., i_m и столбцов с номера- ми j_1, ..., j_n. Допускаются варианты вызова submatrix (i_1, ..., i_m, M) либо
submatrix (M, j_1, ..., j_n), приводящие к удалению только строк или только столбцов соответственно.
Функция transpose (M) в случае, если M – матрица, возвращает новую матри- цу, являющуюся транспонированной матрицей M. Если M – список, генерирует по

19
этому списку матрицу-столбец. Во всех иных случаях возвращает невычисляемое выражение 'transpose (M).
Функция triangularize (M) приводит матрицу M к верхней треугольной форме.
Действие данной функции идентично действию функции echelon (M), за исклю- чением того, что triangularize не нормализует элементы главной диагонали.
Функция uniteigenvectors (M) находит нормализованные собственные векторы матрицы M. Синонимом является вызов ueivects (M). В качестве результата воз- вращается список, состоящий из нескольких подсписков. В первом из них содер- жатся характеристические числа, в остальных – собственные векторы, в соответ- ствующем порядке. Функция содержится в пакете eigen. Перед обращением к ней пакет должен быть подключен.
Функция unitvector (х) возвращает нормализованное значение вектора х. Си- нонимом является вызов uvect (х). Функция содержится в пакете eigen. Перед об- ращением к ней пакет должен быть подключен.

20
Функция zeromatrix (m, n) генерирует матрицу размера m на n, все элементы которой являются нулями.
Построение графиков
Визуализация результатов – немаловажная часть любого исследования.
Идеологически не имея встроенных средств построения графиков, Maxima мо- жет использовать два внешних графических приложения: gnuplot и openmath.
По умолчанию используется gnuplot, довольно простая программа с постоянно расширяющимся набором возможностей: недавно, например, была добавлена интерактивность в работе с трехмерными графиками. Актуальная на сегодняш- ний день версия, поставляемая вместе с Maxima, имеет номер 4.2.
Итак, рассмотрим ассортимент графических функций Maxima.
Начнем с двумерной графики. Основная функция двумерной графики, имею- щая множество различных вариантов вызова называется plot2d. Самый простой вариант ее вызова выглядит как plot2d (expr, x_range). Здесь expr – выражение, зависящее от одной переменной, а x_range – список, состоящий из имени пере- менной и ее максимального и минимального значений. При таком варианте вызо- ва диапазон по оси ординат определяется автоматически.

21
-1
-0.8
-0.6
-0.4
-0.2 0
0.2 0.4 0.6 0.8 1
-4
-2 0
2 4
s in
(x
)*
c o
s
(2
*x
)
x
Иногда, например при наличии на интервале построения графика точек беско- нечного разрыва, автоматическое задание интервала по оси ординат не совсем удобно. Для устранения этой проблемы используется необязательный параметр функции plot2d – список вида [y, min, max]. Здесь y не имя переменной, а символ, используемый для обозначения оси ординат.
-200000
-150000
-100000
-50000 0
50000 100000 150000 200000
-4
-2 0
2 4
s in
(x
)/
c o
s
(2
*x
)
x

22
-4
-2 0
2 4
-4
-2 0
2 4
s in
(x
)/
c o
s
(2
*x
)
x
Для одновременного построения нескольких графиков используется вызов функции plot2d с первым аргументом в виде списка выражений:
-4
-2 0
2 4
-4
-2 0
2 4
x sin(2*x)
2*sin(2*x)
4*sin(2*x)
Для построения графика параметрически заданной функции в качестве аргу- мента функции plot2d передается список, начинающийся с ключа parametric:
plot2d ([parametric, expr_x, expr_y, [t, t_min, t_max],[ntiсks, n]]). Здесь expr_x и
expr_y – выражения, задающие зависимость координат от параметра t; t_min и
t_max – интервал изменения этого параметра, а ntiсks – еще один ключ, задающий

23
количество точек, по которым строится график. Поскольку значение ntiсks по умолчанию равно 10, то его увеличение всегда существенно улучшает вид по- строенного графика.
-3
-2
-1 0
1 2
3
-2
-1 0
1 2
3 4
5
c o
s
(3
*t
)+
2
*s in
(2
*t
)
3*sin(3*t)^2+2*cos(2*t)
Для построения дискретного набора точек функция plot2d вызывается с клю- чом discrete, причем возможны два варианта вызова: в первом функции передают- ся два списка координат – plot2d ([discrete, x_list, y_list]), а во втором – список, состоящий из пар [x
i
, y
i
] – plot2d ([discrete, xy_list]).
Воспользуемся для создания списков функцией makelist:

24 0
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0 2
4 6
8 10
d is c
re te d
a ta
По умолчанию дискретные наборы строятся в виде ломаной линии, но задавая дополнительные параметры функции plot2d возможно получить и другие вариан- ты вывода.
0 10 20 30 40 50 0
2 4
6 8
10
d is c
re te d
a ta
Кроме графиков явно заданных функций Maxima позволяет строить двумер- ные графики функций неявных. Для этого служит функция implicit_plot, содер- жащаяся в одноименном пакете. Синтаксис ее близок к синтаксису функции

25
plot2d, а именно: implicit_plot (expr, x_range, y_range), либо implicit_plot
([expr_1,…, expr_n], x_range, y_range) и в пояснениях не нуждается
-3
-2
-1 0
1 2
3
-4
-3
-2
-1 0
1 2
3 4
x^6 = 4*(x^4-y^4)
y^2/9+x^2/4 = 1
И, наконец, последняя функция двумерной графики, которую мы рассмотрим, это функция plotdf. Данная функция позволяет строить поле направлений обык- новенного дифференциального уравнения первого порядка, либо системы таких уравнений. Перед использованием функции необходимо подключить содержащий ее одноименный пакет.
Для построения поля направлений одного уравнения это уравнение должно быть приведено к виду
dy/dx=F(x,y) и функция F(x,y) передана в качестве аргумента plotdf. Независимая переменная здесь всегда должна обозначаться через x, а зависимая через y.
Для случая системы двух уравнений первого порядка каждое из них должно быть приведено к аналогичному виду
dx/dt=G(x,y), dy/dt=F(x,y).

26
Аргументом plotdf в этом случае будет список из двух элементов: F(x,y) и
G(x,y), в произвольном порядке.
Кроме этого функция plotdf может принимать различные опциональные клю- чи, влияющие на процесс построения и отображения поля, список которых при- водится ниже.
Ключи функции plotdf
Ключ
Значение по умолча- нию
Описание tstep
0.1
Задает шаг изменения переменной t, используемой для вычисления интегральной кривой nstep
100
Определяет количество шагов длины tstep, за кото- рые будет вычисляться интегральная кривая direction both
Определяет направление изменения независимой переменной в процессе вычисления интегральной кри- вой. Возможные значения forward, backward и both. tinitial
0
Задает начальное значение переменной t, исполь- зуемой для вычисления интегральной кривой versus_t
0
Используется для отображения дополнительного окна изображения, где интегральная кривая отобража- ется, как две функции х и у независимой переменной t trajectory_at

Задает координаты х и у начальной точки инте- гральной кривой parameters

Определяет список параметров и их числовые зна- чения. Имена и значения должны задаваться в строке, состоящей из разделяемых запятыми элементов вида
<имя>=<значение> slider

Определяет список интерактивно изменяемых пара- метров и диапазон их изменения. Имена и диапазоны должны задаваться в строке, состоящей из разделяе- мых запятыми элементов вида <имя>=: xfun

Позволяет построить поверх поля направлений на- бор графиков функций, зависящих от х. Функции пе- редаются в строке, разделяемые символом «точка с за- пятой». xradius
10
Радиус отображаемого интервала по горизонтали yradius
10
Радиус отображаемого интервала по вертикали xcenter
0
Координата x центра окна изображения ycenter
0
Координата y центра окна изображения width
500
Ширина окна изображения в пикселях height
500
Высота окна изображения в пикселях

27
Приведем несколько примеров использования функции с различными ключа- ми.
Построим поле направлений уравнения y`=x/2 и его интегральную кривую, проходящую через точку (0,2)
Теперь построим поле направлений уравнения y`=x – у
2
и его интегральную кривую, проходящую через точку (–1,3) и выведем на этот же график уравнение функции y=sqrt(x).

28
Далее построим поле направлений уравнения y`=mx
2
+ у
2
и рассмотрим его изменения в зависимости от параметра m.
Здесь, в нижней части поля вывода появляется шкала, на которой в интерак- тивном режиме можно выбрать значение параметра m.

29
Перейдем теперь к графике трехмерной. Функция, отвечающая за построение трехмерных графиков в Maxima, называется вполне предсказуемо: plot3d. и по- зволяет строить графики явно и параметрически заданных функций.
Простейший вариант вызова функции plot3d выглядит, как plot3d (expr,
x_range, y_range, <дополнительныепараметры>)
-400
-300
-200
-100 0
100 200 300 400 500 600
-6
-4
-2 0
2 4
6 -4
-3
-2
-1 0
1 2
3 4
-400
-300
-200
-100 0
100 200 300 400 500 600
Function
Существует ограничение не позволяющее строить два трехмерных графика на одном рисунке, поэтому ключ parametric перед списком параметрически задан- ных функций не требуется. Таким образом, для построения параметрических

30
функций используется вызов plot3d ([expr1, expr2, expr3], u_range, v_range, <до-
полнительные параметры>).
-4
-3
-2
-1 0
1 2
3 4 -4
-3
-2
-1 0
1 2
3 4
-1
-0.5 0
0.5 1
Function
Если мы зададим зависимость не от двух, а от одного параметра, то вместо по- верхности мы получим пространственную кривую. Тем не менее, во избежание синтаксической ошибки, диапазон изменения второго, фиктивного параметра должен быть сохранен в качестве аргумента plot3d.
-2 -1.5
-1 -0.5 0 0.5 1 1.5 2-1
-0.8
-0.6
-0.4
-0.2 0 0.2 0.4 0.6 0.8 1
-8
-6
-4
-2 0
2 4
6 8
Function

31
Кроме декартовых координат возможна работа с координатами сферическими и цилиндрическими. В первом случае необходимо использовать ключ
[gnuplot_preamble, "set mapping spherical"]
-0.2
-0.15
-0.1
-0.05 0
0.05 0.1 0.15 0.2
-0.15
-0.1
-0.05 0
0.05 0.1 0.15
-0.2
-0.15
-0.1
-0.05 0
0.05 0.1 0.15 0.2
Function а во втором – ключ [gnuplot_preamble, "set mapping cylindrical"]
-1.5
-1
-0.5 0
0.5 1
1.5 -2
-1 0
1 2
3 4
0 0.5 1
1.5 2
2.5 3
3.5 2*sin(ph)^3*(z-1)
Разобрав, достаточно подробно, какие графики можно строить с помощью
Maxima, рассмотрим теперь подробнее вопрос, «почему они строятся именно так, и можно ли это изменить?» Ответом на этот вопрос будут список системных умолчаний, связанных с графикой и методы их изменения.
Для хранения списка системных умолчаний Maxima использует переменную
plot_options, соответственно, ознакомиться с умолчаниями, действующими не

32
данный момент можно просто обратившись к этой переменной. Рассмотрим наи- более существенные ее ключи.
Некоторые ключипеременной plot_options
Ключ
Значение по умолчанию
Описание
Ключи, распознаваемые функциями plot2d и plot3d plot_format
Для Windows gnuplot
Для других платформ gnuplot_pipes
Определяет, какое графическое приложение бу- дет использоваться функциями plot2d и plot3d. При значениях gnuplot и gnuplot_pipes используется про- грамма Gnuplot, значение mgnuplot позволяет ис- пользовать для вывода графическое расширение к пакету Gnuplot, называемое Mgnuplot и, наконец, значение openmath передает вывод программе
Openmath, устанавливаемой вместе с оболочкой xMaxima. gnuplot_out_file false
Если указано имя файла, то графический вывод сохраняется в файл (например [gnuplot_out_file,
“myplot.ps”]) plot_realpart false
Если задано значение true, то может строиться график вещественной части комплексного выраже- ния. При значении false комплекснозначные функ- ции игнорируются. nticks
10
При построении графиков параметрических функций задает количество точек разбиения интер- вала изменения параметра. grid
30, 30
Задает количество точек сетки, при построении трехмерных графиков, по осям х и у, соответственно transform_xy false
Задает замену координат при построении трех- мерных графиков. Для проведения замены должно быть задано значение вида make_transform([x,y,z], f1(x,y,z), f2(x,y,z), f3(x,y,z))
Специальные ключи программы Gnuplot gnuplot_pm3d true
Контролирует использование программой
Gnuplot режима PM3D, расширяющего возможности трехмерной графики (градиентные заливки и т.п.). gnuplot_preamble
“”
Позволяет использовать команды программы
Gnuplot. Команды задаются строкой, разделяемые точками с запятой. Некоторые команды приводи- лись в примерах, полная информация может быть найдена в документации к Gnuplot.

33
Ключ
Значение по умолчанию
Описание gnuplot_curve_ titles
[default]
Определяет вид заголовков графиков функций.
При значении [default] в качестве заголовков ис- пользуются уравнения изображаемых функций. Для задания пользовательских значений ключу необхо- димо передать список строк имеющих структуру
“title ‘заголовок’ ”. Для отключения отображения заголовков используется строка “set nokey” gnuplot_curve_ styles
Стиль отображения линии графика. Некоторые команды приводились в примерах, полная инфор- мация может быть найдена в документации к
Gnuplot.
Для изменения значения переменной plot_options служит функция
set_plot_options(<новоезначениеключа>), вызывая которую мы получаем новое значение переменной plot_options. Кроме того, значение каждого из ключей мо- жет задаваться локально, в качестве дополнительного параметра графических функций, как и делалось в продемонстрированных выше примерах. Дело в том, что явное локальное задание параметра имеет более высокий приоритет, чем гло- бальное, хранящееся в plot_options. Ну и напоследок небольшая ложка дегтя в этой замечательной бочке с медом: многие противники бесплатного программно- го обеспечения в качестве существенного его недостатка называют слабую доку- ментированность. Не обошла эта беда и пару Maxima
+
Gnuplot. Так, внеся неко- торые изменения в свежие версии своих программ, разработчики забыли отразить эти изменения в руководствах пользователя. Так, например, в руководстве к Max- ima до сих пор утверждается, что Gnuplot не умеет вращать трехмерные графики, а умолчательное значение ключа gnuplot_pm3d равно false. Несколько менее без- обидными такие неточности становятся, когда функция в новой версии начинает принимать немного другой, по сравнению с версией предыдущей, набор парамет- ров, но об этом нигде не говорится. Для примера здесь можно привести график из руководства пользователя, объединяющий построение дискретного набора точек и непрерывной кривой. Некоторые изменения синтаксиса, сделанные для приве-

34
дения графика к виду, обещанному авторами руководства, могут оказаться полез- ными желающим получить красивые графики.
0 0.2 0.4 0.6 0.8 1
1.2 1.4 1.6 0
10 20 30 40 50
p e
ri o
d
(s
)
pendulum's length (cm)
experiment theory

35
Литература
1. ТарнавскийТ. Maxima – максимум свободы символьных вычислений // Linux
Format №7 (81), 2006.
2. ТарнавскийТ. Maxima – функции и операторы // Linux Format №8 (82), 2006.
3. ТарнавскийТ. Maxima: укротитель выражений // Linux Format №9 (83), 2006.
4. ТарнавскийТ. Maxima – максимум свободы символьных вычислений. Алгебра и начала анализа // Linux Format №10 (84), 2006.
5. ТарнавскийТ. Maxima – максимум свободы символьных вычислений. Графики и управляющие конструкции // Linux Format №11 (85), 2006.
6. ТарнавскийТ. Maxima – максимум свободы символьных вычислений. Работа с файлами и фактами // Linux Format №12 (86), 2006.
7. Maple at 20. Though it all, it’s been about the math // The Newsletter from Waterloo
Maple Inc. Fall 2001.
написать администратору сайта