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

КМ - Maple

.pdf
Скачиваний:
94
Добавлен:
21.05.2015
Размер:
2 Мб
Скачать
☆

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

>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