- •Федеральное агентство по образованию
- •«Национальный исследовательский томский политехнический университет»
- •Практикум на эвм
- •«Векторные и матричные функции в пакете maple»
- •Лабораторная работа №2 векторные и матричные функции в пакете maple
- •Массивы, векторы и матрицы
- •Функции для работы с векторами и матрицами
- •Операции с векторами
- •Символьные операции с матрицами
- •Ход работы
- •Контрольные вопросы
- •Индивидуальные задания
Функции для работы с векторами и матрицами
Элементы векторов и матриц
Элементы векторов и матриц являются индексированными переменными, то есть место каждого элемента вектора определяется его индексом, а у матрицы — двумя индексами. Обычно их обобщенно обозначают как i (номер строки матрицы или порядковый номер элемента вектора), j (номер столбца матрицы). Допустимы операции вызова нужного элемента и присваивания ему нового значения:
V[i] — вызов i-го элемента вектора V;
M[i, j] — вызов элемента матрицы М, расположенного на i-ой строке в j-ом столбце;
V[i]:=x — присваивание нового значения х i-му элементу вектора V;
M[i,j]:=x — присваивание нового значения х элементу матрицы М.
Преобразование списков в векторы и матрицы
Прежде всего, надо обратить внимание на то, что векторы и матрицы хотя и похожи на списки, но не полностью отождествляются с ними. В этом можно убедиться с помощью следующих примеров, в которых функция type используется для контроля типов множественных объектов (векторов и матриц):
type(V, vector) — тестирует аргумент V и возвращает true, если V — вектор, и false в ином случае;
type(M,matrix) — тестирует аргумент М и возвращает true, если М — матрица, и false в ином случае.
>M1:=[1,2,3,4];
>type(M1<vector);
false
>V:=convert(M1,vector);
>type(V,vector);
true
>M2:=[[1,2],[3,4]];
>type(M2,matrix);
false
>M:=convert(M2,matrix);
>type(M2,matrix);
true
Операции с векторами
Важное достоинство систем компьютерной алгебры, к которым относится и Maple, заключается в возможности выполнения аналитических (символьных) операций над векторами и матрицами:
>V:=array(1..4,[1,2,3,]);
>[V[1],V[2],V[4]];
>V[1]:=a:V[3]:=b;
>evalm(V);
> evalm(V+2);
> evalm(2*V);
evalm(V**V);
В этих примерах используется функция evalm(M), осуществляющая вычисление матрицы или вектора.
ПРИМЕЧАНИЕ. Рекомендуется перед проведением символьных операций с векторами и матрицами очистить память от предшествующих определений с помощью команды restart. Если какие-то элементы векторов или матриц были ранее определены, это может привести к очень сильным искажениям вида конечных результатов. Очистка памяти устраняет возможность ошибок такого рода.
Символьные операции с матрицами
Ниже представлены примеры символьных операций, осуществляемых над квадратными матрицами одного размера:
>M1:=array(1..2,1..2,[[a1,b1],[c1,d1]]);
>M2:= array(1..2,1..2,[[a2,b2],[c2,d2]]);
>evalm(M1+M2);
>evalm(M1-M2);
>evalm(M1.M2);
>evalm(M1&*M2);
>evalm(M1/M2);
Заметим, что команда умножения матриц (&*)в пакете MATLAB7 (примеры из этого пакета), в MATLAB9.5 (или 13)заменяется текстовой точкой:
> evalm(M1.M2);
> evalm(M1^2);
> evalm(sin(M1));
> evalm(M1*z);
> evalm(M1+z);
Среди других функций для работы с матрицами полезно обратить внимание на функцию mар, которая применяет заданную операцию (например, функции дифференцирования diff и интегрирования int) к каждому элементу матрицы. Примеры такого рода даны ниже:
>M:=array(1..2,1..2,[[x,x^2],[x^3,x^4]];
>map(diff,M,x);
>map(int,%,x);
Ниже приводятся примеры операций с матрицами и векторами.
> V:=Matrix([[a,2],[d,4]]);
> M:=Matrix([[2,c],[2,d]]);
> v1:=<a|2>;
> v2:=<b|4>;
> v1.v2;
> evalm(M.M);
> M1:=evalm(M^(-1));
> S:=evalm(M1.M);
> simplify(S);
Обычно с матрицами приходится работать при решении задач линейной алгебры. Для этого необходимо использовать пакет расширения linalg, который вызывается командой:
with(linalg):
Если в конце выражения поставить (;), то появится длинный список функций, решающих задачи линейной алгебры. Список наиболее часто используемых приводится ниже.
Операции со структурой отдельного вектора V и матрицы М:
coldim(M) — возвращает число столбцов матрицы М;
rowdim(M) — возвращает число строк матрицы М;
vectdim(V) — возвращает размерность вектора V;
col(M,i) — возвращает i-й столбец матрицы М;
row(M,i) — возвращает i-ю строку матрицы М;
tninor(M,i, j) — возвращает минор матрицы М для элемента с индексами i и j;
delcols(M,i.. j) — удаляет столбцы матрицы М от i-roдо j-ro;
del rows (V,i..j) — удаляет строки матрицы М от i-й до j-й;
extend (М, т, n,х) — расширяет матрицу М на m строк и n столбцов с применением заполнителя х.
Основные векторные и матричные операции:
dotprod(U,V) — возвращает скалярное произведение векторов U и V;
crossprod(U,V) — возвращает векторное произведение векторов
U и V;
norm(V) или norm(M) — возвращает норму вектора или матрицы;
copyinto(A,B,i, j) — копирует матрицу А в В для элементов последовательно от i до j;
concat(Ml,M2) — возвращает объединенную матрицу с горизонтальным слиянием матриц Ml и М2;
stack(Ml,M2) — возвращает объединенную матрицу с вертикальным слиянием Ml и М2;
matadd(A,B) и evalm(A+B) — возвращает сумму матриц А и В;
multlply(A,B) и evalm(A.B) — возвращает произведение матриц;
adjoint (М) или adj(M) — возвращает присоединенную матрицу, такую что M? adj(M) дает диагональную матрицу, определитель которой есть det(M);
charpoly(M,lambda) — возвращает характеристический полином матрицы М относительно заданной переменной lambda;
det(M) — возвращает детерминант (определитель) матрицы М;
Eigenvals(M,vector) — инертная форма функции, возвращающей собственные значения матрицы М и (при указании необязательного параметра vector) соответствующие им собственные векторы;
jordan(M) — возвращает матрицу М в форме Жордана;
hermite(M) — возвращает матрицу М в эрмитовой форме;
trace(M) — возвращает след матрицы М;
rank(M) — возвращает ранг матрицы М;
transpose(M) — возвращает транспонированную матрицу М;
inverse(M) или evalm(l/M) — возвращает матрицу, обратную к М;
singularvals(A) — возвращает сингулярные значения массива или матрицы А.