Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алфавит и синтаксис Maple.doc
Скачиваний:
26
Добавлен:
27.04.2019
Размер:
848.38 Кб
Скачать

2.18. Массивы, векторы и матрицы

Массив в Maple представляет собой разновидность табличной величины, где каждая размерность задана целочисленным диапазоном. Элементами массивов могут быть константы, переменные, выражения, списки и иные объекты. Для формирования массивов служит команда вида

array( indexfcn, bounds, list).

Здесь indexfcn – необязательный параметр, задающий свойства массива, может принимать значения symmetric, antisymmetric, sparse, diagonal, identity или содержать имя процедуры, задающей индексацию массива. Этот параметр задает тип определяемого матрицы или вектора: симметричная (Аij=Aji), антисимметричная (Aij=-Aji), разреженная, диагональная, единичная соответственно. Если этот параметр не задан, то используется "обычная" индексация массива;

bounds – размерности. Если этот параметр опущен, то элементы массива индексируется в соответствии со списком значений bounds;

list – список значений элементов массива. Этот параметр может содержать список уравнений, список значений (одномерных) или вложенный список списков. Если этот параметр отсутствует, то создаётся массив индексных переменных с не заданными конкретными значениями.

.Для формирования одномерных массивов (векторов) в этой команде указывается один интервал a..b изменения индексов

array(a..b, list) .

Для формирования двумерных массивов (матриц) эта команда записывается в виде

array(a..b, c..d, list) ,

где a..b – интервал номеров строк, c..d – номеров столбцов.

Замечание. Не путайте одномерные и двумерные списки с векторами и матрицами. Все объекты, созданные операторов array, имеют тип array. Кроме того, в зависимости от размерности массива, имеют один из типов:

vector – одномерный массив;

matrix – двумерный массив.

Для обращения к отдельным структурным элементам массива можно использовать функцию op. Так, если массив А был предварительно описан оператором array, то обращение

оp (A)

возвращает фактическую структуру массива.

Обращение вида

оp (1, eval (A))

возвращает значение параметра indexfcn, если такой был определен. Если indexfcn не был определен, то ничего не возвращается.

Обращение вида

оp (2, eval (A))

возвращает значение интервалов изменения индексов (параметр bounds).

Обращение вида

ор (3, eval (A))

возвращает значение параметра list, т.е. список, определяющий содержимое массива.

Для эволюции арифметических выражений, содержащих операции с векторами или матрицами используется оператор evalm.

Для сложения двух матриц (векторов) A и B одинаковой размерности можно использовать две команды: add(A, B) или evalm(A+B), причём для команды существует расширенный вариант: add(A, B, c, d) - сложение матриц (векторов) A и B со скалярными множителями c и d, т. е. Вычисляется выражение (c*A+d*B).

Умножить матрицу A на матрицу (векторов) B тоже можно двумя способами: multiply(A, B) или evalm(A &* B). Возведение матрицы A в степень n осуществляется командой evalm(A, n). Обратную матрицу к матрице A можно вычислить двумя способами: inverse(A) и evalm(1 / A). Транспонировать матрицу A можно при помощи команды transpose(A).

Чтобы вычислить определитель матрицы A, достаточно выполнить команду det(A) из пакета linalg. Ранг матрицы A вычисляется командой rank(A). Для вычисления чмсла обусловности используется команда cond(A), а для вычисления следа – команда trace(A).

Примеры:

> x:=array(1..3,[1,2,3]):x1:=array(1..3,[a,b,c]):op(x);op(2,eval(x));

[1, 2, 3]

1 .. 3

> x+x1; evalm(x+x1);

x+x1

[1 + a, 2 + b, 3 + c]

> m:=array(1..2,1..2,[[a,b],[c,d]]);

> m;evalm(m);type(m,array);type(m,matrix);

m

true

true