Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 2_MAPLE_2012.docx
Скачиваний:
17
Добавлен:
25.03.2016
Размер:
326.69 Кб
Скачать

Функции для работы с векторами и матрицами

Элементы векторов и матриц

Элементы векторов и матриц являются индексированными переменными, то есть место каждого элемента вектора определяется его индексом, а у матрицы — двумя индексами. Обычно их обобщенно обозначают как 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) — возвращает сингулярные значения массива или матрицы А.