Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

КМ - Maple

.pdf
Скачиваний:
78
Добавлен:
21.05.2015
Размер:
1.93 Mб
Скачать

Рассмотрим пример задания единичной матрицы.

>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