Решение задач линейной алгебры

Численные методы для решения задач линейной алгебры в Maple реализованы в виде пакета linalg, который является достаточно мощным инструментом этой области и содержит более ста функций. Вызов этого пакета осуществляется командой with (linalg).
Опишем наиболее распространенные функции линейной алгебры, разделив их на три категории.

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

> matrix (n, m, [<список элементов>]) - создает матрицу размером nхm;
> augment (А, В) или concat (А, В) - объединяет две или более матриц горизонтально;
> delcols (А, i.. j) - удаляет столбцы с i no j в матрице А;
> delrows (A, i.. j) - удаляет строки с i по j в матрице А;
> submatrix (A, i1.. j 1, i2.. j2) - из матрицы А выделить подматрицу с i 1 поi1 строку и с i2 по j2 столбец;
> entermatrix (A) - интерактивный ввод матрицы А;
> mulcol (A, j, k) - умножение в матрице А столбца с номером j на k;
> mulrow (A, i, k) - умножение в матрице А строки с номером i на k,
> transpose (A) - транспонирование А;
> vector (n, [<список элементов>] - создает вектор размерностью n, элементы которого указаны в списке;
> scalarmul (V, k) - поэлементное умножение вектора V на k,
> crossprod (X, Z) - вычисляет векторное произведение векторов X, Z;

Пример:


with(linalg);
A:=matrix(2,2,[1,2,3,4]);
A := matrix([[1, 2], [3, 4]])
B:=matrix(2,2,[5,6,7,8]);
B := matrix([[5, 6], [7, 8]])
AB:=augment(A,B);
AB := matrix([[1, 2, 5, 6], [3, 4, 7, 8]])
delcols(AB,1..1);#удаление первого столбца из АB
matrix([[2, 5, 6], [4, 7, 8]])
delrows(AB,2..2);# удаление второй строки из АВ
matrix([[1, 2, 5, 6]])
submatrix(AB,1..2,2..3);
matrix([[2, 5], [4, 7]])
C:=matrix(2,2,[2,4,6,8]);
C := matrix([[2, 4], [6, 8]])
C[2,2]+A[2,2];
12
evalm((A+B)&*C);
matrix([[60, 88], [92, 136]])
mulcol(C,1,4);
matrix([[8, 4], [24, 8]])
mulrow(C,2,5);
matrix([[2, 4], [30, 40]])
transpose(C)
matrix([[2, 6], [4, 8]])
diag(a,b,c);
matrix([[a, 0, 0], [0, b, 0], [0, 0, c]])

Функции вычисления различных числовых характеристик матриц:

> coldim (A) - определяет число столбцов матрицы А;
> rowdirn (A) - определяет число строк матрицы А;
> row (А, к) - выделяет k-ю строку матрицы А;
> col (А, к) - выделяет k-й столбец матрицы А;
> vectdim(X) - определяет длину вектора X;
> dotprod(X, Z) - вычисляет скалярное произведение векторов X, Z ;
> det (А) - вычисляет определитель матрицы А;
> minor (A, i, j) - возвращает минор матрицы А для элемента с индексами i,j;
> rank (A) - определяет ранг матрицы А;
> trace (A) - вычисляет след матрицы А;
> norm (A) - норма матрицы или вектора A;
> cond (A) - вычисляет число обусловленности матрицы А.

Пример:

with(linalg);
A:=matrix(2,3,[1,2,3,4,5,6]);
A := matrix([[1, 2, 3], [4, 5, 6]])
coldim(A);#число столбцов матрицы А
3
rowdim(A);#число строк матрицы А
2
X:=col(A,3); #третий столбец матрицы А
X := vector([3, 6])
Y:=row(A,1);#первая отрока матрицы А
Y := vector([1, 2, 3])
vectdim(Y);#длина вектора Y
3
 Z:=row(A,2):dotprod(Y,Z);#скалярное произведение Y и Z
32
M:=matrix(3,3,[1,2,2,3,4,5,6,7,8]);
M := matrix([[1, 2, 2], [3, 4, 5], [6, 7, 8]])
det(M); #определитель
3
minor(M,2,3);#минор для элемента с номером 2,3
matrix([[1, 2], [6, 7]])
rank(M);#ранг матрицы
3
trace(M);#след матрицы
13
 norm(M);#норма матрицы
21
cond(М);#чнсло обусловленности матрицы
60/11

Функции, реализующие численные алгоритмы решения задач линейной алгебры:

> inverse (A) - формирует матрицу, обратную к А;
> linsolve(A,b) или linsolve(A,B) - находит решение линейной системы уравнений А • х =b или решает матричное уравнение А • Х= В;
> rref (A) - приведение матрицы А к ступенчатому виду путем элементарных операций со строками;
> cholesky (А) - выполняет разложение по Халецкому для квадратной положительно определенной матрицы А;
> LUdecomp (A) - выполняет LU-разложение матрицы А;
> QRdecornp (А) - выполняет QR-разложение матрицы А;
> eigenvals (A) - находит собственные значения квадратной матрицы А;
> eigenvects (A) - находит собственные векторы квадратной матрицы А;