КМ - Maple
.pdfРассмотрим пример задания единичной матрицы.
>n := 3:
A := array(1..n, 1..n): for i from 1 to n
do
for j from 1 to n do
if i = j
then A[i, j] := 1 else A[i, j] := 0
end if end do
end do: evalm(A);
1 0 00 1 0 0 0 1
Процедуры
Общая форма задания процедуры в Maple:
<Имя процедуры> := proc(<Список параметров>) [ local <Список локальных переменных>; ]
[ global <Список глобальных переменных>; ] [ options <Список расширяющих ключей>; ]
[ description <Комментарий к процедуре>; ] <Тело процедуры>
end proc;
Процедура возвращает значение последнего выражения в ее теле. Реализуем процедуру вычисления модуля комплексного числа:
> modc := proc(z) sqrt(Re(z)^2+Im(z)^2)
end proc: modc(3+4*I);
5
31
При подготовке процедур надо предусматривать их поведение при возможных ошибках. При выявлении ошибки предусматривается вывод соответствующего сообщения. Для этого используется функция error. Реализуем процедуру вычисления квадратного корня из действительного числа с использованием функции error:
> sqroot := proc(x)
if not (type(x, numeric) or type(x, realcons)) or signum(x) = -1
then error "invalid variable x: %1", x else x^(1/2)
end if end proc: sqroot(-1);
Error, (in sqroot) invalid variable x: -1
Работа с файлами
Для записи данных в файл служит функция writedata:
writedata[APPEND](filename, data, format);
Данные могут задаваться списком, вектором или матрицей, формат данных может быть integer, float или string. Необязательный указатель APPEND используется, если данные дописываются в уже созданный файл.
>data := array([[1, 2, 3, 4], [5, 6, 7, 8]]): writedata("c:/data.txt", data, integer):
Считывание данных из файла обеспечивает функция readdata:
readdata(filename, format, n);
Здесь n — число считываемых столбцов.
> data := readdata("c:/data.txt", integer, 2);
data := [[1, 2], [5, 6]]
32
2.6Специализированные пакеты Maple
Как уже было отмечено, помимо команд, находящихся в основной библиотеке Maple, большое количество команд, расширяющих функциональные характеристики программы в отдельных областях математики, находится в соответствующих специализированных пакетах Maple. Например, пакет linalg, содержащий процедуры и функции для работы с векторами и матрицами.
Некоторые специализированные пакеты Maple перечислены ниже. Чтобы получить более подробную информацию по каждому из пакетов, нужно в области ввода ввести знак вопроса и, без пробела, название интересующего пакета, после чего нажать <Enter>.
Некоторые специализированные пакеты системы Maple
Название пакета |
Описание |
|
|
student |
Математика и программирование |
plots |
Расширенные средства графики и анимации |
plottools |
Вспомогательные инструменты графики |
geometry |
Геометрия |
numtheory |
Теория чисел |
linalg |
Линейная алгебра |
simplex |
Линейная оптимизация |
polytools |
Работа с полиномами |
orthopoly |
Работа с ортогональными полиномами |
sumtools |
Работа с конечными и бесконечными суммами |
powseries |
Работа со степенными рядами |
numapprox |
Численная аппроксимация функций |
DEtools |
Дифференциальные уравнения |
inttrans |
Интегральные преобразования |
stats |
Математическая статистика |
logic |
Математическая логика |
combinat |
Комбинаторика |
Networks |
Теория графов |
tensor |
Тензоры и теория относительности |
finance |
Финансовая математика |
|
|
|
|
33
3 |
Графика в Maple |
|
|
|
|
|
|
|
||
3.1 |
Двумерная графика |
|
|
|
|
|
||||
|
Для построения двумерных графиков в Maple служит процеду- |
|||||||||
ра plot. При построении графика функции, заданной явно, процеду- |
||||||||||
ра plot записывается следующим образом: |
|
|
|
|||||||
plot(y(x), x = x1..x2, y1..y2, options); |
|
|||||||||
|
Построим график функции y = sin x |
: |
|
|
|
|||||
|
|
|
|
|
|
x |
|
|
|
|
> plot(sin(x)/x, x = -10..10); |
|
|
|
|
||||||
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
0.8 |
|
|
|
|
|
|
|
|
|
|
0.6 |
|
|
|
|
|
|
|
|
|
|
0.4 |
|
|
|
|
|
|
|
|
|
|
0.2 |
|
|
|
|
|
–10 |
–8 |
–6 |
–4 |
–2 |
2 |
4 |
6 |
8 |
10 |
|
|
|
|
|
|
|
|
x |
|
|
|
|
|
|
|
|
–0.2 |
|
|
|
|
|
Maple предоставляет возможность построения на одном рисунке |
|||||||||
графиков нескольких функций: |
|
|
|
|
|
|
> plot([cos(x), sin(x)/x], x=-2*Pi..2*Pi);
|
|
|
1 |
|
|
|
|
|
|
0.5 |
|
|
|
–6 |
–4 |
–2 |
0 |
2 |
4 |
6 |
|
||||||
|
|
|
|
|
x |
|
|
|
|
–0.5 |
|
|
|
|
|
|
–1 |
|
|
|
|
|
|
34 |
|
|
|
При построении графика функции, заданной параметрически, про- |
|||
цедура plot записывается следующим образом: |
|
||
plot([x(t), y(t), t=t1..t2], x1..x2, y1..y2, options); |
|||
> plot([sin(3*t), cos(5*t), t=0..2*Pi]); |
|
||
|
|
1 |
|
|
|
0.5 |
|
–1 |
–0.5 |
0.5 |
1 |
|
|
–0.5 |
|
|
|
–1 |
|
Для построения графика сеточной функции, заданной в виде списка |
|||
точек [[x1, y1], [x2, y2], . . . , [xn, yn]] , процедура plot записывается следу- |
|||
ющим образом: |
|
|
|
plot(A, x1..x2, y1..y2, options);
>A := [[n, sin(n/4)] $n=-12..12]:
plot(A, style=point, symbol=circle, symbolsize=15);
1
0.5
–10 |
–5 |
0 |
5 |
10 |
|
–0.5
–1
35
3.2Трехмерная графика
Для построения трехмерных графиков служит процедура plot3d. При построении графика поверхности, заданной явно, процедура plot3d записывается следующим образом:
plot3d(z(x, y), x=x1..x2, y=y1..y2, options);
Построим график поверхности z = sin(x2 + y2) :
> plot3d(sin(x^2+y^2), x=-Pi/2..Pi/2, y=-Pi/2..Pi/2, color=white, numpoints=1000);
В параметрах функций plot и plot3d можно указать систему координат:
> plot3d(1, s=Pi/3..2*Pi, t=0..Pi, coords=spherical, color=white);
36
3.3Расширенные средства графики
Часто удобно использовать функции из графического пакета plots.
Некоторые функции из пакета plots
Функция |
Функция 3d |
Описание |
|
|
|
polarplot |
– |
Построение графика функции |
|
|
в полярной системе координат |
– |
cylinderplot |
Построение графика функции |
|
|
в цилиндрической системе |
|
|
координат |
– |
sphereplot |
Построение графика функции в |
|
|
сферической системе координат |
complexplot |
complexplot3d |
Построение графика функции |
|
|
в комплекной плоскости |
|
|
(комплексном пространстве) |
implicitplot |
implicitplot3d |
Построение графика |
|
|
неявной функции |
inequal |
– |
Построение графика решения |
|
|
системы линейных неравенств |
odeplot |
odeplot |
Построение графика решения |
|
|
дифференциального уравнения |
listplot |
listplot3d |
Построение графика |
|
|
сеточной функции |
pointplot |
pointplot3d |
Построение точечного графика |
– |
spacecurve |
Построение пространственной |
|
|
кривой |
pointplot |
pointplot3d |
Построение многоугольника |
– |
polyhedraplot |
Построение многогранника |
textplot |
textplot3d |
Вывод текста на график |
contourplot |
contourplot3d |
Построение графика |
|
|
с линиями уровня |
fieldplot |
fieldplot3d |
Построение векторного поля |
gradplot |
gradplot3d |
Построение векторного поля |
|
|
градиента |
display |
display3d |
Построение графика для |
|
|
списка графических объектов |
animate |
animate3d |
Создание анимации |
|
|
графика функции |
|
|
|
|
|
|
37
Подробную информацию о пакете plots можно получить, исполнив команду ?plots.
>with(plots):
R := t -> 100/(100+(t-Pi/2)^8) *(2-sin(7*t)-cos(30*t)/2):
polarplot(R(t), t=-Pi/2..3/2*Pi, axes=NONE);
>ineq := {b>=-3, -a+2*b<6, 3*a+2*b>0, a-b<=8, a+b<5}: inequal(ineq, a=-5..10, b=-5..7,
optionsfeasible=(color=gray),
optionsexcluded=(color=white));
|
|
6 |
|
|
|
|
|
|
|
4 |
|
|
|
|
|
|
|
2 |
|
|
|
|
|
–4 |
–2 |
0 |
2 |
4 |
6 |
8 |
10 |
|
|||||||
|
|
–2 |
|
|
|
|
|
|
|
–4 |
|
|
|
|
|
38
> A := [seq([seq(sin(n*m/(20*Pi)), n=-10..10)], m=-15..15)]:
listplot3d(A, color=white, axes=BOXED);
1
0.5
0
–0.5
–1
5 |
5 |
|
10 |
||
10 |
||
15 |
||
15 |
20 |
|
25 |
||
20 |
||
30 |
>f := (x, y) -> x/sqrt(x^2+y^2+1): g := (x, y) -> -y/sqrt(x^2+y^2+1):
fieldplot([f, g], -1..1, -1..1, arrows=SLIM);
1
0.5
–1 |
–0.5 |
0 |
0.5 |
1 |
|
–0.5
–1
39
4Высшая математика
4.1Линейная алгебра
Вядро Maple введены минимально необходимые средства для работы с векторами и матрицами. Основной упор сделан на пакеты расширения, одним из которых является пакет linalg. Некоторые функции из этого пакета представлены в таблицах. Подробную информацию о пакете linalg можно получить, исполнив команду ?linalg.
>with(linalg):
M := matrix(2, 2, [[1, 2], [2, 5]]);
M := |
2 |
5 |
|
1 |
2 |
> eigenvalues(M);
√√
3 + 2 2, 3 − 2 2
>v := vector([0, 1]): if det(M) <> 0 then
inverse(M);
x := linsolve(M, v); end if;
5 −2 −2 1
x := [−2, 1]
> evalm(M &* x - v);
[0, 0]
>LUdecomp(M, L=’L’, U=’U’): L=evalm(L);
U=evalm(U);
L = |
2 |
1 |
|
1 |
0 |
U = |
0 |
1 |
|
1 |
2 |
40