Действия с матрицами
Определение матрицы.
Для определения матрицы в Maple можно использовать команду matrix(n, m, [[a11,a12,…,a1n], [a21,a22,…,a2m],…, [an1,an2,…,anm]]), где n - число строк, m – число столбцов в матрице. Эти числа задавать необязательно, а достаточно перечислить элементы матрицы построчно в квадратных скобках через запятую. Например:
> A:=matrix([[1,2,3],[-3,-2,-1]]);
В Maple матрицы специального вида можно генерировать с помощью дополнительных команд. В частности диагональную матрицу можно получить командой diag. Например:
> J:=diag(1,2,3);
Генерировать матрицу можно с помощью функции f (i, j) от переменных i, j – индексов матрицы: matrix(n, m, f), где где n - число строк, m – число столбцов. Например:
> f:=(i, j)->x^i*y^j;
> A:=matrix(2,3,f);
Число строк в матрице А можно определить с помощью команды rowdim(A), а число столбцов – с помощью команды coldim(A).
Арифметические операции с матрицами.
Сложение двух матриц одинаковой размерности осуществляется теми же командами, что и сложение векторов: evalm(A+B) или matadd(A,B). Произведение двух матриц может быть найдено с помощью двух команд:
- evalm(A&*B);
- multiply(A,B).
В качестве второго аргумента в командах, вычисляющих произведение, можно указывать вектор, например:
> A:=matrix([[1,0],[0,-1]]);
> B:=matrix([[-5,1], [7,4]]);
> v:=vector([2,4]);
> multiply(A,v);
> multiply(A,B);
> matadd(A,B);
Команда evalm позволяет также прибавлять к матрице число и умножать матрицу на число. Например:
> С:=matrix([[1,1],[2,3]]):
> evalm(2+3*С);
Определители, миноры и алгебраические дополнения. Ранг и след матрицы.
Определитель матрицы А вычисляется командой det(A). Команда minor(A,i,j) возвращает матрицу, полученную из исходной матрицы А вычеркиванием i -ой строки и j -ого столбца. Минор Mij элемента aij матрицы А можно вычислить командой det(minor(A,i,j)). Ранг матрицы А вычисляется командой rank(A). След матрицы А, равный сумме ее диагональных элементов, вычисляется командой trace(A). 7
> A:=matrix([[4,0,5],[0,1,-6],[3,0,4]]);
> det(A);
> minor(А,3,2);
> det(%);
-24
> trace(A);
Обратная и транспонированная матрицы.
Обратную матрицу А- 1, такую что А- 1 А = АА- 1= Е, где Е - единичная матрица, можно вычислить двумя способами:
- evalm(1/A);
- inverse(A).
Транспонирование матрицы А – это изменение местами строк и столбцов. Полученная в результате этого матрица называется транспонированной и обозначается А'. Транспонированную матрицу А' можно вычислить командой transpose(A).
Например, используя заданную в предыдущем пункте матрицу А, найдем ей обратную и транспонированную:
> inverse(A);
> multiply(A,%);
> transpose(A);
Выяснение типа матрицы.
Выяснить положительную или отрицательную определенность матрицы можно при помощи команды definite(A,param), где param может принимать значения: 'positive_def' – положительно определена (A >0), 'positive_semidef' – неотрицательно определенная , 'negative_def' – отрицательно определенная (A <0), 'negative_semidef' - неположительно определенная . Результатом действия будет константа true – подтверждение, false – отрицание сделанного предположения. Например:
> A:=matrix([[2,1],[1,3]]);
> definite(А,'positive_def');
true
Проверить ортогональность матрицы А можно командой orthog(A).
> В:=matrix([[1/2,1*sqrt(3)/2],
[1*sqrt(3)/2,-1/2]]);
> orthog(В);
true
Функции от матриц.
Возведение матрицы А в степень n производится командой evalm(A^n). Вычисление матричной экспоненты возможно с помощью команды exponential(A). Например:
> Т:=matrix([[5*a,2*b],[-2*b,5*a]]);
> exponential(Т);
> evalm(Т^2);
Задание 2.
- Даны матрицы: , , . Найти: (AB) C, det A, det B, det C, det[(AB) C ]. Наберите:
> with(linalg):restart;
> A:=matrix([[4,3],[7,5]]):
> B:=matrix([[-28,93],[38,-126]]):
> C:=matrix([[7,3],[2,1]]):
> F:=evalm(A&*B&*C);
> Det(A)=det(A); Det(B)=det(B); Det(C)=det(C);
Det(F)=det(F);
Det(A)=- 1
Det(B)=- 6
Det(C)=1
Det(F)=6
- Дана матрица , найти: det A, , A’, det(M 22). Наберите:
> A:=matrix([[2,5,7],[6,3,4],[5,-2,-3]]);
> Det(A)=det(A);
Det(A)=- 1
> transpose(A);
> inverse(A);
> det(minor(A,2,2));
- 41
- Найти ранг матрицы .
> A:=matrix([[8,-4,5,5,9], [1,-3,-5,0,-7],
[7,-5,1,4,1], [3,-1,3,2,5]]):
> r(A)=rank(A);
r(A)=3
- Вычислить , где .
> exponential([[3,-1],[1,1]]);
- Дана матрица . Найти значение многочлена .
> A:=matrix([[5,1,4],[3,3,2],[6,2,10]]):
> P(A)=evalm(A^3-18*A^2+64*A);
Описание пакета LinearAlgebra
В Maple имеется пакет LinearAlgebra, ориентированный на решение задач линейной (матричной) алгебры. Он загружается соответствующей командой:
[> with(LinearAlgebra);
После выполнения этих команд система выводит на экран список процедур и функций, которыми располагает пакет LinearAlgebra.
Пакет LinearAlgebra является более мощным и совершенным по сравнению с linalg (в ранних версиях программы). Он предназначен для работы с матрицами и векторами больших размеров. Самым простым образом матрицу размером в пакете LinearAlgebra можно сформировать при помощи команды
[> Matrix(m, n, [[a[1,1],…,a[1,n]],…,[a[m,1],…,a[m,n]]]);
Приведем в табл. 3.1 назначение наиболее часто применимых процедур и функций пакета LinearAlgebra. Более полную информацию о каждой процедуре или функции можно узнать в справке, или набрав команду
[> help(имя_процедуры);
Таблица 3.1.
Название процедуры, функции | Формат команды | Назначение процедуры, функции |
Matrix | [> Matrix(m, n, [[a[1,1],…,a[1,n]],…,[a[m,1],…,a[m,n]]]); | Формирование матрицы |
Basis | Определяет базис для векторного пространства, заданного системой векторов | |
CharacteristicMatrix | Создает для квадратной матрицы ее характеристическую матрицу | |
CharacteristicPolynomial | Создает для квадратной матрицы ее характеристический многочлен | |
Determinant | Вычисляет для квадратной матрицы ее определитель | |
DiagonalMatrix | Создает диагональную матрицу | |
Eigenvalues | Вычисляет для квадратной матрицы ее собственные значения (собственные числа) | |
Eigenvectors | Вычисляет для квадратной матрицы ее собственные векторы (рекомендуется использовать вместе с процедурой Eigenvalues) | |
LinearSolve | Решает систему линейных алгебраических уравнений (СЛАУ) в матричной форме | |
MatrixAdd | Процедура сложения двух матриц | |
Matrixlnverse | Процедура нахождения обратной матрицы | |
MatrixMatrixMultiply | Процедура произведения двух матриц | |
MatrixNorm | Функция вычисления нормы матрицы | |
MatrixScalarMultiply | Процедура умножения матрицы на скаляр | |
MatrixVectorMultiply | Процедура умножения матрицы на вектор | |
Minor | Вычисляет минор матрицы | |
Normalize | Нормализует вектор | |
NullSpace | Возвращает нуль-пространство (ядро) матрицы | |
Rank | Вычисляет ранг матрицы | |
SylvesterMatrix | Конструирует матрицу Сильвестра из многочленов | |
Transpose | Вычисляет матрицу, транспонированную к данной |
Пример 3.1. Исследовать СЛАУ с параметром (СЛАУ задана своей расширенной матрицей) и решить в каждом случае:
.
Ниже приведен текст рабочего листа по решению данной задачи (с описаниями по ходу выполнения команд).
[> restart; with(LinearAlgebra): /задаем вектор-столбцы основной матрицы/ [> a1:=Vector([2,1,3]); a2:=Vector([lambda+1,lambda,-3]); a3:=Vector([lambda-2,-3,-7]); /задаем основную матрицу и вектор-столбец свободных коэффициентов системы/ [> A:=Matrix(3,3,[a1,a2,a3]); B:=Vector([3,lambda+2,3]); /выводим определитель основной матрицы системы, решение системы в матричном виде (при значениях, в которых определитель основной матрицы не равен нулю)/ [> Delta:=Determinant(A); X:=LinearSolve(A,B); /вычисляем значения параметра , при котором определитель обращается в нуль/ [> Korni:=solve(Determinant(A)=0); [> lambda:=Korni[1]; X:=LinearSolve(A,B); Error,(in LinearAlgebra:-LA_Main:-LinearSolve) inconsistent system /Maple предупреждает, что СЛАУ при данном значении параметра несовместна/ [> lambda:=Korni[2]; X:=LinearSolve(A,B); /СЛАУ имеет бесконечное множество решений при этом значении параметра / |
Пример 3.2. Найти собственные числа и соответственные собственные векторы матрицы
.
Текст рабочего листа по решению задачи имеет вид:
[> restart; with(LinearAlgebra): [> A:=Matrix(3,3,[[3,-6,9],[1,-2,3],[-3,6,-9]]); /задание исходной матрицы/ [> Add(A,-lambda): p(lambda):=Determinant(Add(A,-lambda)); /составление характеристического многочлена матрицы/ [> solve(p(lambda)=0,{lambda}); /вычисление собственных чисел матрицы/ [> v:=Eigenvalues(A); F:=Eigenvectors(A); /вычисление собственных чисел и собственных векторов матрицы с помощью процедуры Eigenvectors: первый столбец v – собственные числа матрицы, вторая матрица F содержит соответствующие собственные векторы матрицы, они расположены по столбцам!)/ |