Компания ALT Linux
Опубликован: 24.03.2015 | Доступ: свободный | Студентов: 550 / 136 | Длительность: 19:00:00
Лекция 2:

Основы Maxima

2.8 Решение задач элементарной математики

2.8.1 Нахождение корней уравнений и систем алгебраических уравнений

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

  • solve(expr,x) — решение одного уравнения относительно переменной x;
  • solve(expr) — решение уравнения с одной неизвестной и числовыми коэффициентами;
  • solve([eqn_1,... ,eqn_n], [x_1,... ,x_n]) — решение системы уравнений.

Примеры:

Решение одного уравнения с одним неизвестным

(%i7)	solve(x^2-5*x+4);
[x=1,x=4]\leqno{(\%o7) }

Решение одного уравнения в символьном виде:

(%i2)	solve([x-a/x+b], [x]);
[x=-\frac{\sqrt{{b}^{2}+4\,a}+b}{2},x=\frac{\sqrt{{b}^{2}+4\,a}-b}{2}]\leqno{(\%o2) }

Решение системы уравнений в символьном виде:

(%i10)	solve([x*y/(x+y)=a,x*z/(x+z)=b,y*z/(y+z)=c], [x,y,z]);
\begin{math}
(\%o10) [[x=0,y=0,z=0], 
[x=\frac{2abc}{\left( b+a\right) c-ab}, y=\frac{2abc}{\left( b-a\right) c+ab}, 
z=-\frac{2abc}{\left( b-a\right) c-ab}]]
\end{math}

В последнем примере решений несколько, и Maxima выдаёт результат в виде списка.

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

Пример:

(%i13) solve([sin(x)=0], [x]);

solve: using arc-trig functions to get a solution.
Some solutions will be lost.
[x=0]\leqno{(\%o13) }

Также Maxima позволяет находить комплексные корни

(%i18)	solve([x^2+x+1], [x]);
[x=-\frac{\sqrt{3}\,i+1}{2},x=\frac{\sqrt{3}\,i-1}{2}]\leqno{(\%o18) }

2.9 Построение графиков и поверхностей

Для вывода графиков на экран или на печать при помощи Maxima существуют несколько вариантов форматов и, соответственно, программ вывода графики, а именно:

  • openmath (Tcl/Tk программа с графическим интерфейсом пользователя; элемент xMaxima)
  • gnuplot (мощная утилита для построения графиков, обмен с Maxima — через канал)
  • mgnuplot (Tk-интерфейс к gnuplot с рудиментарным графическим интерфейсом пользователя; включён в дистрибутив Maxima)
  • wxMaxima (встроенные возможности frontend-а к Maxima)

Все варианты интерфейса (кроме wxMaxima) для построения графиков используют две базовых функции: plot2d (построение двумерных графиков) и plot3d (построение трехмерных графиков).

При использовании wxMaxima кроме них используются ещё две аналогичные команды: wxplot2d и wxplot3d. Все команды позволяют либо вывести график на экран, либо (в зависимости от параметров функции) в файл.

2.9.1 Построение графика явной функции y = f(x)

График функции y = f(x) на отрезке [a,b] можно построить с помощью функции plot2d(f(x), [x,a,b], опции) или plot2d(f(x), [x,a,b], [y,c,d], опции). Опции не обязательны, однако, для изменения свойств графика их нужно задавать. Параметр [y,c,d] можно не задавать, тогда высота графика выбирается по умолчанию. Построим график функции y = sin(x) на отрезке [-4\pi, 4\pi].

(%i2)	plot2d(sin(x), [x, -4*%pi, 4*%pi]);
(%i3)	plot2d(sin(x), [x, -4*%pi, 4*%pi],[y,-2,2]);

Результаты приведены на рис. 2.1, рис. 2.2

2.9.2 Построение графиков функций, заданных параметрически

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

Команда построения графика: plot2d ([parametric, cos(t), sin(t), [t,-%pi,%pi], [nticks,80]],[x, -4/3, 4/3])

Простейшая команда построения графика

увеличить изображение
Рис. 2.1. Простейшая команда построения графика
Простейшая команда построения графика с указанием интервала по оси Oy

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

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

Опция ntics указывает число точек, по которым проводится кривая.

Рассмотрим некоторые опции.

Опции указываются в виде аргументов функции plot2d в квадратных скобках. Возможна установка легенды, меток на осях, цвета и стиля графика. Применение нескольких опций характеризует следующий пример:

(%i17)	plot2d([[discrete,xy], 2*%pi*sqrt(l/980)], [l,0,50],
		[style, [points,5,2,6], [lines,1,1]],
		[legend, experiment , theory ],
		[xlabel,"pendulum's length (cm)"], [ylabel,"period (s)"]);

В данном примере в одних осях строятся два графика. Первый ([discrete,xy]) строится в виде точек по массиву xy с указанием стиля points. Второй строится по уравнению функции 2*\%pi*sqrt(l/980) с указанием стиля lines. Опция legend указывает подписи кривых, опции xlabel и ylabel — подписи осей. Результат приведён на рис. 2.4.

Формирование массивов для построения графика осуществляется следующим образом:

(%i12)	xx:[10, 20, 30, 40, 50];
(%i13)	yy:[.6, .9, 1.1, 1.3, 1.4];
(%i14)	xy:[[10,.6], [20,.9], [30,1.1], [40,1.3], [50,1.4]];
Совмещение на одном графике действия серии опций

увеличить изображение
Рис. 2.4. Совмещение на одном графике действия серии опций

Можно комбинировать в одних осях графики кривых различного типа: функции y = f(x) или параметрические

\left\{ \begin{array}{c}
  x = \varphi (t),\\
  y = \psi (t) \text{.} \hspace{0.75em}
\end{array} \right.

например (см.рис. 2.5):

plot2d ([x^3+2, [parametric, cos(t), sin(t), [t, -5, 5],
[nticks,80]]], [x, -2, 2], [xlabel, "x"],[ylabel, "y"],
[style, [linespoints,3,2], [lines,3,1]], [gnuplot_term, ps],
[gnuplot_out_file, "test.eps"]);

Опции [gnuplot_term, ps], [gnuplot_out_file, "test.eps"] указывают, что графическая иллюстрация выводится в файл test.eps в формате postscript (бэкенд для вывода графиков — gnuplot).

Опции [style,[linespoints,3,2],lines,3,1]] позволяют указать стиль линий на графике (линия с точками или сплошная линия).

Для вывода результатов в формат png можно использовать опции (указание размеров 400,400 в общем случае необязательно): [gnuplot_term, png size 400,400],[gnuplot_out_file, max.png]

Совмещение на одном графике параметрической и заданной явно кривых

увеличить изображение
Рис. 2.5. Совмещение на одном графике параметрической и заданной явно кривых

2.9.3 Построение кривых в полярной системе координат

Для построения графика в полярных координатах нужно задать изменение значений полярного радиуса и полярного угла. Пусть r = r(f)(a \leq f \leq b) — зависимость полярного радиуса r от полярного угла f. Тогда график этой функции в полярных координатах можно построить, задав у функции plot2d опцию [gnuplot_preamble, set polar; set zeroaxis ]. Данная опция будет действовать лишь при условии, что выбран формат графика gnuplot.

Пример: построить в полярных координатах график функции r = 3(1-\varphi+\varphi^2)$, $0 \leq \varphi \leq 2\pi.

Для создания графика используем команду:

plot2d([3*(1-ph+ph^2)],[ph,0,2*%pi],[gnuplot_preamble,"set polar",
"set zeroaxis","set encoding koi8r"],[xlabel,x],[gnuplot_term,ps],
[gnuplot_out_file, "max.eps"],[plot_format,gnuplot]);

Результат приведён на рис. 2.6. Толщину и стиль линии можно регулировать, используя опцию style (например, опция [style, [lines,3,1]] устанавливает ширину линии 3 и синий цвет).

Пример: построить в полярных координатах графики трёх функций r = 6cos(\varphi), r=\varphi, r=2sin(\varphi), 0 \leq \varphi \leq 2\pi.

Для создания графика используем команду:

Кривая в полярных координатах

увеличить изображение
Рис. 2.6. Кривая в полярных координатах
Совмещение на одном графике нескольких параметрических кривых

увеличить изображение
Рис. 2.7. Совмещение на одном графике нескольких параметрических кривых
plot2d([6*cos(ph),ph,2*sin(ph)],[ph,0,2*%pi],[gnuplot_preamble,
"set polar","set zeroaxis","set encoding koi8r"],[xlabel, x],
[gnuplot_term,ps],[gnuplot_out_file, "max3.eps"],
[plot_format,gnuplot]);

Результат приведён на рис. 2.7.

График функции двух переменных с окраской поверхности

увеличить изображение
Рис. 2.8. График функции двух переменных с окраской поверхности

2.9.4 Построение трёхмерных графиков

Основная команда для построения трёхмерных графиков — plot3d. Рассмотрим технологию построения графиков с использованием интерфейса gnuplot. Поверхность функции в цветном изображении строится с использованием опции pm3d (рис. 2.8).

Пример:

(%i2)	plot3d (atan (-x^2 + y^3/4), [x, -4, 4], [y, -4, 4],
	[grid, 50, 50], [gnuplot_pm3d,true],[gnuplot_term,ps],
	[gnuplot_out_file,"plot31.eps"]);

С использованием этой опции и особенностей программы gnuplot можно построить и изображение линий уровня функции. Пример (рис. 2.9 ):

(%i3)	plot3d (cos (-x^2 + y^3/4), [x, -4, 4], [y, -4, 4],
	[gnuplot_preamble,"set view map"],
	[gnuplot_pm3d, true], [grid, 150, 150],[gnuplot_term,ps],
	[gnuplot_out_file,"plot32.eps"]);

Более строгий результат можно получить, используя стандартный формат функции plot3d. Пример (рис. 2.10):

(%i4)	plot3d (2^(-u^2 + v^2), [u, -3, 3], [v, -2, 2]);
График линий уровня функции двух переменных с окраской поверхности

увеличить изображение
Рис. 2.9. График линий уровня функции двух переменных с окраской поверхности

Для вывода графика в файл всё равно необходимо использовать опции gnuplot (установить терминал gnuplot и имя файла результата). Необходимая команда:

(%i5)	plot3d (2^(-u^2 + v^2), [u, -3, 3], [v, -2, 2],
	[gnuplot_term,ps],[gnuplot_out_file,"plot33.eps"]);

Смена формата графики также возможна за счёт использования опций plot3d. Пример (вывод графики в формате openmathрис. 2.11):

(%i6)	plot3d (2^(-u^2 + v^2), [u, -3, 3], [v, -2, 2],
	[plot_format, openmath]);

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

Функция, для которой строится трёхмерный график, может задаваться как Maxima или Lisp-функция, лямбда-функция либо выражение Maxima общего вида. При использовании формата plot3d(f,...) выражение f рассматривается как функция двух переменных. При использовании формата plot3d([f_1,f_2,f_3],...), каждая функция (f_1,f_2,f_3) рассматривается как функция трёх переменных.

Простой график функции двух переменных

увеличить изображение
Рис. 2.10. Простой график функции двух переменных
Простой график функции двух переменных (формат OpenMath)

Рис. 2.11. Простой график функции двух переменных (формат OpenMath)
График функции, определённой в формате [f1,f2,f3]

увеличить изображение
Рис. 2.12. График функции, определённой в формате [f1,f2,f3]

Пример использования формата plot3d([f_1,f_2,f_3],...) (рис. 2.12):

Функция plot3d позволяет строить графики функций, заданных в цилиндрических или сферических координатах за счёт использования преобразования координат (опция [transform_xy, polar_to_xy] или функция make_transform (vars, fx, fy, fz)).

Определённые преимущества обеспечивает формат wxplot, имеющийся в графическом интерфейсе wxMaxima (wxplot2d и wxplot3d). Команда построения графика в формате wxMaxima по синтаксису мало отличается от синтаксиса команд plot2d и plot3d. Качество воспроизведения графиков на экране wxMaxima относительно невысокое, но легко, выделив график щелчком мыши, сохранить его в файл (по умолчанию maxout.png). Качество копии в файле намного лучше, чем рисунка в окне wxMaxima.